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

103
Scripts Twisted Bash Asterisk Interfaz UNO Portátiles RealBasic Pelis PSP NetFilter Klik ArchLinux Mudbag Asterisk Dota a tu empresa de una centralita digital IP p61 Limpieza Elimina datos sin dejar ni rastro p41 NÚMERO 17 P.V.P 6,95 Klik Instalación de Software en un solo paso WWW.LINUX - MAGAZINE.ES LINUX MAGAZINE NÚMERO 17 Edición en Castellano SCRIPTS Técnicas para scripts inteligentes Twisted: Aplicaciones de red con Python p16 Optimización de scripts Bash p19 VisualBasic para Linux: RealBasic p21 Scripts TCL para OpenOffice p23 Portátiles Ponemos a prueba tres portátiles de bajo precio con LINUX p30 Cine PSP Utiliza Linux para cargar películas en tu PlayStation Portátil p77 PyUNO Generación de documentos OpenOffice con Python p50 Última versión de Mandriva Linux Incluye opción LIVE CD DVD exclusivo Linux Magazine

description

Puesto a la venta mayo 2006. Tema de Portada: Scripts. DVD: Mandriva One 2006

Transcript of Linux Magazine - Edición en Castellano, Nº 17

Sc

ripts

Twiste

d B

ash

Aste

risk In

terfa

z UN

O P

ortá

tiles R

ea

lBa

sic P

elis P

SP

Ne

tFilter K

lik A

rch

Linu

x M

ud

ba

g

AsteriskDota a tu empresa de una

centralita digital IP p61

LimpiezaElimina datos sin dejar ni rastro p41

NÚMERO 17 • P.V.P 6,95 €

KlikInstalación de Software enun solo paso

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 17

Edición enCastellano

SCRIPTSTécnicas para scripts inteligentes

Twisted: Aplicaciones de red con Python p16

Optimización de scripts Bash p19

VisualBasic para Linux: RealBasic p21

Scripts TCL para OpenOffice p23

PortátilesPonemos a prueba tres

portátiles de bajo

precio con LINUX p30

Cine PSPUtiliza Linux para cargar películas

en tu PlayStation Portátil p77

PyUNOGeneración de documentos

OpenOffice con Python p50

Última versiónde MandrivaLinux

Incluye opciónLIVE CD

DVD exclusivoLinux Magazine

Comer con Oliver es un auténtico

fastidio. No porque no sea buen

tío, que lo es, sino porque se

pasa la comida señalando con su largo y

huesudo dedo teutón cosas sobre la

mesa y enunciando con su fuerte acento

bávaro: “Ración de 200 gramos de uvas

importadas de Suráfrica, número de

litros de fuel consumidos en su trans-

porte: 4 . Lata de aluminio para refresco,

número de kilos de residuos generados

en su producción: 1.7”. Y así sucesiva-

mente. Lo primero que pensé era que

sufría una especie de Asperger que sólo

le afectaba en la cafetería, lo que me

daría material suficiente para escribir un

artículo para Nature sobre él. Pero no.

Lo único que pasa es que tiene una

licenciatura en Ciencias Medioambien-

tales.

Podría parecer, pues, que Oli es de

aquella subespecie de personas peñazo

que, al estilo de Richard Stallman, se

divierten haciéndote sentir culpable

mientras intentas disfrutar de un ciga-

rrillo o cuando paladeas un tierno filete.

Pero, tampoco, más que nada porque

las uvas o la lata de refresco (es un

compulsivo bebedor de cola) pueden

estar perfectamente en su bandeja. Sim-

plemente se dedica a recitar un hecho

demostrado en voz alta con su obsesión

de Asperger crónico. Puede que se trate

de una válvula de seguridad dispuesta

para aliviar la presión de su cráneo que

se activa cada vez que la información

acumulada en su cerebro llega a una

masa crítica. (Nota personal: No he de

descartar ese artículo para Nature).

La cuestión es que, una vez en modo

vomita-datos, es difícil resistirse a

seguirle el juego. Es como una máquina

CIRSA para geeks: metes un sólo dato,

tiras de la palanca y te devuelve

doscientos. Siempre toca, señora.

Claro que puede que te enteres de

cosas que no te gustan, como por

ejemplo, de que tu teléfono móvil ge-

nera 750 veces su peso en CO2 en el

transcurso de su vida útil, lo que sig-

nifica que contribuyes al

aumento del calentamiento

global cada vez que llamas a

casa desde el super para saber

qué marca de champú has de

comprar (y eso que tu señora te

insistió que lo apuntaras antes

de salir). O que para fabricar el

ordenador de 25 kilos que tienes en tu

puesto de trabajo se generaron 63 kilos

de residuos tóxicos, entre los que

encontraríamos cantidades nada des-

preciables de metales pesados como el

cadmio, o productos altamente conta-

minantes como el arsénico. Me gus-

taría creer que, con lo que acabas de

leer, te lo plantearás dos veces antes

de cambiar de equipo sólo porque el

que posees ahora no puede correr lo

último en juegos 3D.

Oli también aplica sus conocimien-

tos al panorama político-económico

donde está inmerso, ya que también

tiene una licenciatura en Ciencias

Políticas, lo que le permite combinar

sus conocimientos científicos sobre el

entorno natural a la macroeconomía y

a las políticas sobre software libre de

las administraciones españolas. Es un

tema que muchos miembros de la

comunidad observan con escepti-

cismo, pero Oli es categórico, levanta

las palmas hacia arriba y sentencia “A

mí me parece muy bien” y pasa a des-

granar el porqué. La financiación de

proyectos de software libre, como los

de las distros a medida, obligan a las

compañías designadas a hacer una

inversión sustancial en personal. La

materia prima (la distro “base”) es

gratuita, por tanto no hay desembolso

a ninguna empresa extranjera para

eso. La inversión en personal fomenta

el empleo. Ya tenemos unos pocos pro-

gramadores menos cobrando el paro.

Las ganancias de las empresas y de los

trabajadores generan ingresos para el

erario público en forma de impuestos

que, a no ser que se viva en Marbella,

suele repercutir positivamente en la

sociedad. Además, una empresa no

trabaja en el vacío, lo que obliga a ter-

ceras empresas a adoptar o a aco-

modar el software libre en sus

infraestructuras, lo que ayuda a su

difusión a nivel corporativo. Nada de

esto ocurre si se compra el software de

siempre directamente a un proveedor

extranjero.

Se habla de “dispersión de esfuer-

zos”, pero en el fondo todo es Linux

¿no? LinEx es Debian, Guadalinex es

Ubuntu y así sucesivamente. Si “vestir

las distros de folclóricas”, como diría

un buen amigo, hace felices a nuestros

gobernantes, déjalos que disfruten,

¡criaturas! Aparte de los beneficios

económicos que repercuten de forma

indirecta en la sociedad, LinEx ha

colocado a Extremadura en el mapa

tecnológico español, el equipo de

desarrollo de Guadalinex ha creado un

instalador gráfico para Ubuntu y

podemos esperar modificaciones y

mejoras en cada nueva distro que

saque cada comunidad autónoma,

ayuntamiento o pedanía ¿qué más

quieres? La diversidad es la vida del

software libre. Una distro para cada

ocasión y una ocasión para cada distro

sería mi lema… si tuviera lema. Sí

señor.

Tengo que comer más menudo con

Oli.

3

EDITORIAL

3Número 17W 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 la revo-lución Linux.Nuestra revista hermana,la publicación alemana Linux Maga-zin, fundada en 1994, fue la primerarevista dedicada a Linux en Europa.Desde aquellas tempranas fechashasta hoy, nuestra red y experienciahan crecido y se han expandido a lapar que la comunidad Linux a lo anchoy largo del mundo. Como lector deLinux Magazine, te unes a una red deinformación dedicada a la distribucióndel conocimiento y experiencia téc-nica. No nos limitamos a informarsobre el movimiento Linux y de Soft-ware Libre, sino que somos parteintegral de él.

OLI

Paul C. Brown

Director

4 Número 17

CONTENIDOS • Linux Magazine nº 17

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

21 RealBasicRealbasic proporciona una sencilla solu-

ción para la conversión de programas en

Visual Basic a Linux.

23 TCL para OpenOfficeOpenOffice viene de serie con su propio

dialecto Basic, un potente lenguaje de

macros. Pero no Basic es del gusto de

todo el mundo. Los que prefieren Tcl

pueden usar este lenguaje para controlar

su Office. Con Tcluno e Itcluno se obtie-

nen informes listos para imprimir y

tablas con datos a partir de cualquier

tipo de fuente.

29 LibrosAnalizamos el título “Classic Shell

Scripting” de la editorial O’Reilly.

30 PortátilesHemos tomado tres ejemplos de la cose-

cha actual de portátiles para comprobar

cuál se comporta mejor bajo Linux.

34 ArchLinuxSi se busca un sistema estable y rápido

sin las capacidades de una GUI, enton-

ces hay que probar Arch Linux.

38 MudbagSi necesitas una base de datos rápida y

sencilla, que sea accesible a través de un

navegador Web, échale un vistazo a

Mudbag.

41 LimpiezaEl tema de las copias de seguridad es

algo común, pero rara vez se oye a

alguien hablando del borrado de datos

seguro.

45 Perl: CalendariosDebido a que las reglas del calendario

están influenciadas por decisiones histó-

ricas y políticas, la manipulación de

fechas está plagada de trampas. El

módulo DateTime de Perl se sabe todos

los trucos.

50 Python para OpenOffice¿Has visto alguna vez a los brokers de

bolsa? ¿Recuerdas sus sofisticados y

caros programas para ver las cotizacio-

nes de las empresas en bolsa en tiempo

real? Nosotros haremos lo mismo con 70

lineas de código Python, OpenOffice y la

tecnología UNO de OpenOffice.

15 ScriptingIncluso los expertos son conscientes de

que siempre queda algo más por apren-

der cuando se trata de scripting. En la

sección de portada de este mes mostra-

remos entre otros temas una infraetruc-

tura de red para Python y algunas

herramientas muy útiles relacionadas.

16 TwistedEl entorno de trabajo Twisted facilita

enormemente la creación de aplicacio-

nes en red para Python. Twisted soporta

los principales protocolos, desde email

hasta chat, y admite encriptación. Os

mostramos cómo configurar un servidor

para páginas Web personales con

Twisted.

19 BashEn los viejos tiempos, las shells tan sólo

eran capaces de realizar llamadas exter-

nas a programas y ejecutar algunos

comandos básicos, los comandos inter-

nos. Sin embargo, con todas las noveda-

des añadidas a la última versión de

Bash, rara vez hará falta el apoyo de los

programas externos.

DESARROLLO

LINUX MAGAZINE

3 Editorial

6 DVD Linux Magazine

8 Inseguridades

10 Noticias

11 Productos

12 Noticias Kernel

14 Correo

94 Eventos

94 Información de Contacto

95 Subscripciones

97 Linux Local

98 Próximo Número

EVALUACIÓN

PRÁCTICOPORTADA

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

79 Educación

Es el momento de preguntarnos si

Squeak es la herramienta que facilitará

un cambio copernicano en la escuela. Y

de intentar responder a una pregunta tan

ambiciosa examinando primero activida-

des creadas con Squeak. .

84 Linea de Comandos: Cat

Herramientas prácticas como cat, less, y

head son ideales para visionar (y modi-

ficar) textos.

86 Juegos: Lugaru

Contrastando con la inmejorable calidad

gráfica que mostramos el mes pasado

con Quake 4, este mes os traemos un

título que precisamente no destaca por

sus gráficos. Pero de vez en cuando con-

viene recordar que el aspecto visual no

lo es todo en un buen juego, y Lugaru

viene dispuesto a demostrarlo.

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.

91 Opinion

Julián Coccia, presidente de Linux

Español, denuncia los abusos que come-

ten ciertas corporaciones con la comuni-

dad del software libre.

COMUNIDAD

MÁS DETALLES EN LA Pág 6

55 Charly: Webalizer ++Webalizer es una herramienta para ana-

lizar los ficheros de registros de los ser-

vidores web. Un nuevo parche le propor-

ciona a los administradores la posibili-

dad de ver lo que no hay.

56 NetFilter L7Si se necesita una herramienta para fil-

trar los protocolos que no dependen de

un puerto, entonces hay que probar L7,

un parche para IPTables que opera

basándose en expresiones regulares.

61 AsteriskSi tu centralita no da para más, sólo

necesitas un ordenador para montar una

nueva centralita IP con servicios avanza-

dos de telefonía.

66 Ktools: Klik

Klik nos trae la instalación cómoda al

escritorio de KDE.

69 Chat con Irssi

El cliente chat de la consola Irssi es

poderoso aun siendo frugal en el uso

de recursos. Su capacidad para correr

scripts hacen que sea en un gigante

entre todas las herramientas de chat.

72 Desktopia: Wmii

Si prefieres gobernar el escritorio desde

el teclado, te aconsejamos que le eches

un vistazo del potente administrador de

ventanas Wmii.

77 Películas PSP

Con Linux se pueden cargar películas en

una consola de juegos Playstation

Portátil (PSP).

� La última versión deMandriva Linux

� Instalación asistida y confi-guración gráfica sencilla

� Centro de control para admi-nistración simplificada

� Kernel 2.6.12

� KDE 3.4.3, Gnome 2.10.2, GCC 4.0.1

� Incluye funcionalidad de DVDLive

LINUX USER

ADMINISTRACIÓN

MANDRIVA ONE

DVD LINUX MAGAZINE

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

puede arrancarse desde el dispositivo

de DVD sin que se vean afectados los

contenidos del disco duro. El DVD de

Mandriva One sirve tanto como disco

de instalación como DVD live. Esta

última opción, como DVD live, permite

probar Mandriva One en el ordenador

antes de decidir sobre su instalación

permanente.

Contenido

Mandriva One viene con kernel 2.6.12 y

X.org 6.9.0. Puede elegirse entre el

escritorio KDE 3.4.3 o Gnome 2.10.2.

Incluída en este DVD se encuentra

una importante colección de las mejores

aplicaciones de código abierto. Además

de Open Office y Gimp, encontrarás

algunas de las favoritas como Firefox

1.0.6, KOffice 1.4.2, Kontact 3.4.2 y

Evolution 2.2.3. También incluye

AmaroK 1.3.1, K3b 0.12.3 y Kaffeine

0.7, además de herramientas de desa-

rrollo y un surtido de uilidades adminis-

trativas.

Instalación

Mandriva es fácil de instalar para usua-

rios finales. Su instalador sigue siendo

uno de los mejores de la industria.

Soporta unos 50 idiomas y configura

automáticamente un amplio espectro de

hardware. La instalación incluye algu-

nas opciones de configuración avan-

zadas y un modo rescate para salvar el

sistema en caso de fallo.

Desde la fusión de Mandriva y

Conectiva, los ingenieros de la

nueva compañía, reabautizada

con el nombre de Mandriva, han estado

trabajando en una nueva distribución

con lo mejor de ambas distros de tan

buena reputación. La suma posterior de

Lycoris añadió aún más picante a la

mezla, haciendo de Mandriva una de las

distribuciones más versátiles.

Mandriva Linux llega con varias ver-

siones y se encuentra disponible en un

amplio rango de precios y contratos de

servicio. La distribución Mandriva One

incluída en este DVD es una versión

100% código abierto de Mandriva, sin

aplicaciones o drivers propietarios de

código cerrado. Nos sentimos orgullosos

de poder ofrecerte Mandriva One 2006 en

el DVD de Linux Magazine de este mes.

Ahora Live

Mandriva One puede instalarse directa-

mente desde este DVD, pero también

Centro de Control deMandriva

Mandriva Linux 2006 incluye Mandriva

Linux Control Center, una de las mejores

y más poderosas herramientas de confi-

guración de todo Linux. Este Centro de

Control es el lugar central para la confi-

guración del sistema Linux. Desde una

única interfaz de usuario se puede

administrar software, configurar disposi-

tivos de hardware, establecer conexiones

a redes, configurar servicios, añadir o

eliminar usuarios, administrar puntos de

montaje, configurar cortafuegos de pro-

tección personales y establecer opciones

de arranque del sistema.

Entre las ventanas del Centro de Con-

trol encontrarás docenas de herramientas

basadas en GUI simples e intuitivas para

administrar tu sistema. Muchas de esas

herramientas vienen con asistentes que

te ayudarán en la configuración.

Pruébalo Ahora

El DVD Mandriva One de Linux Maga-

zine arranca fácilmente desde el lector

del DVD. La nueva opción de DVD live

permite probar la distro de Mandriva sin

tener que cambiar la configuración

actual. Ahora tienes la oportunidad de

explorar esta estimable y altamente con-

siderada distribución Linux con su larga

historia y con su nuevo y brillante futuro.

¡Prueba el DVD Mandriva One de Linux

Magazine hoy mismo! �

Figura 1: Mandriva viene con una simple pero efectiva interfaz de

usuario. Figura 2: Instalando la distribución live de Mandriva One.

Procesador Pentium o mejor

Memoria 128 MB mínimo; recomen-

dado 256 MB

Disco Duro Partición de 12 GB para la

instalación completa del DVD

Otros: Lector de DVD autoarrancable

(ver la Lista de Compatibilidad Hard-

ware de Mandriva [3] para información

adicional o hardware compatible.

Requerimientos del Sistema

DVD LINUX MAGAZINE

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

[1] Mandriva: http://www.mandriva.com

[2] Club Mandriva: http://club.mandriva.

com

[3] Base de Datos Hardware de Mandriva:

http://wwwnew.mandriva.com/

hardware

RECURSOS

DESTACADOS

Kernel Linux 2.6.12

X.og 6.9.0

KDE 3.4.3

Gnome 2.10.2

GCC 4.0.1

glibc 2.3.5

Gimp 2.2.8

OpenOffice 1.1.5

KOffice 1.4.2

Abiword 2.4.1

Evolution 2.2.3

Kontact 3.4.2

Fiefox 1.0.6

AmaroK 1.3.1

K3b 0.12.3

Kaffeine 0.7

Perl 5.8.7

KDevelop 3.2.2

Python 2.4.1

Rosegarden 4.1

Scribus 1.3.0

Evince 0.4.0

Figura 3: El Centro de Control de Mandriva facilita la administración

del sistema.

Figura 4: En el Club Mandriva encontrarás atualizaciones y apoyo

técnico.

AYUDA Y SOPORTE

Mandriva ofrece algunas fuentes de ayuda y soporte. Comienza con los sitios

web listados en el cuadro titulado “Recursos Adicionales”. Otras fuentes de

ayuda incluyen los foros de Mandriva: http://club.mandriva.com/xwiki/bin/

Forum/ y su documentación oficial: http://club.mandriva.com/xwiki/bin/KB/

OfficialDocumentation. Mandriva One es un producto 100% código abierto que

no incluye drivers propietarios.

¿DVD DEFECTUOSO?Si tu DVD está defectuoso será reemplazado

por uno nuevo. Por favor envía un email a

[email protected]

INSEGURIDADES

Schlagwort sollte hier stehenLINUX USERINSEGURIDADES

� ClamAVClamAV es un escáner de virus bajo

licencia GPL.

Zero Day Initiative (ZDI) informó de

una serie de fallos de vulnerabilidad. La

vulnerabilidad se debe a una compro-

bación de incorecta del límite de los

datos suministrados por el usuario al

copiarlos a un búfer de memoria de

tamaño insuficiente. Esta vulnerabili-

dad ocurre cuando la aplicación intenta

manipular ficheros UPX comprimidos.

Por ejemplo, enviando un fichero

maliciosamente manipulado a un

servidor de correo que integra con

ClamAv, podría ejecutar código su-

ministrado por un atacante remoto con

privilegios escalados.

El Proyecto de Vulnerabilidades y

Exposiciones Comunes (Common Vul-

nerabilities and Exposures o CVE –

http://cve.mitre.org) ha asignado a

este problema el nombre CVE-2006-

0162. �

Referencia Debian: DSA-947-2

Referencia Gentoo: GLSA-200601-07

Referencia Mandriva: MDKSA-2006:016

Referencia Suse: SUSE-SR:2006:001

�TeTeXTeTeX es una implementación de TeX.

TeX es una utilidad que toma un

fichero de texto y un juego de coman-

dos de formateo como entradas, y crea

como salida un fichero de documento

tipográfico independiente .dvi (DeVice

Independent).

Se han descubierto algunos errores

en la librería de procesamiento PDF de

TeteX. Un atacante conocedor de estos

fallos podría crear un fichero PDF

cuidadosamente manipulado que

podría hacer que TeTeX ejecutara

código arbitrario o que el sistema se

colgara cuando el fichero se abriera.

El Proyecto de Vulnerabilidades y

Exposiciones Comunes (Common Vul-

nerabilities and Exposures o CVE –

http://cve.mitre.org) ha asignado a

estos problemas los nombres CVE-

2005-3191, CVE-2005-3192, CVE-2005-

3193, CVE-2005-3624, CVE-2005-3625,

CVE-2005-3626, CVE-2005-3627 y

CVE-2005-3628. �

Referencia Debian: DSA-937-1

Referencia Mandriva: MDKSA-2006:011

Referencia Red Hat: RHSA-2006:0160-14

� kdelibskdelibbs contiene librerías para el K

Desktop Environment (KDE).

Se descubrió un error de pila que

afectaba a kjs, un motor de intérprete

usado por Konqueror y otras partes de

KDE. Un atacante remoto podría crear

una web maliciosa conteniendo código

JavaScript que podría provocar este

fallo y posiblemente dar lugar a que se

ejecutara código arbitrario. El

Proyecto de Vulnerabilidades y Exposi-

ciones Comunes (Common Vulnerabil-

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

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

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

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

enlaces a los parches. Los avisos también

incluyen una referencia a la lista de

correo.

Gentoo Info:http://www.gentoo.org/security/en/index.xml Los avisos de seguridad actuales para

Foro:http://forums.gentoo.org/ la lista Gentoo en el sitio web de

Lista:http://www.gentoo.org/main/en/lists.xml seguridad de Gentoo enlazan desde la

Referencia:GLSA:… 1) página principal. Los avisos se presentan

en HTML con códigos para fusionar las

versiones corregidas.

Mandrake Info:http://www.mandrakesecure.net Mandrakesoft posee su propios sitio web

Lista:http://www.mandrakesecure.net/en/mlist.php que versa sobre temas relacionados con

Referencia:MDKSA:… 1) la seguridad.Entre otras cosas,incluye

avisos seguridad y referencias a las

listas de correo.Los avisos son páginas

HTML,pero no contienen enlaces a los

parches.

Red Hat Info:http://www.redhat.com/errata/ Red Hat archiva los fallos de seguridad

Lista:http://www.redhat.com/mailman/listinfo/ bajo lo que denominan erratas.A

Referencia:RHSA-… 1) continuación los problemas para cada

versión de Red Hat se agrupan.Los avisos

de seguridad se proveen como una

página HTML con enlaces a los parches.

Slackware Info:http://www.slackware.com/security La página de inicio contiene enlaces al

Lista:http://www.slackware.com/lists/(slackware-security) archivo de seguridad de la lista de correo.

Referencia: [slackware-security]… 1) No existe información adicional sobre

seguridad en Slackware.

Suse Info:http://www.suse.de/en/private/support/ Ya no existe un enlace a la página de

security/index.html seguridad tras un remodelado en el sitio

Parches:http://www.suse.de/en/private/ web de SuSE.Existe información en la

download/updates Lista:suse-security-announce lista de correos y los avisos. Los parches de

Referencia:SUSE-SA… 1) seguridad para versiones individuales de

SuSE Linux se muestran de color rojo en el

sitio de actualizaciones generales.

Contiene una corta descripción de la

vulnerabilidad que soluciona el parche.1) Todos los distribuidores muestran correos de seguridad en el campo Subject.

POLITICAS DE SEGURIDAD DE LAS DISTRIBUCIONES MAYORITARIAS

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

INSEGURIDADES

predeterminado sshd_config ahora

solamente acepta conexiones al proto-

colo 2, mientras que UsePAM se

encuentra por defecto deshabilitado.

Sobre sistemas que usan métodos de

autenticación alternos (por ejemplo,

LDAP) que hacen uso de la pila PAM

para la autenticación, será necesario

habilitar UsePAM. A destacar que el

fichero predeterminado

/etc/pam.d/sshd file también ha sido

modificado para usar el módulo

pam_listfile.so, el cual denegará el

acceso a cualquier usuario listado en

/etc/ssh/denyusers (por defecto, éste

es el superusuario solamente). Esto es

requerido para preservar el compor-

tamiento esperado y habitual cuando

se usa “PermitRootLogin without-pass-

word”; por otra parte, sería posible

obtener el login de la línea de

comando y el login sin tener que usar

claves. �

Referencia Mandriva: MDKSA-2006:034

Referencia Suse: SUSE-SR:2006:003

� gdEl paquete gd contiene una librería

gráfica usada para la creación

dinámica de imágenes tales como PNG

y JPEG. gd permite la generación de

imágenes utilizando diversos lenguajes

como PHP, Perl, Python y C/C++. Es

muy utilizado para la generación de

imagenes embebidas en páginas web.

Se encontraron algunos fallos de des-

bordamientos de búfer en el modo en

el que gd asigna la memoria. Un ata-

cante podría crear una imagen cuida-

dosamente manipulada que provocaría

la ejecución de código arbitrario mali-

cioso cuando fuera abierta por la víc-

tima usando un programa vinculado a

la librería gd.

El Proyecto de Vulnerabilidades y

Exposiciones Comunes (Common Vul-

nerabilities and Exposures o CVE –

http://cve.mitre.org) ha asignado a este

problema el nombre CVE-2006-0941. �

Referencia Red Hat: RHSA-2006:0194-4

Referencia Suse: SUSE-SR:2006:003

mitre.org) ha asignado a este problema

el nombre CVE-2006-0019. �

Referencia Debian: DSA-948-1

Referencia Red Hat: RHSA-2006:0184-11

Referencia Suse: SUSE-SA:2006:003

� OpenSSHSe descubrió un error en la imple-

mentación de la copia local-a-local scp

donde los ficheros que contienen los

metacaracteres de la shell o los espa-

cios, se expanden dos veces, lo cual

podría hacer que se ejecutaran coman-

dos arbitrarios si un usuario local es

inducido hasta utilizar scp con un

nombre de fichero especialmente

manipulado.

Las actualizaciones suministradas

suponen un avance con respecto a la

última versión de OpenSSH editada, la

4.3p1. Existen un importante número

de diferencias entre ellas, en primer

lugar trata con autenticación PAM

respecto a la versión incluida en Cor-

porate 3.0 y MNF2. En particular, el

GOOGLE Y MICROSOFT ENLA PICOTA (OTRA VEZ)Nota a Google: cambiar lema a “Don’t

infringe on other people’s trademarks”, y

aplicarlo en todos los países incluso en

España, por muy del tercer mundo que se

nos considere.

Por si no ha quedado claro, la palabra

Linux no es una palabra como “silla”,

“mesa” u “ornitorrinco”, sino que es una

marca registrada que pertenece a Linus

Torvalds y que administra el Linux Mark

Institute (ver enlace al pie de esta noticia),

un organismo sin ánimo de lucro que vigi-

la que no se abuse del término sin sufrir

las consecuencias, que hay mucho listo

suelto… Como los de Google España, que

no han tenido mejor idea que “vender” el

vocablo Linux a nada menos que a

Microsoft, como plataforma de su cam-

paña “Conozca los hechos”.

Si uno, a día de hoy (3 de abril del

2006), introduce la palabra “linux” en el

buscador Google.es, lo primero que

aparece es un enlace al sitio de Microsoft.

Esto representa una clara violación de la

marca de Torvalds. Y así lo ha denunciado

Jose María Lancho, abogado y coordinador

de la Asociación

Legalventures. En pa-

labras de la denuncia

presentada ante La

Comisión del Mercado

de Telecomunicaciones,

Secretaria de Estado de

Telecomunicaciones,

Jurado de la Publicidad

y Ministerio de

Industria, Google es culpable de que…

En ningún caso aparezca la palabra pu-blicidad [sino] patrocinio [creando] unaconfusión para el usuario y consumidormedio que no advierte hasta mucho mástarde que se trata de publicidad. Asimismo,ningún titular legítimo de derechos sobre lamarca LINUX ha contratado o autorizado aGOOGLE semejante campaña publicitaria.

Para más adelante señalar que…

La empresa GOOGLE INC ha sido ya con-denada en varios países europeos por […]:

1) violación de la propiedad industrial(marcas) e intelectual

2) publicidad irregular3) Inducción a error a los consumidores

sobre la identidad del prestador de servicios

En cuanto a Microsoft y su Conozca losHechos, según la denuncia, la campaña

no es que raye la ilegalidad, sino que se

planta de llena en ella ya que:

[se] considera desleal la publicidadcomparativa, “cuando no se apoye encaracterísticas esenciales, afines yobjetivamente demostrables de losproductos o servicios, o cuando se con-trapongan bienes o servicios con otrosno similares o desconocidos, o de limi-tada participación en el mercado” y

que…

La publicidad comparativa exige:1.- Identificar que la publicidad es publi-

cidad, lo que no ocurre en la página deMICROSOFT IBÉRICA, S.L.

2.- Que la publicidad no sea engañosa.En el presente asunto concurre asimismoque el caso estrella de la publicidad com-parativa de MICROSOFT es el de la denomi-nada migración de la empresa TOMMYHILFIGER que sustituyó el sistema Red HatLinux por Windows Server y “mientrasadquiría nuevas actitudes de negocios yahorraba entre un 25 y un 30 por ciento desus costes de IT”.

Pues bien, esto es incierto y se narra deuna forma completamente engañosa.

A continuación, la denuncia describe

con todo lujo de detalles, y gracias a la

labor de peritaje de Julián Coccia, presi-

dente de Linux Español y colaborador

habitual de Linux Magazine, cómo en real-

idad las tiendas online del señor Hilfiger

están servidas desde máquinas Linux que

corren OpenCMS sobre Apache. En una

entrevista telefónica entre Lancho y Linux

Magazine, el abogado señaló que “a pesar

del desconocimiento que impera sobre la

red en el ámbito de los juristas, a ésta

deben aplicarse las mismas reglas que a los

otros medios en lo que se refiere a publici-

dad. No es de recibo el abuso que hacen

ciertas corporaciones de ella.”

Aaaaamén

Linux Mark Institute: http://www.linuxmark.org/

Conozca los (des)hechos: http://www.microsoft.com/spain/servidores/hechos/default.mspx

NOTICIAS

Schlagwort sollte hier stehenLINUX USERNOTICIAS

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

LINUX INDOLORO(E INODORO)Según la rumo-red dedicada a estas cosas,

la Junta de Andalucía pondrá en marcha

en breve un proyecto que, por usar la jerga

política, acercará aún más el uso de las

tecnologías libres a los hogares

andaluces… Bueno, de hecho a cualquier

hogar que cuente con un mínimo de

ancho de banda.

Siguiendo la premisa de que el

ordenador es la red (o viceversa), lo que

se pretende es equipar a todo el mundo,

indiferentemente de la plataforma,

prestaciones de la máquina o del software

instalado nativamente, de una serie de

aplicaciones, tanto ofimáticas como

corporativas, para su explotación remota.

Me explico: a través de un cliente NX,

los usuarios podrán acceder a servidores

(implementados sobre Guadalinex, of

course) de aplicaciones dispuestos a tal

fin. ¿Que no tienes un procesador de

textos? No problema. Accedes al cluster de

la Junta, se te abre tu escritorio

(GuadaLinex) remoto y a teclear. ¿Que

necesitas una solución ERP para tu

negocio? Pues lo mismo y a pasar facturas.

Lo que no tenemos claro es cómo se

resuelve el problema de los ficheros

generados. Si NX los guarda en el

sistema remoto ¿cómo accederá el

usuario a ellos para imprimirlos,

grabarlos en su pendrive, etcétera? Y

el otro asunto, es que queda por ver si

este tipo de acciones realmente

ayudan a la difusión del software libre

o más bien la obstaculizan al no

obligar a los usuarios a migrar de

plataforma.

En todo caso como servicio al

ciudadano no está nada mal. Se nos

ocurren muchas otras maneras más

tontas de gastar el dinero del

contribuyente.

PRODUCTOS

… Y MÁS DE LO PARECIDOMichael Robertson, el hombre tras

Linspire, Gizmo, el concurso para

portar Linux a la Xbox y mil y otros

inventos más (inventos que, en

muchos casos, son más humo que

prácticos), se ha decantado por lo

último que limpia, fija y da esplendor

a la web. Correcto: Ajax.

Robertson es famoso, entre otras

cosas, por ser un recalcitrante dolor en

el culo para ciertas empresas con

aspiraciones monopolistas, pero

también por arriesgarse a implementar

ideas alocadas, a menudo a medio

cocer, pero con un gran impacto

mediático. Y su entrada a la web 2.0

no ha sido diferente: Robertson

promete, con su nuevo proyecto,

ajaxLaunch.com, poner en línea una

nueva aplicación a la semana, hasta

completar una suite ofimática

completa que no necesitará ningún

tipo de instalación, será

multiplataforma y ofrecerá una

interfaz similar a las de las

aplicaciones con las que ya estamos

familiarizados.

En el momento de escribir la

presente reseña, ha puesto a

disposición de los internautas

ajaxWrite, un procesador de textos al

estilo Write de OpenOffice, y

ajaxSketch, un programa de diseño

vectorial al estilo de Inkscape. Según

Robertson, ajaxWrite puede abrir y

guardar documentos en varios

formatos, incluyendo los de Microsoft

Office, mientras que ajaxSketch

implementa las funcionalidades

esenciales de un programa de diseño…

Bueno, más o menos: según nuestras

pruebas, los documentos guardados

desde y cargados en ajaxWrite,

contenían errores de formato. También

las prestaciones de ajaxSketch son

tirando a muy limitadas.

Sin embargo, como muchas de las

cosas que

emprende el CEO

de Linspire, los

resultados son

cuando menos

sorprendentes y

pueden verse

como otro paso

más en el camino

hacia el ordenador-

es-la-red.

El sitio deAjaxLaunch:http://www.ajaxlaunch.com/

Figura 1: Diseña gráficos vectoriales online con el

programa AjaxSketch.

Figura 2: Utiliza el procesador de textos basado en

web AjaxWrite para crear documentos.

PRODUCTOS

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

GOOGLE Y MICROSOFT ENLA PICOTA (OTRA VEZ)Nota a Google: cambiar lema a “Don’t

infringe on other people’s trademarks”, y

aplicarlo en todos los países incluso en

España, por muy del tercer mundo que se

nos considere.

Por si no ha quedado claro, la palabra

Linux no es una palabra como “silla”,

“mesa” u “ornitorrinco”, sino que es una

marca registrada que pertenece a Linus

Torvalds y que administra el Linux Mark

Institute (ver enlace al pie de esta noticia),

un organismo sin ánimo de lucro que vigi-

la que no se abuse del término sin sufrir

las consecuencias, que hay mucho listo

suelto… Como los de Google España, que

no han tenido mejor idea que “vender” el

vocablo Linux a nada menos que a

Microsoft, como plataforma de su cam-

paña “Conozca los hechos”.

Si uno, a día de hoy (3 de abril del

2006), introduce la palabra “linux” en el

buscador Google.es, lo primero que

aparece es un enlace al sitio de Microsoft.

Esto representa una clara violación de la

marca de Torvalds. Y así lo ha denunciado

Jose María Lancho, abogado y coordinador

de la Asociación

Legalventures. En pa-

labras de la denuncia

presentada ante La

Comisión del Mercado

de Telecomunicaciones,

Secretaria de Estado de

Telecomunicaciones,

Jurado de la Publicidad

y Ministerio de

Industria, Google es culpable de que…

En ningún caso aparezca la palabra pu-blicidad [sino] patrocinio [creando] unaconfusión para el usuario y consumidormedio que no advierte hasta mucho mástarde que se trata de publicidad. Asimismo,ningún titular legítimo de derechos sobre lamarca LINUX ha contratado o autorizado aGOOGLE semejante campaña publicitaria.

Para más adelante señalar que…

La empresa GOOGLE INC ha sido ya con-denada en varios países europeos por […]:

1) violación de la propiedad industrial(marcas) e intelectual

2) publicidad irregular3) Inducción a error a los consumidores

sobre la identidad del prestador de servicios

En cuanto a Microsoft y su Conozca losHechos, según la denuncia, la campaña

no es que raye la ilegalidad, sino que se

planta de llena en ella ya que:

[se] considera desleal la publicidadcomparativa, “cuando no se apoye encaracterísticas esenciales, afines yobjetivamente demostrables de losproductos o servicios, o cuando se con-trapongan bienes o servicios con otrosno similares o desconocidos, o de limi-tada participación en el mercado” y

que…

La publicidad comparativa exige:1.- Identificar que la publicidad es publi-

cidad, lo que no ocurre en la página deMICROSOFT IBÉRICA, S.L.

2.- Que la publicidad no sea engañosa.En el presente asunto concurre asimismoque el caso estrella de la publicidad com-parativa de MICROSOFT es el de la denomi-nada migración de la empresa TOMMYHILFIGER que sustituyó el sistema Red HatLinux por Windows Server y “mientrasadquiría nuevas actitudes de negocios yahorraba entre un 25 y un 30 por ciento desus costes de IT”.

Pues bien, esto es incierto y se narra deuna forma completamente engañosa.

A continuación, la denuncia describe

con todo lujo de detalles, y gracias a la

labor de peritaje de Julián Coccia, presi-

dente de Linux Español y colaborador

habitual de Linux Magazine, cómo en real-

idad las tiendas online del señor Hilfiger

están servidas desde máquinas Linux que

corren OpenCMS sobre Apache. En una

entrevista telefónica entre Lancho y Linux

Magazine, el abogado señaló que “a pesar

del desconocimiento que impera sobre la

red en el ámbito de los juristas, a ésta

deben aplicarse las mismas reglas que a los

otros medios en lo que se refiere a publici-

dad. No es de recibo el abuso que hacen

ciertas corporaciones de ella.”

Aaaaamén

Linux Mark Institute: http://www.linuxmark.org/

Conozca los (des)hechos: http://www.microsoft.com/spain/servidores/hechos/default.mspx

NOTICIAS

Schlagwort sollte hier stehenLINUX USERNOTICIAS

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

LINUX INDOLORO(E INODORO)Según la rumo-red dedicada a estas cosas,

la Junta de Andalucía pondrá en marcha

en breve un proyecto que, por usar la jerga

política, acercará aún más el uso de las

tecnologías libres a los hogares

andaluces… Bueno, de hecho a cualquier

hogar que cuente con un mínimo de

ancho de banda.

Siguiendo la premisa de que el

ordenador es la red (o viceversa), lo que

se pretende es equipar a todo el mundo,

indiferentemente de la plataforma,

prestaciones de la máquina o del software

instalado nativamente, de una serie de

aplicaciones, tanto ofimáticas como

corporativas, para su explotación remota.

Me explico: a través de un cliente NX,

los usuarios podrán acceder a servidores

(implementados sobre Guadalinex, of

course) de aplicaciones dispuestos a tal

fin. ¿Que no tienes un procesador de

textos? No problema. Accedes al cluster de

la Junta, se te abre tu escritorio

(GuadaLinex) remoto y a teclear. ¿Que

necesitas una solución ERP para tu

negocio? Pues lo mismo y a pasar facturas.

Lo que no tenemos claro es cómo se

resuelve el problema de los ficheros

generados. Si NX los guarda en el

sistema remoto ¿cómo accederá el

usuario a ellos para imprimirlos,

grabarlos en su pendrive, etcétera? Y

el otro asunto, es que queda por ver si

este tipo de acciones realmente

ayudan a la difusión del software libre

o más bien la obstaculizan al no

obligar a los usuarios a migrar de

plataforma.

En todo caso como servicio al

ciudadano no está nada mal. Se nos

ocurren muchas otras maneras más

tontas de gastar el dinero del

contribuyente.

PRODUCTOS

PRODUCTOS

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

… Y MÁS DE LO PARECIDOMichael Robertson, el hombre tras

Linspire, Gizmo, el concurso para

portar Linux a la Xbox y mil y otros

inventos más (inventos que, en

muchos casos, son más humo que

prácticos), se ha decantado por lo

último que limpia, fija y da esplendor

a la web. Correcto: Ajax.

Robertson es famoso, entre otras

cosas, por ser un recalcitrante dolor en

el culo para ciertas empresas con

aspiraciones monopolistas, pero

también por arriesgarse a implementar

ideas alocadas, a menudo a medio

cocer, pero con un gran impacto

mediático. Y su entrada a la web 2.0

no ha sido diferente: Robertson

promete, con su nuevo proyecto,

ajaxLaunch.com, poner en línea una

nueva aplicación a la semana, hasta

completar una suite ofimática

completa que no necesitará ningún

tipo de instalación, será

multiplataforma y ofrecerá una

interfaz similar a las de las

aplicaciones con las que ya estamos

familiarizados.

En el momento de escribir la

presente reseña, ha puesto a

disposición de los internautas

ajaxWrite, un procesador de textos al

estilo Write de OpenOffice, y

ajaxSketch, un programa de diseño

vectorial al estilo de Inkscape. Según

Robertson, ajaxWrite puede abrir y

guardar documentos en varios

formatos, incluyendo los de Microsoft

Office, mientras que ajaxSketch

implementa las funcionalidades

esenciales de un programa de diseño…

Bueno, más o menos: según nuestras

pruebas, los documentos guardados

desde y cargados en ajaxWrite,

contenían errores de formato. También

las prestaciones de ajaxSketch son

tirando a muy limitadas.

Sin embargo, como muchas de las

cosas que

emprende el CEO

de Linspire, los

resultados son

cuando menos

sorprendentes y

pueden verse

como otro paso

más en el camino

hacia el ordenador-

es-la-red.

El sitio deAjaxLaunch:http://www.ajaxlaunch.com/

Figura 1: Diseña gráficos vectoriales online con el

programa AjaxSketch.

Figura 2: Utiliza el procesador de textos basado en

web AjaxWrite para crear documentos.

ESTADO DE LAELIMINACIÓN DE OSSDesde hace algún tiempo, Adrian Bunk

ha estado ocupado en la eliminación del

driver obsoleto OSS . Uno a uno, va

cazando esos drivers, trabaja en la

mejora de sus equivalentes ALSA, reúne

información y elimina cada driver OSS

procurando que no afecte negativamente

al resto del sistema.

Hace poco emitió otra petición de

ayuda. Los tres casos que desea

identificar son, en primer lugar, drivers

ALSA plenamente funcionales para el

mismo hardware que dispone de drivers

OSS, en segundo lugar, drivers ALSA

rotos o problemáticos para hardware que

dispone de drivers OSS, y por último,

drivers OSS que no disponen de

equivalentes ALSA.

Para los drivers de la primera

categoría, planea un programa agresivo

de eliminación de equivalentes OSS. Para

drivers de la segunda categoría, plantea

un marco temporal en el cual se

informarán de errores en los drivers

ALSA. Todos los drivers OSS sin

equivalentes ALSA se mantendrán en el

kernel.

Cada una de estas peticiones de

llamada ha tenido como resultado

progresos significativos. Existen

aproximadamente 50 drivers que todavía

han de ser eliminados, arreglados o

portados a ALSA por alguien.

CONFUSIÓN DELICENCIAS EN CÓDIGOANTIGUOGreg Kroah-Hatman ha descubierto un

cierto número de ficheros que han estado

en el kernel durante años (o al menos

desde antes de la utilización de BitKeeper)

y que portan destacados avisos de

restricciones de copyright que dicen cosas

como: “este es código fuente propietario y

sin publicar de Motorola”.

Resulta que el código posee una licencia

correcta tipo GPL, tal y como reza un

LEEME en el mismo directorio. Pero Greg y

otros piensan que el lenguaje utilizado en

los ficheros fuente podría resultar confuso

para todo aquel que no supiera la verdad

del asunto.

El verdadero dueño del código resulta ser

Freescale, un spin-off de Motorola desde

julio del 2004. Matt Waddel de Freescale, se

ha ofrecido a modificar los avisos de

copyright para que resulten menos

confusos. Pero tal y como ha indicado Alan

Cox, nunca ha existido un problema con

los avisos de copyright, por tanto las

modificaciones de Matt serán simplemente

para tranquilizar a los desarrolladores. No

cambia el significado legal de los avisos.

CONFIGURACIÓN SATARandy Dunlap ha remitido recientemente

un parche para mover la configuración

SATA desde la zona SCSI a su propia

sección. La razón para esto es que los

usuarios no necesitan saber de esta

configuración SCSI para poder utilizar

SATA.

Aunque esta idea no sea completamente

obvia, la reacción de los desarrolladores del

kernel ha sido en general muy positiva, con

contribuciones de gente que han

presentado varias sugerencias para el

parche.

Pero ha sido el mismo Randy quien ha

echado el freno a futuros desarrollos del

parche de configuración SATA propuesto,

alegando que lo que más le interesaba era

saber la opinión de otros miembros sobre la

propuesta, no que se aceptara el parche en

el kernel.

A pesar de ello, parece que la idea en sí

es bastante sólida y con el soporte de otros

desarrolladores, es casi inevitable que un

parche como éste acabe formando parte del

kernel de Linux.

ESTADO DE LA INCLUSIÓNDE REISER 4La actitud de muchos desarrolladores

hacia la inclusión de Reiser 4 en el kernel

parece ser la de una estudiada

indiferencia. Según muchos de ellos, los

desarrolladores de Reiser simplemente

han de “someterlo a un estado en que se

posibilite su inclusión”, lo que sugiere

que la comunicación entre los

desarrolladores del kernel, por un lado, y

de Reiser, por el otro, se ha derrumbado.

Según los desarrolladores del kernel,

se ha explicado de manera

suficientemente detallada lo que la gente

de Reiser ha de hacer y lo único que

queda es que vayan y lo hagan. Cosa que

todavía no ha ocurrido.

Habitualmente, cuando alguien de la

lista escribe un mensaje preguntando

por el estado de una característica del

kernel, cualquiera con los conocimientos

suficientes da una estimación del estado

de esa característica. Con ReiserFS, no

sólo la gente de Reiser no parece

dispuesta a adelantar una estimación,

sino que la gente del kernel sólo llega a

especular de manera vaga.

NOTICIAS DESDE ELKERNEL

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.

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

Las peticiones para más información se

refieren a los archivos históricos de la lista,

lo que sugiere que el progreso se encuentra

en un punto muerto, o al menos así es

como lo perciben los desarrolladores del

kernel.

Parece que, al menos de momento, las

dos partes han caído en un diálogo de

sordos. Si el desarrollo del kernel sigue

como hasta ahora, algún día la gente de

Reiser remitirá más parches, y estos

parches serán evaluados por quien esté

dispuesto a evaluarlos o serán ignorados si

los problemas descritos con anterioridad no

se resuelven.

ESTADO DEL RAW DRIVERAdrian Bunk ha hecho un esfuerzo por

eliminar el driver Raw del árbol 2.6 del

kernel. Este driver se marcó como

obsoleto y se erigió en candidato para ser

eliminado desde la versión 2.6.3, pero

puede que sea más difícil de quitar de lo

que se pensó en un principio.

El driver Raw permite que se ejecuten

entradas y salidas en bruto sobre

dispositivos de bloques. Pasando

O_DIRECT a la llamada del sistema

open() realiza una función similar ,

constituyéndose en la técnica

recomendada, por lo que se tomó la

decisión de hacer obsoleto y eliminar el

driver en diversos pasos a lo largo del

tiempo. Sin embargo, muchos

proveedores de software siguen sin haber

convertido su código a O_DIRECT y, hasta

que lo hagan, habrá una activa resistencia

a la eliminación del driver.

Tal y como dijo Alan Cox: “el convertir

en obsoleto cosas que son internas de la

configuración de la distribución es un

tema, pero las cosas relacionadas con

llamadas al núcleo del sistema son otra

historia”.

A pesar de las razones para no eliminar

el driver, la confusión que provoca este

problema es un gran inconveniente para

Adrian, quien se encarga de limpiar el

kernel de forma habitual, y que ahora se

encuentra con que parte de su trabajo ha

sido en vano.

Estas cosas suceden. Puede que el

driver Raw no pueda ser nunca

eliminado. A menudo ocurre que una

decisión sobre tal o cual característica del

kernel se toma de manera precipitada, de

modo que cuando los desarrolladores se

dan cuenta ya es demasiado tarde, a pesar

de que el mundo de los usuarios dependa

de ella.

En el peor de los casos, si se hace un

intento por rescindir una mala decisión, y

ese intento falla, ambos estados se han de

mantener durante mucho tiempo. En otros

caso no tan desafortunados, el marcar algo

como “obsoleto” ha sido suficiente para

que la mayor parte del mundo de los

usuarios hayan convertido su código al

mejor de ambos sistemas.

Puede que la conversión a O_DIRECT

tenga éxito y Adrian pueda eliminar el

driver.

DRIVER DEL FRAMBUFFERMichael Hanselmann ha remitido un

parche para eliminar un driver para el

framebuffer ATI Radeon, que ya había sido

sustituido por uno más moderno. El driver

eliminado se había marcado como

“obsoleto” y no había recibido

actualizaciones de importancia desde el

2002.

La reacción entre los desarrolladores del

kernel más importantes ha sido totalmente

positiva, a pesar de que el nuevo driver

todavía presenta algunos problemas. Tal y

como ha señalado David Miller, la rutina de

blanqueado de la pantalla puede confundir

al sistema X Windows, haciendo que sea

más difícil recuperar la pantalla.

NOTICIAS DEL KERNEL

jugarte el tuyo) en cada sucursal de la

empresa, puede que sea factible tu plan de

instalar Debian. Si no es así, olvídalo.

Escoge una distro con soporte técnico

telefónico y/o presencial para cuando las

cosas vayan mal. Tendrás que elegir una

empresa que cobrará una licencia por sus

servicios, pero el precio no debería ser un

factor tremendamente determinante si la

solución es claramente superior ¿verdad?

Además, tu posición en la empresa no co-

rrerá riesgos.

Elige bien tu caballo de batalla

No entres con el argumento “Linux es

mejor”. Eso sólo funciona en los anuncios

de detergentes… bueno, de hecho incluso

esos anuncios esgrimen argumentos más

sólidos. Examina la infraestructura actual y

escoge un punto donde Linux puede ofre-

cer un mejor servicio tangible y que la

mejora sea tan clara, que no migrar sería

una irresponsabilidad.

Imaginemos que tienemos un servicio

colaborativo en red que funciona sobre un

servidor con un sistema operativo propie-

tario que inhibe la productividad por que

hay que reiniciarlo dos o tres veces por

semana. Los clientes sólo pueden visua-

lizar las páginas con Explorer, lo que

supone un problema de seguridad, y que

sólo admite conexiones con un tipo de base

de datos (también propietario). Si tu

puedes demostrar que puedes habilitar un

sistema similar (Plone, por ejemplo) que

permita el acceso desde cualquier platafor-

ma (Windows, Linux y Mac), con

cualquier navegador, con un uptime supe-

rior y que tiene una mejor integración con

una mayor variedad de bases de datos

(incluyendo el que utiliza tu empresa en

ese momento), tienes buenas posibilidades

de que te digan que adelante.

Si dices: “Cambiemos todo a Linux”, lo

normal es que salgas con un palmo de

narices.

Olvídate del factor “libre” en el soft-

ware libre

No menciones “libertad” y “filosofía”. Tu

empresa, de la única “libertad” que

entiende es de la libertad de hacer dinero y

la única “filosofía” que aplica es la de los

beneficios. Es duro decirlo, pero si men-

cionas la palabra “libre”, los problemas

están garantizados. Habla de la funcionali-

dad de Linux, habla de aplicaciones, pero

olvídate de “libre”. Ni siquiera las grandes

empresas supuestamente abanderadas del

software libre le dan importancia a la liber-

tad del código a no ser que estén ante un

auditorio de 1000 geeks de la comunidad.

A tus jefes ni siquiera les interesará saber

nada del “código abierto”. Si no se es une

empresa de desarrollo, no tiene ningún

sentido disponer del código fuente, y si

mencionas que todo el mundo le puede

meter mano al código, inmediatamente se

imaginarán programas repletos de virus,

troyanos y puertas traseras. Ninguna expli-

cación sobre auditorías y controles de ver-

siones ayudarán a disipar esa imagen.

No vendas la idea de que Linux es

gratis

Más que nada por que no lo es. Puede

que no se cobre una licencia (y eso

depende de la distribución, ver punto si-

guiente), pero la inversión que se ha de

hacer en tiempo y formación no es despre-

ciable. Nadie puede cambiarle un sistema

operativo a una máquina instantáneamente

y el tiempo que se utiliza en la instalación,

configuración y ajustes es tiempo que se ha

de pagar. Por tanto, de gratis, nada.

¿Que se ahorrarán una pasta en licen-

cias? probablemente, pero tu jefe tendrá

que hacer una inversión inicial por otro

lado. Haz tus cuentas para medio y largo

plazo y, si te salen, tendrás un fuerte argu-

mento a tu favor.

Escoge una distro con soporte

Dices que la empresa tiene varias sucur-

sales repartidas por la región. Pues bien, si

dispones de un departamento de soporte

informático con al menos un administrador

de sistemas ducho en Linux y dispuesto a

jugarse su puesto (y tú estás dispuesto a

Correo del Lector

ACCESO DE ESCRITURA

Schlagwort sollte hier stehenLINUX USERCORREO

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

Migrar no es tan fácilEstimados amigos de Linux Magazine,

Trabajo en el departamento de informáti-

ca de un empresa dedicada a la adminis-

tración de fincas. tenemos sucursales por

toda la región y la infraestructura TI está

basada íntegramente en sistemas

Windows.

Estaba pensando en hablar con mi jefe

para intentar convencerle de migrar nues-

tros sistemas a Linux. Yo quisiera que la

migración se aplicara tanto a nivel de servi-

dor como de escritorio. Para los servidores

voy a proponer Debian y para los clientes

Suse o Mandriva.

Pero creo que voy a encontrar bastante

resistencia a mi propuesta y quisiera saber

si tenéis algún consejo para enfocarlo de

manera que aprueben mi idea.

Un saludo

Jose Antonio

Estimado Antonio,

Todo depende de quién sea tu “jefe”. Si

por tu jefe te refieres al responsable del

departamento TI, puede que sea más fácil,

por que podrás explicarle ventajas técnicas

que tal vez la administración de la empresa

no alcance a entender. Tu jefe, puede llegar

a convertirse en tu aliado y podrá traducir

tus argumentos a términos digeribles para

los responsables de la administración.

Si por tu jefe, te refieres al JEFE, pues lo

tienes más difícil, puesto que probable-

mente no tenga ninguna preparación técni-

ca y tendrás que vertebrar tus argumentos

en función del ahorro y la productividad. Si

no puedes reducir tu propuesta a estos dos

puntos, ningún responsable te dará luz

verde.

Independientemente de con quién tengas

que hablar, a continuación te damos unas

cuantos consejos para cuando presentes tu

plan:

LM

Puedes enviar tus comentariosy sugerencias a:

[email protected]

www.alm

ogon.de

samiento de texto omnipresente en los

sistemas Unix/Linux.

En portada este mes tratamos de

nuevas herramientas, trucos nuevos

para viejas herramientas, extensiones

para herramientas familiares y otras téc-

nicas que resaltan la superioridad y fle-

xibilidad de Linux sobre otros sistemas.

Se aconseja su lectura, y probablemente

se descubrirá algo

necesario para el

arsenal de secretos

de scripting que

todo programador y

administrador nece-

sita. �

Nuevas herramientas y técnicas para guiones Linux

SECRETOS DESCRIPTING

Nuevas herramientas y técnicas para guiones Linux

SECRETOS DESCRIPTING

Secretos de Scripting • PORTADA

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

La escritura de guiones siempre ha

sido fácil en Linux. El diseño del

sistema fomenta la automati-

zación y existen docenas de herramien-

tas de scripting disponibles de manera

gratuita gracias a la siempre inventiva

comunidad de Código Abierto.

El arte del scripting es casi tan antiguo

como el arte de trastear con los orde-

nadores. La mayoría de los usuarios

Linux están más o menos familiarizados

con las técnicas de escritura de guiones.

Entonces, ¿por qué insisitimos en hablar

de ello? Pues por la sencilla razón de que

este viejo arte está sufriendo cambios, e

incluso los expertos saben que han de

mantenerse al día. En el número de este

mes nos centraremos en herramientas

Linux para scripting.

En las páginas que siguen, echaremos

una ojeada a Twisted, una infraestruc-

tura para la creación de aplicaciones de

red en Python. Twisted resuelve los

archiconocidos problemas de direc-

cionamiento de redes, permitiéndonos

concentrarnos en los detalles críticos. La

infraestructura de Twisted dispone de

módulos para protocolos SSH, SFTP,

HTTP y NNTP, así como para POP3,

IMAP y otros.

También se hablará sobre Realbasic,

un entorno de desarrollo visual que nos

ayuda a correr aplicaciones Visual Basic

en Linux. Mostraremos las característi-

cas de Visual Basic que funcionan en

Linux y contaremos los sitios donde aún

queda trabajo por hacer para conseguir

la compatibilidad total.

Seguiremos nuestro estudio sobre

scripting con un repaso a las técnicas de

mejora en Bash que ayudarán a con-

seguir que nuestros scripts corran más

rápidamente.

Seguidamente veremos cómo uti-

lizar Tcl para la generación pro-

gramática de hojas de cálculo y dia-

gramas en OpenOffice, algo que sin

duda será de gran utilidad a los que

necesiten crear grandes volumenes de

documentos con distintas

colecciones de datos de

manera habitual.

Finalizaremos nuestro

repaso a las técnicas de

scripting con una incursión

en un clásico del género:

awk, el lenguaje de proce-

15

Incluso los expertos son conscientes de que siempre queda algo más por aprender cuando se trata de

scripting. En la sección de portada de este mes mostraremos entre otros temas una infraetructura de red

para Python y algunas herramientas muy útiles relacionadas. POR JOE CASAD

Twisted . . . . . . . . . . . . . . . . . . . . . . . . . .16

Bash Tuning . . . . . . . . . . . . . . . . . . . . . . .19

Realbasic . . . . . . . . . . . . . . . . . . . . . . . . .21

OpenOffice . . . . . . . . . . . . . . . . . . . . . . . .23

TEMA DE PORTADA

gramador (baterías incluidas, según la

jerga Python), algunas aplicaciones

especiales pueden requerir paquetes

externos. Twisted [1] es una potente y

bien organizada colección de módulos

para añadir funcionalidades de red a

los programas en Python.

Si estamos codificando un cliente de

correo electrónico con soporte multi-

protocolo (POP 3, SMTP, IMAP), el

entorno de trabajo Twisted nos librará

de tener que empezar desde cero.

Twisted Mail incluye todos los proto-

colos importantes. Twisted tiene

también módulos listos para usar de

SSH, SFTP, HTTP (incluyendo

HTTP/ 1.1), DNS, NNTP y Jabber.

Si aún así queremos re-inventar la

rueda implementando nuestros pro-

pios protocolos, los módulos

twisted.cred y twisted.spread nos pueden

ayudar a simplificar el trabajo.

Conectar AsíncronamenteTwisted es, básicamente, un marco de

trabajo para comunicaciones asíncronas.

Al contrario que otras librerías, las fun-

ciones de Twisted no provocan bloqueo

cuando se llaman. La aplicación con-

tinúa ejecutándose hasta que se le comu-

nica que ya está disponible la informa-

ción requerida. Aunque las librerías

estándar de Python soportan esto (el

módulo asyncore tiene funcionalidades

básicas para conmutar entre múltiples

canales I/O dentro de un hilo), Twisted

implementa este diseño a un nivel mayor

en sus protocolos, interfaces y compo-

nentes. Esto permite a los progra-

madores escribir aplicaciones de red que

funcionan sin necesidad de procesos e

hilos adicionales, controlando al mismo

tiempo múltiples canales I/O.

Altamente modularPara crear con Twisted nuestro propio

software orientado a red, tendremos

que determinar en primer lugar qué

parte del marco de trabajo necesita-

mos. Los desarrolladores dividieron

Twisted en varios subproyectos cuando

se pasó de la versión 1 a la 2, con el

objetivo de añadir más claridad. La

Tabla 1 tiene una lista de los elementos

más importantes, y existe una lista com-

pleta en [2].

La mayoría de los programadores

se encuentran tarde o temprano

con la tarea de añadir funcionali-

dades de comunicación a sus aplica-

ciones. Si se trata simplemente de modi-

ficar el contenido de una página Web,

existeN soluciones sencillas.

Pero funcionalidades más

complejas, como añadir

capacidad de correo elec-

trónico o un servidor Web

completo, requieren un

esfuerzo mucho mayor.

Aunque la librería estándar

de Python tiene módulos para

la mayoría de los requerimien-

tos de la vida diaria de un pro-

PORTADA • Twisted

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

Crear aplicaciones en red con Twisted

SERPIENTES

El entorno de trabajo Twisted

facilita enormemente la

creación de aplicaciones en

red para Python. Twisted

soporta los principales proto-

colos, desde email hasta chat,

y admite encriptación. Os

mostramos cómo configurar

un servidor para páginas Web

personales con Twisted. POR

MARKUS FRANZ

twisted Marco de trabajo para aplicaciones asíncronas, la base de todos los subproyectos Twisted

twisted.conch Implementación de los protocolos SFTP y SSH para clientes y servidores

twisted.web Protocolo HTTP para clientes y servidores

twisted.web2 Soporte para el protocolo HTTP/ 1.1 como marco de trabajo del servidor. Este paquete está

aún en desarrollo, y no debería usarse para aplicaciones críticas

twisted.mail Implementación de los protocolos SMTP, IMAP y POP para clientes y servidores

twisted.names Soporte para protocolo DNS para clientes y servidores

twisted.news Protocolo NNTP para clientes y servidores

twisted.words Módulo para chat o aplicaciones de mensajería instantánea

Tabla 1: Secciones Man

Twisted requiere el módulo Zope Inter-

face, que implementa interfaces de los

que carece el núcleo del lenguaje

Python. Si sólo vamos a usar un único

proyecto, como Twisted Web o Twisted

Mail, podemos descargar el módulo

requerido de la página del proyecto.

Alternativamente, Twisted Sumo [3]

tiene todos los módulos (estables),

incluyendo una interfaz de Zope.

Tras descomprimir el paquete,

tecleamos python setup.py install. Si la

interfaz Zope no está instalada, el insta-

lador mostrará un mensaje de error y ter-

minará.

El módulo twisted.cred controla la au-

tenticación en las comunicaciones

cliente-servidor. Permite que múltiples

protocolos se conecten al sistema, para

autenticarse y para intercambiar infor-

mación. Por ejemplo, el soporte para

POP 3 en Twisted proporciona una com-

binación de nombre de usuario y con-

traseña para abrir el buzón de correo

solicitado. El llamado Perspective Broker

es de vital importancia aquí. El broker

proporciona acceso a objetos remotos e

implementa copia, referenciado y cacheo

de objetos.

Conexión a Base de Datostwisted.enterprise proporciona una inter-

faz de base de datos que es compatible

con la DB-API 2.0 de Python. Esto hace

del acceso a bases de datos MySQL, Ora-

cle o PostgreSQL un juego de niños. El

módulo usa una interfaz asíncrona, que

puede ejecutarse en múltiples hilos sin

perder la seguridad del hilo en un bucle

principal basado en eventos de Twisted.

El bucle principal tiene lugar dentro del

módulo twisted.internet, conocido como

el reactor. Implementa el bucle infinito

del programa en el que Twisted controla

varios eventos. El reactor proporciona la

interfaz subyacente a las principales fun-

cionaliddaes internas de Twisted, como

las conexiones de red, manejo de hilos o

control de eventos.

Otros módulos raramente son necesa-

rios en aplicaciones prácticas, como

twisted.protocols o twisted.manhole.

Conch implementa la versión 2 del pro-

tocolo Secure Shell para Twisted. El do-

cumento “Cómo” existente en [5] explica

la implementación de un cliente SSH con

Conch en unos pocos y sencillos pasos.

Los campos de aplicación más intere-

santes para Twisted son probablemente

la Web y las aplicaciones para servi-

dores, mediante el uso de twisted.web o

twisted.web2. La potente plantilla para

esta tarea se llama Nevow [6]. Este

entorno de trabajo tiene también un con-

junto completo de funciones necesarias

para programar clientes HTTP. La API

twisted.web soporta múltiples capas de

abstracción: desde servidores web sen-

cillos, pasando por soporte de sesiones,

hasta servidores de aplicaciones interac-

tivas y páginas web distribuidas: las

posibilidades son numerosas.

Cuando una solicitud de un cliente

llega a un servidor Web, el servidor crea

un objeto de solicitud y lo controla hasta

el sistema con los recursos, donde se

crea la respuesta (véase Figura 1).

Además de twisted.web, tenemos tam-

bién el modulo twisted.web2, que está

aún en desarrollo. Las principales mejo-

ras son las siguientes:

• Soporte para HTTP 1.1

• Filtros internos y de salida pre-

definidos, para servir páginas Web

comprimidas con gzip

• Separación del manejo de peticiones

de alto y bajo nivel.

• Análisis correcto de cabeceras HTTP.

• Reescritura enormemente mejorada

de URL, si se usa en combinación

con un proxy.

A pesar de que hay mejoras muy impor-

tantes en twisted.web2 en comparación

con la versión anterior, los desarro-

lladores no recomiendan usar el nuevo

módulo de momento, entre otras cosas

porque el módulo nuevo es más lento

que su predecesor.

El último módulo de importancia es

Twisted Mail, que implementa SMTP,

POP3 e IMAP4. Además de estos proto-

colos, el módulo es capaz de leer y

escribir en formato Maildir de buzones

de correo. Existe también una combi-

nación preconfigurada de SMTP y POP3

para servidores de correo y sistemas de

hosting virtual. Y Twisted Mail entiende

la mayoría de las opciones de Sendmail,

que pueden ser útiles para aplicaciones

compatibles de descarga.

Congelar el servidorEl marco de trabajo Twisted tiene una

colección de programas en línea de

comandos que preparan a las aplica-

ciones de Twisted para escenarios parti-

culares [7]. Las herramientas mktap y

tapconvert crean archivos en formato

Tap, Tas o Tax desde el código fuente en

Python. El código puede entonces usarse

en los distintos servidores de Twisted,

como Web, FTP o IRC.

La herramienta twistd devuelve la vida

a los archivos Tap. Estrictamente

hablando, twistd no es necesario para

ejecutar las aplicaciones Twisted, pero

hace las cosas más fáciles, ya que toma

el control del reactor y controla el inicio

y el apagado del programa. Además

twistd admite la selección de un tipo de

reactor diferente, permitiendo que una

aplicación pueda ejecutarse en modo

demonio o que escriba archivos de log.

Los programas tap2deb y tap2rpm com-

primen las aplicaciones de servidor ter-

minadas para su distribución en paque-

tes con formato Debian o RPM. Las he-

rramientas generan automáticamente

scripts para la instalación y la elimi-

nación del servidor.

El Listado 1 muestra un servidor Web

sencillo y demuestra la potencia de

Twisted. Podríamos usar este código para

habilitar la configuración basada en Web

de nuestra aplicación. Las dos primeras

líneas cargan los módulos requeridos. La

línea 6 crea un servidor nuevo con un

directorio raíz para los documentos

HTML /var/www/htdocs en nuestro ejem-

plo. La siguiente instrucción le indica al

reactor que se quede a la escucha de peti-

ciones en el puerto 7777. La llamada reac-

tor.run() inicia el servidor Web.

Twisted • PORTADA

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

Figura 1: Proceso de petición Web dentro del

marco de trabajo Twisted.

En primer lugar, las líneas 9 a 11 habilitan

el soporte para scripts Perl: queremos

que el servidor entregue los archivos con

extensión .pl al intérprete Perl,

/usr/bin/perl y que devuelva el resultado.

El soporte para PHP y otros lenguajes

puede habilitarse fácilmente en este

punto.

El método putChild() de la línea 14 fija

el directorio CGI a /var/www/cgi-bin, per-

mitiendo de esta manera el acceso a los

scripts en http://servername:7777/cgis. El

método especifica también la ruta del

directorio doc, /var/www/doc. La variable

indexNames especifica qué archivos

busca el servidor en una petición al direc-

torio. La orden se define por los nombres

de archivo especificados.

Las siguientes herramientas de Twisted

podrían usarse como alternativa al

código del servidor Web:

mktap web U

--path /var/www/htdocs U

--port 7777

twistd --file web.tap

mktap crea un archivo Tap preconfigu-

rado. En este caso, mktap fija el direc-

torio raíz a /var/www/htdocs y el

puerto a 7777. El resultado acaba en el

archivo web.tap, que es usado como

parámetro por el servidor twisted. Tras

el arranque, el servidor, el archivo de

logs, twistd.log y el archivo PID (que

puede usarse para matar al servidor

con kill 'cat twistd.pid') se ubican en el

directorio en uso. mktap web -help nos

ofrece más información de las opciones

disponibles.

Sencillo Pero PotenteEste artículo nos da sólo una fugaz

visión general de Twisted. Este marco

de trabajo, junto con Twisted Mail,

Conch, Twisted Web(2) y los demás

subproyectos, forman la base de

muchas aplicaciones de red comer-

ciales. Hasta la NASA usa Twisted

Matrix [8].

Ayudar a las aplicaciones en Python

a que alcancen las estrellas hace la

vida mucho más fácil a los saturados

programadores aquí en la Tierra.

Twisted reduce claramente el esfuerzo

que supone desarrollar un cliente o

servidor eliminando la necesidad de

implementar protocolos conocidos.

Esto acerca a los programadores aplica-

ciones en red seguras, rápidas, estables

y flexibles, a un golpe de ratón. �

El Listado 2 muestra un servidor Web

que añade un buen número de opciones

al marco de trabajo básico del Listado 1.

PORTADA • Twisted

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

[1] Página del proyecto Twisted Matrix:

http://www.twistedmatrix.com

[2] Vista general de todos los proyecots

Twisted: http://www.twistedmatrix.

com/projects

[3] Twisted Sumo: http://twistedmatrix.

com/projects/core

[4] Interfaz Zope: http://www.zope.org/

Wikis/Interfaces

[5] Cliente SSH con Conch: http://

twistedmatrix.com/projects/conch/

documentation/howto/conch_client.

html

[6] Nevow (sistema de plantillas): http://

divmod.org/projects/nevow

[7] Herramientas: http://twistedmatrix.

com/projects/core/documentation/

howto/basics.html

[8] Usuarios de Twisted: http://

twistedmatrix.com/services/success

RECURSOS

01 # Load modules

02 from twisted.internet import

reactor

03 from twisted.web import

static, server

04

05 # Set root directory

06 my_server =

static.File('/var/www/htdocs'

)

07

08 # Launch web server on port

7777

09 reactor.listenTCP(7777,

server.Site(my_server))

10 reactor.run()

Listado 1: Servidor WebSencillo

01 # Load modules

02 from twisted.internet import reactor

03 from twisted.web import static, server, twcgi

04

05 # set root directory

06 my_server = static.File('/var/www/htdocs')

07

08 # Evaluate Perl scripts

09 class PerlScript(twcgi.FilteredScript):

10 filter = '/usr/bin/perl' # path to Perl interpreter

11 my_server.processors = {'.pl': PerlScript}

12

13 # Set and enable CGI directory

14 my_server.putChild('cgis', twcgi.CGIDirectory('/var/www/cgi-bin'))

15

16 # Directories for other targets

17 my_server.putChild('doc', static.File('/var/www/doc'))

18

19 # Index files

20 my_server.indexNames = ['index.html', 'index.htm', 'index.pl']

21

22 # Launch web server on port 7777

23 reactor.listenTCP(7777, server.Site(my_server))

24 reactor.run()

Listado 2: Servidor Web Ampliado

Programación Bash • PORTADA

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

Muchos scripts tratan con Bash

como si sólo fuera capaz de poco

más que llamar a programas

externos. Esto es sorprendente, desde la

versión 2 de la shell por defecto hay

disponible un conjunto de comandos que

abarcan de todo, desde la manipulación

compleja de las cadenas de caracteres,

pasando por las expresiones regulares,

hasta los arrays; lo que hace que sean

redundantes las llamadas a los programas

externos.

La principal ventaja de las funciones

internas es que la shell no tiene que lanzar

un proceso nuevo, lo que ahorra tiempo de

proceso y memoria. Esta capacidad puede

ser importante, particularmente si hace

falta ejecutar un programa como grep o cut

en un bucle, ya que el consumo de tiempo

y memoria del script puede dispararse si

no se tiene cuidado. Este artículo describe

algunas técnicas simples para acelerar los

scripts Bash.

En el Banco de PruebasLos siguientes scripts evalúan un fichero

de registro de Apache de un sitio web

para realizar una comparativa. Si está

interesado en conocer qué páginas han

sido solicitadas, hay que aislar la cadena

GET del fichero de registro, como la

siguiente:

84.57.16.30 - - U

[21/Oct/2005:04:18:26 +0200] U

"GET /favicon.ico HTTP/1.1" U

404 209 "-" "Mozilla/5.0 U

(X11; U; Linux i686; de-DE; U

rv:1.7.5) Gecko/20041122 U

Firefox/1.0"

El Listado 1 muestra una solución que

utilizan muchos scripts Bash. La llamada

a cat en la Línea 3 lee primero el fichero

de registro entero, y trabaja con él en el

bucle for como si se tratara de una lista

de parámetros, con lo que Bash tiene

19

Perfeccionando los scripts en Bash

PROGRAMANDOSCRIPTS

Perfeccionando los scripts en Bash

PROGRAMANDOSCRIPTS

que mantener en la caché el contenido

del primer fichero. En la Línea 5, Listado

1, se continúa realizando una llamada al

programa externo cut por cada línea del

fichero de registro. La ejecución del

script en una máquina Pentium III a

750Mhz tardó 18,5 segundos en el

análisis de un fichero de registro de

600Kbyte de Apache.

Por otro lado, el script del Listado 2

tan sólo tardó 3.3 segundos, casi seis

veces más rápido: utiliza el descriptor de

ficheros 3 para abrir el fichero y hace uso

de la variable Request para procesar una

línea en cada vuelta del bucle, con lo que

Bash tan sólo necesitará mantener en la

caché una única línea del fichero de

registro. A continuación, el script

elimina los caracteres del comienzo de la

línea, hasta que aparece GET, incluido

este, y todos los caracteres del final de la

línea hasta HTTP/, incluido.

En los viejos tiempos, las shells tan sólo eran capaces de realizar llamadas externas a programas y ejecutar

algunos comandos básicos, los comandos internos. Sin embargo, con todas las novedades añadidas a la

última versión de Bash, rara vez hará falta el apoyo de los programas externos. POR MIRKO DÖLLE

01 #!/bin/bash

02 IFS=$'\n'

03 for l in `cat access.log`; do

04 IFS=" "

05 echo "${l}" | cut -d" " -f7

06 done

Listado 1: EvaluaciónExterna de los Registros

01 #!/bin/bash

02 exec 3<access.log

03 while read -u 3 Request; do

04 Request="${Request##*GET }"

05 echo "${Request%% HTTP/*}"

06 done

Listado 2: EvaluaciónInterna de los Registros

01 #!/bin/bash

02 exec 3<$2

03 while read -u 3 line; do

04 if [ -z "${line/*${1}*}" ];

then

05 echo "$line"

06 fi

07 done

Listado 3: Grep Interno

No tiene sentido reemplazar cada

llamada a un programa con los comandos

internos. El Listado 3 es un buen ejemplo

de ello: implementa un grep rudimentario.

Aunque el script comprende tan sólo unas

cuantas líneas de código y podría parecer

eficiente a simple vista, tarda unos dos

minutos en buscar un nombre de fichero

en los 600Kbytes del fichero de registro del

servidor web (grep lo realiza en 0,1

segundos).

Si se encuentra una coincidencia, la línea

analizada del fichero se borra

completamente por una “búsqueda y

reemplazo” en la Línea 4. El patrón de

búsqueda, *${1}*, le indica a Bash que

busque cada carácter individual de la línea

en busca de una coincidencia. Si se utiliza

#*${1}* como patrón de búsqueda,

diciéndole a Bash que busque al comienzo

de la línea únicamente, Bash solamente

realiza la comparación una vez por línea

reduciendo el tiempo del script a menos de

tres segundos.

Diseccionando IPsPero existe una forma más elegante y

rápida de diseccionar las cadenas en

algunos escenarios. Por ejemplo, si hay que

ordenar las direcciones IP por las que

fueron originadas, no se puede utilizar la

función sort o una simple función de

ordenación léxica. Ya que pondría a

217.83.13.152 antes que 62.104.118.59. Por

el contrario, hace falta extraer los bytes

individuales de la dirección IP, convertirlos

a un formato ordenable, ordenarlos y por

último mostrar los resultados sin los

duplicados.

Los Listados 4 y 5 muestran dos

soluciones posibles con características de

rendimiento completamente diferentes. El

script del Listado 5 comienza analizando el

fichero de registro línea por línea (Línea 3)

y luego extrae la primera dirección IP en la

Línea 4. De la Línea 6 a la 10 se elimina un

octeto cada vez de la parte final de la

dirección IP y se almacena el byte de la

dirección como un decimal en el array IP.

En la Línea 11, la llamada a printf, que es

también un comando interno de Bash,

imprime los cuatro octetos de la dirección

IP separados por puntos, tres dígitos

decimales con relleno de ceros. La última

línea encauza la salida al programa externo

sort, antes de eliminar los duplicados. El

Listado 4 tarda unos 2,6 segundos en

procesar el fichero de registro de 600KBytes

de Apache.

Funciones de CompactaciónEl programa del Listado 5 realiza el mismo

trabajo del Listado 4, pero tan sólo tarda

1,6 segundos, una mejora de casi el 40 por

ciento. Las funciones de cadena de la

Línea 4 a la 10 del Listado 4 son las que

causan la diferencia en los tiempos de

ejecución: en vez de extraer primero las

direcciones IP y luego utilizar siete

llamadas a funciones para diseccionarlas,

el Listado 5 llama a la función interna read

de Bash con la variable especial IFS. Bash

trata los caracteres almacenados en IFS

como parámetros separadores. Por defecto

son caracteres espacio, tabulador y línea

nueva.

La Línea 3 del Listado 5 define el punto

y el espacio en blanco como separadores.

Llamando a read con el parámetro -a se le

indica a la función que no almacene una

línea completa en la variable, sino que

haga uso del separador IFS y que escriba

los elementos de la entrada uno a uno en

la variable array IP. Los octetos que

conforman la dirección IP se almacenan en

las variables que van desde la IP[0] hasta

la IP[3] de la llamada a read. Además, una

única llamada a la función en el Listado 5

reemplaza las líneas de la 3 a la 10 del

Listado 4.

Se pueden reemplazar las llamadas

externas a sort y uniq por funciones Bash,

pero no se puede esperar que Bash sea

capaz de igualar a sort, un programa C, en

eficiencia. Como en la vida real, algunos

ajustes en los scripts Bash pueden ser

sorprendentes, pero programar en busca

de la eficiencia también puede pagarse a la

larga. �

Se puede ahorrar otra décima de

segundo eliminando todos los caracteres

que van hasta el blanco del final de la

petición, ya que se simplifica la

comparación de la cadena por la función

interna de Bash.

Funciones de SustituciónLas herramientas basename y dirname

son fácilmente sustituibles con las

funciones Bash. Para realizar esta

operación se necesita la función de

cadena ${Variable%Patrón}, que

elimina la cadena más corta que

coincida con el patrón de la parte final

de la cadena y ${Variable##Patrón}, que

elimina la cadena más larga que coincida

con el patrón de la parte inicial de la

cadena. Con un simple alias se

reemplaza realmente dirname:

alias dirname=echo ${1%/*};

La función basename no es mucho más

compleja, aunque hay que considerar

que basename puede eliminar la

extensión del fichero, por ello hay que

combinar las dos funciones de cadena:

function basename() {

B=${1##*/}

echo ${B%$2}

}

Es más eficiente almacenar los

resultados de la cadena truncada en la

variable B que establecer el primer

parámetro y pasarle el segundo

parámetro.

PORTADA • Programación Bash

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

01 #!/bin/bash02 function GetIP() {03 while read -u $1 Request; do04 tmp="${Request%% *}"05 IP[1]="${tmp%%.*}"06 IP[4]="${tmp##*.}"07 tmp="${tmp%.*}"08 IP[3]="${tmp##*.}"09 tmp="${tmp%.*}"10 IP[2]="${tmp##*.}"11 printf

"%03d.%03d.%03d.%03d\n"${IP[1]} ${IP[2]} ${IP[3]}${IP[4]}

12 done13 }14 exec 3<access.log15 GetIP 3 | sort | uniq

Listado 4: Funciones deCadena de Caracteres

01 #!/bin/bash02 function GetIP() {03 IFS=". "04 while read -u $1 -a IP; do05 printf

"%03d.%03d.%03d.%03d\n"${IP[0]} ${IP[1]} ${IP[2]}${IP[3]}

06 done07 }08 exec 3<access.log09 GetIP 3 | sort | uniq

Listado 5: Funciones deCadena de Caracteres

[1] Programas de ejemplo: http://www.

linux-magazine.com/Magazine/

Downloads/64/bash

RECURSOS

Programación RealBasic • PORTADA

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

Visual Basic es ciertamente popu-

lar en el mundo Windows como

lenguaje fácil de aprender y con

un código sencillo de leer. Los usuarios

que migraban a Linux a menudo tenían

que reescribir sus programas de Visual

Basic a otro lenguaje diferente. Las alter-

nativas libres de Basic, como Gambas

[1], HBasic [2] o WXBasic [3] están

demasiado alejadas de VB para portarlas

sin más. Kbasic [4] promete compatibili-

dad sintáctica completa con Visual Basic,

pero aún se encuentra en un estado beta

después de muchos años de desarrollo.

Real Software ha presentado reciente-

mente Realbasic [5], una herramienta

comercial diseñada para tomar proyectos

en Visual Basic y dar la oportunidad al

usuario de ejecutarlos bajo Linux y Mac

Os X.

El modelo de licencia de Realbasic es

poco común. Además del derecho a usar

el programa, el usuario compra también

el derecho a la corrección de bugs y a

otras mejoras por un periodo de tiempo

determinado. Trascurrido ese periodo, el

cliente mantiene la licencia pero no

recibe las mejoras. Real Software promete

lanzar una nueva versión cada 90 días,

por lo que los usuarios con licencia

pueden esperar nuevas características a

intervalos regulares.

La Standard Edition para Linux es gra-

tuita. La Professional Version tiene un

coste de 330 Euros (399,95 US$) con seis

meses de actualizaciones. También exis-

ten otros tipos de acuerdos con las licen-

cias. La Tabla 1 muestra las diferencias

entre las dos versiones.

La versión Professional de Realbasic

para Linux puede crear programas para

cualquier versión de Windows desde la

95 a la XP. Los programas no requieren

ningún archivo DLL adicional, y los pro-

gramas Realbasic en Linux se reducen a

un único ejecutable. La versión Standard

puede también generar binarios para

probar en Windows y Mac OS, aunque el

tiempo de ejecución del programa está

restringido a cinco minutos.

InstalaciónLos paquetes binarios son fáciles de insta-

lar. Los usuarios de Red Hat Desktop y

Novell Desktop Linux pueden descargar

los RPMs de Realbasic. Existe también un

archivo TGZ. Ambas variantes funcionan

perfectamente en cualquier distribución

reciente. La documentación en formato

PDF está también disponible desde la

página de Realsoftware.

La primera vez que lo ejecutamos, el

programa nos pide que introduzcamos

nuestro nombre y correo electrónico antes

de poder descargar la llave de la licencia.

21

Portar aplicaciones Visual Basic a Linux

PUERTAABIERTA

GUILa interfaz gráfica de usuario de

Realbasic mantiene el tipo frente a

muchos otros entornos de desarrollo

modernos (véase Figura 1). Para los pro-

gramadores que migren desde Visual

Basic no les será complicado adaptarse,

así como los de otras IDEs. El editor

soporta remarcado de sintaxis y auto-

completado de palabras clave, variables,

clases y métodos. El editor también

puede esconderse o mostrar bloques de

código bajo petición para ayudar a los

desarrolladores a llevar la cuenta de

proyectos de gran envergadura.

El editor de formularios proporciona

widgets para las tres plataformas sopor-

tadas. Tiene también elementos OLE que

permiten al desarrollador incrustar obje-

tos de Microsoft Word y Excel. Por

supuesto, esto no funcionará en Linux,

que no evita que estas utilidades se

muestren en la caja de herramientas.

Realbasic proporciona una sencilla solución para la conversión de

programas Visual Basic a Linux. POR FRANK WIEDUWILT

Figura 2: El cursor de retícula facilita el posi-

cionado correcto de los elementos de la

interfaz gráfica.

Figura 1: Realbasic es fácil de usar y ofrece

un amplio abanico de funcionalidades.

Aunque es muy sencillo modificar

las palabras clave que son ligeramente

diferentes o los distintos tipos de datos

(Tabla 1), los desarrolladores que

migran a Realbasic suelen tener pro-

blemas si han utilizado intensivamente

componentes ActiveX u otro tipo de

controles más raros. Realbasic propor-

ciona controles para realizar las tareas

llevadas a cabo por algunos compo-

nentes ActiveX. La documentación

describe estas funciones, dándonos

oportunidad de ver las desventajas

antes de decidir su compra.

Como ejemplo, ListBox de Realbasic

hace el trabajo del popular Flex Grid de

Visual Basic. Real Software ofrece una he-

rramienta de conversión [7] (véase Figura

3) para ayudar al desarrollador a convertir

archivos de proyecto de Visual Basic,

módulos y formularios a proyectos de

Realbasic basados en XML.

Desafortunadamente, la herramienta sólo

funciona bajo Windows.

El software descubre y elimina los

errores de sintaxis durante este proceso,

pero falla si las etiquetas de control con-

tienen caracteres no estándar: trunca los

nombres en cuanto aparece el primer

carácter no estándar. Los archivos de log

de la conversión registran cualquier pro-

blema aparecido, y las posibles soluciones,

en un archivo HTML (véase Figura 4). El

nuevo código fuente contiene comentarios

con los consejos

referentes a la

mejora del código.

Bases deDatosLa Standard Version

de Realbasic sólo

usa una base de

datos interna basa-

da en SQLite. En

contraste con esto,

la Professional

Version usa plugins

que permiten el

acceso a bases de

datos MySQL, MS

SQL y MS Access.

Para poder soportar

más interfaces,

Realsoftware pro-

porciona un Plugin

Development Kit de

manera gratuita en

[8]. Como SQL es el

lenguaje de peticiones preferido, las aplica-

ciones desarrolladas con la base de datos

interna deberían funcionar también con

los demás backends.

Si estamos migrando de Visual Basic a

Realbasic, no tenemos que preocuparnos

por las diferencias entre los dialectos SQL:

el programa de conversión cuida de este

aspecto.

ConclusionesRealbasic permite a los desarrolladores

portar aplicaciones Visual Basic a Linux

con muy poco esfuerzo. Sin embargo,

probablemente necesitemos Windows

para ejecutar el conversor. Si no hemos

usado intensivamente controles ActiveX,

controles propios o controles de cajas de

herramientas, deberíamos ser capaces de

migrar nuestros proyectos Visual Basic sin

hacer demasiados cambios. Estos progra-

mas se podrán ejecutar bajo Linux,

Windows, Mac OS X, e incluso antiguos

Mac OS. �

Disponemos de un cursor tipo retícula,

que facilita al desarrollador posicionar y

alinear los elementos en la pantalla, pues

podemos mostrar una línea verde para

realzar los bordes de otros objetos y tam-

bién podemos encajar así elementos en su

lugar correspondiente cuando forman 90

grados con un elemento de referencia

(véase Figura 2).

Portar Código ExistenteProbablemente nos preguntamos si es

posible usar proyectos existentes de Visual

Basic en Realbasic. La respuesta es un

vago “Básicamente, sí”. La página de Real

Software contiene un HOWTO para desa-

rrolladores en Visual Basic [6] que

describe los problemas al portar.

PORTADA • Programación RealBasic

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

[1] Gambas: http://gambas.sourceforge.

net

[2] HBasic: http://hbasic.sourceforge.net

[3] WXBasic: http://wxbasic.sourceforge.

net

[4] KBasic: http://www.kbasic.org

[5] Realbasic: http://www.realbasic.com

[6] Howto para programadores de VisualBasic: http://www.realbasic.com/

support/whitepapers/

portingvisualbasic

[7] Conversor Visual Basic: http://

highspeed.realsoftware.com/

REALbasic55/VBPC.zip

[8] Realbasic Plugin SDK: http://

highspeed.realsoftware.com/

REALbasic2005r4/PluginsSDK. zip

Standard Pro

Crear programas Linux (procesadores x86) Sí SíCrear programas Linux, Mac OS y Windows - SíConvertir e importar proyectos Visual Basic Sí SíÚnica base de datos integrada Sí SíAcceso a bases de datos externas (Access, PostgreSQL, MySQL, ODBC) - SíSoporte SSL - Sí

Visual Basic Realbasic

Entero 16 Bit Entero No suportado, usa Entero32 BitEntero 32 Bit Long EnteroSingle Single SingleDouble Double DoubleString String StringCurrency Currency Bloque de Memoria8-Bit Byte Bloque de MemoriaBooleano Booleano BooleanoColor No suportado ColorVariant Variant VariantObjeto Objeto Objeto

RECURSOS

Figura 3: El conversor de Visual Basic migra

los proyectos al formato Realbasic, aunque

sólo desde Windows.

Figura 4: El conversor registra los problemas y

las soluciones en un archivo HTML.

Tabla 1: Versiones Estándar y Profesional

Tabla 2: Tipos de Datos

Para muchos usuarios el procesadorde textos y la hoja de cálculopertenecen a los programas más

importantes del escritorio. Pero a veces espreciso generar documentosautomáticamente o retocar partescontroladas por programas. En este casosería útil poder utilizar el lenguaje scriptcon el que se trabaja habitualmente en vezde usar el Basic integrado.

Office desde la distanciaGracias a Arnulf Wiedman y WolfgangGroßer disponemos de una extensión deTcl, Tcluno [1], que permite a los scriptsun acceso pleno a todas lasfuncionalidades de OpenOffice paragenerar y cambiar documentos. El potentemodelo de componentes de UNO (veáse elrecuadro “Universal Network Objects”)dispones de las funcionalidadesnecesarias para controlar OpenOffice adistancia desde otros programas. Elresultado es un documento OpenOfficeque se puede exportar también aWinword/Excel, PDF o bien imprimirse.

Las fuentes de Tcluno se encuentran enSourceforge [2]. Los desarrolladorestrabajan bastante en su proyecto; mientras

que las primeras versiones se basaban enlas bibliotecas C++ de OpenOffice, laversión actual es una extensión del scriptque no requiere compilación. Por ello essuficiente depositar la extensión encualquier parte del ordenador y cambiar laruta de búsqueda de Tcl respectivamente.En el servidor de Linux Magazine [3] seencuentran un paquete preparado con losejemplos de este artículo y una versiónprobada de la extensión.

Procesos enlazadosLa comunicación entre OpenOffice yTcluno se realiza a través de la red, inclusosi ambos procesos corren en la mismamáquina. OpenOffice trabaja entoncescomo servidor. El programa tiene queestar arrancado para que Tcl puedaconsultarlo. DesgraciadamenteOpenOffice arranca por defecto sinsoporte de red. Una llamada con la opciónaccept lo cambia:

ooffice "-accept=socket,U

host=localhost, port=2002;urp;"

Sólo los clientes (o sea scripts Tcl) quecorren en la misma máquina obtienen

23

TCL y OpenOffice • PORTADA

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

acceso a OpenOffice con estaspropiedades. Quien necesite estafuncionalidad más a menudo, puederegistrar el soporte de red de manerapermanente en el archivo deconfiguración. Para esto hay que añadirtres líneas en Setup.xcu en la rama XMLnode oor:name="Office", son las líneas 9a 11 con la propiedadooSetupConnectionURL en el listado 1.

Acceso permitidoSegún la versión, distribución e instalaciónusadas, el archivo de configuración seencuentra en sitios distintos. En OpenOffice2.0 el archivo de configuración específicodel usuario está en~/.openoffice.org2/user/registry/data/org/o

penoffice/Setup.xcu, el archivo deconfiguración de todo el sistema, porejemplo, en/usr/lib/ooo-2.0/share/registry/data/org/ope

noffice/Setup.xcu. En la versión másantigua 1.1 el archivo específico del usuariose llama~/OpenOffice.org1.1/user/registry/data/org

/openoffice/Setup.xcu, para todo el sistema/usr/lib/ooo-1.1/share/registry/data/org/ope

noffice/Setup.xcu.

Tcluno y Itcluno: Extensiones para automatizarOpenOffice

TOMANDOEL CONTROLOpenOffice viene de serie con su propio dialecto Basic, un potente

lenguaje de macros. Pero no Basic es del gusto de todo el mundo.

Los que prefieren Tcl pueden usar este lenguaje para controlar su

Office. Con Tcluno e Itcluno se obtienen informes listos para

imprimir y tablas con datos a partir de cualquier tipo de fuente.

POR CARSTEN ZERBST

OpenOffice viene de serie con su propio dialecto Basic, un potente

lenguaje de macros. Pero no Basic es del gusto de todo el mundo.

Los que prefieren Tcl pueden usar este lenguaje para controlar su

Office. Con Tcluno e Itcluno se obtienen informes listos para

imprimir y tablas con datos a partir de cualquier tipo de fuente.

POR CARSTEN ZERBST

métodos definidos en la descripción delinterfaz al objeto. El listado 2 sólo usauna de las 2600 clases de OpenOfficepara llenar una hoja de cálculo yexportarla en formato Excel.

Los comandos lappend en las líneas 3 y4 amplían la ruta de búsqueda de Tcl conla instalación de Tclurtp y Tcluno. Para lacomunicación con OpenOffice, losejemplos trabajan con una solución descript Tclurtp pura. Pero en la versiónactual Tcluno usa la variante Tclurtpsolamente si el script corre con la opción-urtp. La línea 7 procura que la variable::argv contenga siempre esta cadena,independientemente de lo que el usuarioindicó en la línea de comandos.

A continuación el código empieza asolicitar la extensión para la hoja decálculo. La línea 12 intenta establecer elcontacto con OpenOffice con::tcluno_soffice::initDesktop. Si esto falla,las siguientes llamadas puts stderr generanun amplio mensaje de error. En caso deéxito la variable desktop contiene el objetode arranque central.

Por cierto, en Tcluno el programador notiene que preocuparse por consultar lareferencia de objeto solicitada antes depoder usarla (como sucede en Java oC++). No obstante estas consultas sonposibles y dan sentido para informarsesobre las interfaces soportadas por unobjeto. Las líneas 23 hasta 26 lo muestran;el resultado se puede ver en la figura 2.

Puro UNOLos objetos OpenOffice funcionan paraprogramadores de Tcl igual que los de Tko Itcl. En Tcl están listos como objetos,según la tradición de Tk el script pasa los

PORTADA • TCL y OpenOffice

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

01 <?xml version="1.0"

encoding="UTF-8"?>

02 <oor:component-data

xmlns:oor="http://openoffice.o

rg/2001/registry"

xmlns:xs="http://www.w3.org/20

01/XMLSchema" oor:name="Setup"

oor:package="org.openoffice">

03 <node oor:name="L10N">

04 <prop oor:name="ooLocale"

oor:type="xs:string">

05 <value>en-US</value>

06 </prop>

07 </node>

08 <node oor:name="Office">

09 <prop

oor:name="ooSetupConnectionURL

" oor:type="xs:string">

10

<value>socket,host=localhost,p

ort=2002;urp</value>

11 </prop>

12 <prop

oor:name="ooSetupInstCompleted

" oor:type="xs:boolean">

13 <I>[...]<I>

Listado 1: Soporte de red

Cuando la empresa Star Divisionempezó a desarrollar el Star Office amediados de los noventa, eligió a C++como lenguaje de programación. Pero lefaltó un modelo de componentes paradividir las grandes aplicaciones en tro-zos pequeños independientes de laplataforma. Entonces Star Divisiondesarrolló su modelo de componentesUNO siguiendo el ejemplo de las ideasdel OLE (Object Linking and Embedding)y del OMG CORBA (Object ManagementGroup, Common Object Request Broker[4]) de Microsoft. UNO significa Univer-sal Network Objects (esto es, Objetos deRed Universal).

Descripción de interfaces

UNO usa un lenguaje propio (parecido aCORBA) para describir métodos ypropiedades de las clases disponibles.Comparable con OLE de Microsoft, losobjetos soportan varias interfaces, uncliente las consulta en tiempo de ejecu-ción y se decide por una de ellas. Laimplementación para una hoja de cál-culo (“SpreadsheetImplementation”Figura 1) conoce por ejemplo variasinterfaces. Un programa de Java las con-sultaría de la siguiente manera:

X S t o r a b l e x S t o r a b l e =

(XStorable)U

UnoRuntime.queryInterface(U

XStorable.class, spreadsheet);

xStorable.storeAsUrl( ... );

X P r i n t a b l e x P r i n t a b l e =

(XPrintable)U

UnoRuntime.queryInterface(U

XPrintable.class, spreadsheet);

xPrintable.print( ... );

La ventaja del modelo de componenteses que el desarrollador puede elegir libre-mente durante la implementación lasinterfaces a disposiciónde un nuevo objeto. Elprincipio se parece a lasinterfaces de Java. Alcontrario de C++, evita lasherencias múltiples. Si secambia la imple-mentación de un objeto,no tiene consecuencias

para el resto del código fuente, porqueéste solo usa las interfaces disponibles yno el objeto en sí.

La agrupación proporciona una vista ge-

neral

Para no perder la vista general con tantasinterfaces, es posible agruparlas enunidades más grandes, llamadas “ser-vices” (servicios). En UNO un simpleconstructor no es suficiente para generarun objeto, el programa más bien tieneque solicitarlo al “Servicemanager” (oAdministrador de servicios, también lla-mado “factory” o fábrica). Es curioso quela empresa francesa Dassault Systèmesuse un entorno casi idéntico en Catia V5.Desgraciadamente la versión Linux deeste sistema CAD no está disponibletodavía.

Tal y como sugiere la palabra “Network”de las siglas UNO, el acceso a las inter-faces de los componentes funciona tam-bién a través de la red. Éste es el caminomás sencillo para controlar OpenOfficedesde lenguajes de programación ajenos.Quien quiera escribir sus propios objetosUNO, tiene que usar actualmente C++ oJava. Quien sólo quiera usar las fun-cionalidades existentes de OpenOffice,puede usar también otros lenguajescomo Tcl, Python, Dotnet o OpenOfficeBasic.

Ojeada en tiempo de ejecución

Especialmente práctico para lenguajesscript: se pueden consultar las interfacesdisponibles en tiempo real a través de laintrospección. Tcluno aplica y solicita porsí mismo las interfaces necesarias. Lospropios programadores de Java o C++tienen que afanarse en este paso antes depoder aplicar métodos a un objeto. Si losprogramadores de Tcl conocen las inter-faces de una implementación, entoncespueden aplicarlas directamente.

Universal Network Objects

Figura 1: Gracias a UNO la implementación y la inferfaz

están separadas, un objeto suele soportar varias interfaces.

Tipos de datosLa mayoría de los comandos UNO esperanentradas simples como cadenas, números olistas. Pero hay también unos tipos de datosespeciales, que no tienen equivalentes enTcl. Tcluno lo compensa con unoscomandos auxiliares, por ejemplo, para lasecuencia tan usada del tipo Any (línea29). Este contenedor genérico puede recibircualquier tipo de datos.

El objeto desktop sirve de generador dedocumentos. El métodoloadComponentFromURL abre undocumento (línea 32). El primer parámetroindica su URL. El URL normal es suficientepara documentos ya existentes (porejemplo file:/home/cz/test.odt). Pero paracada tipo de archivo existe además un URLespecial:

• private:factory/swriter• private:factory/scalc• private:factory/sdraw• private:factory/simpress

Generan un documento nuevo y vacío.El segundo parámetro indica la ventanaen la que aparece el documento. _blank

proporciona una ventana nueva. Losúltimos dos argumentos no se usan y sonvalores predeterminados.

El resultado de lo anterior es un objetonuevo, cuya referencia termina en$spreadsheet; se trata de un documentode hoja de cálculo. La línea 36 solicita lalista de todas las hojas de estedocumento, y la línea 37 elige de ellas laprimera página. El título de esta hoja sellama por defecto tabla1. La línea 39 locambia a Números_aleatorios.

Navegación en eldocumentoOpenOffice conoce dos técnicas paradirigirse a las celdas de una hoja: biencomo se puede ver en la línea 44, através de getCellByPosition con el índicede la columna y la fila como número, o

bien como en la línea 51, congetCellRangeByName y la combinacióncomún de letra y cifra. Cuidado: el índicepara getCellByPosition empieza con 0,mientras que la primera fila engetCellRangeByName lleva el número 1.

Con setValue el programa pone losvalores de las cifras en las celdas (línea46). Además de valores numéricos, lasceldas pueden contener tambiénfórmulas o textos. Esto se consigue consetFormula, como se puede ver en laslíneas 56 (texto) y 58 (fórmula). Hay queprocurar que las fórmulas estén en formainglesa, por ejemplo =median(A1:A2)

(línea 62) y no =mediana(A1:A2), quesólo está permitido desde el GUI.

Para guardar el documento terminado(figura 2b), el programa tiene que decidirentre todos los formatos soportados porOpenOffice, por ejemplo Excel, Star Calco CSV (Comma Separated Values).Normalmente, para estas

TCL y OpenOffice • PORTADA

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

01 #!/usr/bin/tclsh0203 lappend auto_path [file join

[pwd] tclurtp]04 lappend auto_path [file join

[pwd] tcluno ]0506 # Solicitar versión Tcl-Only

de Tcluno07 set ::argv "-urtp"08 # Cargar extensión09 package require tcluno_scalc1011 # Establecer contacto con

OpenOffice12 if {[catch

{::tcluno_soffice::initDesktop} desktop]} {

13 puts stderr "Conexión conOpenOffice fallado!"

14 puts stderr "Error fue:"15 puts stderr $desktop16 puts stderr ""17 puts stderr "Por favor,

arrancar OpenOffice consoporte de red:"

18 puts stderr "ooffice\"-accept=socket,host=localhost,port=2002;urp;\""

19 exit 120 }2122 # Mostrar interfaces23 puts "»desktop« tiene los

siguientes interfaces:"24 puts [join [$desktop getTypes]

"\n"]25 puts "\n»desktop« es el

servicio siguiente:"26 puts [$desktop

getSupportedServiceNames]2728 # Crear lista vacía29 set filterSequence [$desktop

tcluno::createUnoSequence Any]3031 # Nuevo documento en hoja de

cálculo32 set spreadsheet [$desktop

loadComponentFromURL \33 "private:factory/scalc"

"_blank" 0 $filterSequence]3435 # Encontrar primera página36 set sheets [$spreadsheet

getSheets]37 set sheet [$sheets getByIndex

0]38 puts "\nLa tabla se llama:

[$sheet getName]"39 $sheet setName

"Números_aleatorios"4041 # Llenar tabla con números

aleatorios42 for {set col 0} {$col < 10}

{incr col} {43 for {set row 0} {$row <

10} {incr row} {44 set cell [$sheet

getCellByPosition $col $row]45 set value [expr

{rand() * 100}]46 $cell setValue $value47 }48 }4950 # Dirección de la celda51 set cell [$sheet

getCellRangeByName "A12"]

52 puts "\nDirección completa:[$cell getCellAddress]"

5354 # Fórmulas y textos55 set cell [$sheet

getCellRangeByName "A12"]56 $cell setFormula "Suma:"57 set cell [$sheet

getCellRangeByName "B12"]58 $cell setFormula

"=sum(B1:B10)"59 set cell [$sheet

getCellRangeByName "A13"]60 $cell setFormula "Mediana:"61 set cell [$sheet

getCellRangeByName "B13"]62 $cell setFormula

"=median(B1:B10)"6364 # Exportar como hoja de

cálculo Excel65 set filterSequence [$::desktop

tcluno::createUnoSequence Any]66 set msExcelFilter [$::desktop

tcluno::createUnoStructHelper\

67com.sun.star.beans.PropertyValue \

68 {FilterName -1 {MS Excel97} 0}]

69 $::desktoptcluno::appendUnoSequence$filterSequence $msExcelFilter

7071 $spreadsheet storeAsURL

"file:[file normalize~/prueba.xls]" $filterSequence

Listado 2: Tcluno

Más cómodoItcluno está aún mejor adaptado almundo de componentes orientado aobjetos de OpenOffice que Tcluno.Ahorra mucho trabajo minucioso alprogramador. Como el nombre indica,Itcluno se basa en la extensión de Tclorientada a objetos Itcl [5], pero necesitatambién la extensión Tclvfs (Virtual FileSystem o Sistema de FicherosVirtual[6]). Ambos faltan en muchasdistribuciones de Tcl. Active Tcl deActivestate [7] es una manera fácil decosneguirlos.

Con Itcluno, un programa no usa losobjetos UNO directamente como en el

listado 2, sino de manera indirecta através de un surtido de clases Itcl, fácilesde usar. Actúan como la capa superior,que encapsula los objetos OpenOffice.Así un script consigue realizar su tareacon menos comandos. El ejemplo en ellistado 3 genera un documento nuevocon Itcluno, lo llena de valoresregistrados y produce con ellos undiagrama.

Clases de hoja de cálculoLa clase SpreadSheet es la responsable dela hoja de cálculo. Sus aproximadamente30 métodos se ocupan de casi todo lorelacionado con la hoja de cálculo. Sólo

configuraciones se usa una secuenciaAny. La línea 65 genera una lista vacíade este tipo genérico.

Para guardarlos como Excel, la listatiene que contener una estructura del tipocom.sun.star.beans.PropertyValue. Lafunción de ayuda createUnoStructHelper

es la responsable de ello en Tcluno (línea66 hasta 68). Espera como parámetros elnombre y el contenido de la estructura.La función de ayuda appendUnoSequence

incorpora en la línea 69 la estructuranueva en la secuencia vacía, lo cualaprovecha la línea 71 para guardar eldocumento nuevo bajo el nombreprueba.xls en la carpeta home.

PORTADA • TCL y OpenOffice

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

01 #!/usr/bin/tclsh0203 lappend auto_path [file join

[pwd] tclurtp]04 lappend auto_path [file join

[pwd] tcluno ]05 lappend auto_path [file join

[pwd] itcluno]0607 # Solicitar la versión Tcl-Only

de Tcluno08 set ::argv "-urtp"09 # Cargar extensión10 package require itcluno1112 # Generar documento13 set spreadsheet

[::itcluno::SpreadSheet #auto]14 $spreadsheet renameSheet Tabla1

Valores1516 # Poner valores17 $spreadsheet setCellValue

Valores [list 0 0] \18 {{Fecha Hora Altura}}19

20 # Altura del mar en Cádiz,23.3.2006

21 # Fuente: http://indamar.ieo.es/(Mareas | Acceso a datos |Cádiz)

22 set datos [list \23 [list 21.03.06 00:00 13.25 ] \24 [list 21.03.06 01:00 15.33 ] \25 [list 21.03.06 02:00 18.80 ] \26 [list 21.03.06 03:00 22.51 ] \27 [list 21.03.06 04:00 26.31 ] \28 [list 21.03.06 05:00 29.00 ] \29 [list 21.03.06 06:00 29.57 ] \30 [list 21.03.06 07:00 27.78 ] \31 [list 21.03.06 08:00 24.66 ] \32 [list 21.03.06 09:00 20.14 ] \33 [list 21.03.06 10:00 16.33 ] \34 [list 21.03.06 11:00 14.35 ] \35 [list 21.03.06 12:00 14.24 ] \36 [list 21.03.06 13:00 15.58 ] \37 [list 21.03.06 14:00 18.40 ] \38 [list 21.03.06 15:00 21.73 ] \39 [list 21.03.06 16:00 25.16 ] \40 [list 21.03.06 17:00 27.85 ] \41 [list 21.03.06 18:00 28.89 ] \42 [list 21.03.06 19:00 28.60 ] \

43 [list 21.03.06 20:00 25.95 ] \44 [list 21.03.06 21:00 21.81 ] \45 [list 21.03.06 22:00 17.77 ] \46 [list 21.03.06 23:00 14.92 ] \47 [list 21.03.06 24:00 13.75 ]]48 $spreadsheet setCellValue

Valores [list 0 1] $datos4950 # Generar diagrama51 $spreadsheet createChart Valores

\52 [list 12 1 12 12 cm] \53 [list hasRowHeader 1

hasColumnHeader 1 \54 title "Altura del mar

en Cádiz" \55 type LineDiagram] \56 Valores [list 1 1 2 26]5758 tcluno_soffice::windowTitle \59 [$spreadsheet cget -desktop]

\60 "Altura del mar en Cádiz"6162 $spreadsheet exportToPdf

altura.pdf

Listado 3: Itcluno

Figura 2: El script Tcl ha cambiado el nombre de la primera tabla. La ha llenado de números aleatorios y ha insertado el cálculo de la suma y el

valor medio.

con el constructor en la línea 13 seestablece el contacto con OpenOffice y segenera un documento nuevo. La línea 14da un nombre a la tabla, y la línea 17 ponelos primeros valores en la tabla consetCellValue. El código es el siguiente:

$spreadsheet setCellValueU

Nombre_de_tabla {ColumnaComienzoU

FilaComienzo} {{Valor11 Valor12}U

{Valor21 Valor22}}

Los valores en la lista embebida puedenser números, textos o fórmulas. A lostítulos de las columnas les siguen losdatos, que esta vez provienen del InstitutoEspañol de Oceanografía (RED DEINFORMACIÓN DE DATOSOCEANOGRÁFICOS) [8]. Las líneas 23hasta 47 contienen directamente losvalores; pero un script podría consultar losvalores directamente desde una páginaweb. La línea 48 introduce este bloque dedatos en OpenOffice.

Un diagrama proporciona una mejorvista general de los cambios de la alturadel mar: Las líneas 51 hasta 56 generan

TCL y OpenOffice • PORTADA

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

La combinación de base de datos y Tclparece ser muy adecuada para eldesarrollo rápido de aplicaciones.Como prueba, casi no hay una base dedatos sin extensión de Tcl. Unas usanTcl hasta como herramienta de pruebaen el desarrollo. Jerry LeVan acaba depublicar su nueva versión 1.6 dePgBrowser [10]. Se trata de un nave-gador de bases de datos bastantepotente para PostgreSQL.

La extensión Tile proporciona un mejoraspecto para las aplicaciones Tk, perotodavía no tiene tantas funcionalidadescomo Tk. Para una transición suave, losdesarrolladores integran ahora Tilepaso a paso al Tk normal. El nuevo kitde herramientas mezcladas se llamaTtk [11].

Websh [12] es un entorno avanzadopara aplicaciones web. La versión3.6.0b3 contiene parches para errores yes compatible con Apache 1.3 y 2.0 ycon Tcl 8.4 y 8.5.

Miradas curiosas

Cuando hay que solucionar un pro-blema con clientes o en máquinas aje-nas, muchas veces sólo quedadisponible el korn-shell o tal vez sólocmd.exe. No es una buena base pararesolver pequeños problemas y otrosmás grandes en un tiempo razonable.

Aquí los Tclkits [13] son una granayuda, porque contienen en un únicoarchivo el intérprete completo de Tcl yno necesitan derechos de root. En com-binación con la consola TK [14] desa-rrollada por Jeffrey Hobbs, se arrancaun entorno de desarrollo práctico encuestión de segundos. Esto funcionano solamente en plataformas Linux-X86, sino también en entornos menosdotados como Linux-S390, HP-UX,Solaris o OSF-Alpha.

En la caja de herramientas falta ahorasólo una aplicación que vigila cualquiercomunicación TCP/IP de navegador o Tel-net. Esto es lo que hace Sockspy (figura 4y [15]) y cabe en un dispositivo de memo-ria USB para urgencias. Se pueden regis-trar las transferencias grabadas de ma-nera cómoda y también mostrarlas comovolcado hexadecimal. Sockspy no ofrecelas posibilidades del líder Ethereal, peroen cambio no requiere derechos root.

Figura 3: Sólo siete comandos Itcluno bastan para generar esta tabla completa. En el listado 3

el programa genera una nueva hoja de cálculo, lo llena con los datos registrados de la marea y

produce con ellos un diagrama de líneas.

Figura 4: Sockspy se coloca entre cliente y servidor para escuchar las transferencias

TCP/IP y mostrarlo en orden cronológico.

Lo último

en cambio, puede resultar bastantepenoso, porque el API de OpenOffice esdifícil de entender con susaproximadamente 2600 clases y 6000métodos. Por suerte suelen bastar 20clases, pero hay que aprenderlostambién.

DocumentaciónLa documentación de OpenOfficeproporciona un buen comienzo. Sepuede encontrar en línea y en el kit dedesarrollo de OpenOffice [9]. Ademásde los secciones de introducción, vale lapena leer los capítulos 7 hasta 10, queexplican con muchos ejemplos elmanejo de los distintos tipos dedocumentos. Los ejemplos estánpensados para Java, pero quien recorretodas las líneas con queryInterface,puede usar el resto para Tcluno.

Navegación por la junglaAPITcluno contiene también junto conUnospection (Figuras 5a y 5b) una

herramienta útil para probar scriptspropios y para buscar en el API deOpenOffice. La herramienta es unamezcla entre navegador de objetos(Figura 5a) y visor de ayuda condocumentación integrada (Figura 5b).Si lo pide, el desarrollador ve el texto deayuda para todos los métodos viablespara un objeto, y puede llamar elmétodo directamente de prueba.

Unospection merece la pena ya sólopor su navegador de ayuda. Estafunción se encuentra en el menú Edit |

Search Methods. La herramientacontiene la documentación para todaslas clases y todos los métodos.Unospection todavía tiene algunoserrores por subsanar, pero tiene toda labase para ser un ayudante práctico paradesarrollar scripts para OpenOffice. Losdos autores Wolfgang Großer y ArnulfWiedman han hecho un buen trabajo,que se merece más que un vistazo parala automatización de Office. �

el diagrama de líneas (figura 3). Lalínea 58 pone el título y la 62 exporta eldocumento como PDF. Gracias a Itclunotodo ha costado sólo 7 comandos(líneas 13, 14, 17, 48, 51, 58 y 62).Itcluno incluye una amplia colección deejemplos útiles, que abarcan desdetareas sencillas de formato hasta unaextensa tabla de Pivot.

El programa completoTcluno proporciona a los scripts Tcl elAPI completo de OpenOffice. Losdesarrolladores generan con ellodocumentos y modifican su contenidosin aprender un lenguaje nuevo. Losejemplos de este artículo tratansolamente de generar hojas de cálculo,pero tanto Tcluno como Itclunoincluyen un procesador de textos,aplicaciones de diseño ypresentaciones.

Itcluno lleva más rápido al éxito enmuchas tareas, porque cubre lasposibilidades esenciales con pocoesfuerzo de aprendizaje. El comienzo,

PORTADA • TCL y OpenOffice

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

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

www.tugm.de/Projekte/TCLUNO/

index.html.en

[2] Tcluno en Sourceforge: https://

sourceforge.net/projects/tcluno/

[3] Programas de este artículo: http://

www.linux-magazine.es/Magazine/

Downloads/17

[4] OMG Corba: http://es.wikipedia.org/

wiki/Corba

[5] Incr Tcl: http://incrtcl.sourceforge.net/

itcl/

[6] Tclvfs: http://sourceforge.net/projects/

tclvfs

[7] Activestate Tcl: http://www.

activestate.com/Tcl.plex

[8] Instituto Español de Oceanografía,“Mareas | Acceso a datos | Cádiz”:http://indamar.ieo.es/

[9] Kit de desarrollo de software OpenOf-fice (SDK): http://www.openoffice.org/

dev_docs/source/sdk/

[10] PgBrowse: http://homepage.mac.

com/levanj/TclTk/

[11] Tile Tk: http://wiki.tcl.tk/14796

[12] Websh: http://tcl.apache.org/websh/

[13] Tclkit: http://www.equi4.com/pub/tk/

downloads.html

[14] Tkcon: http://tkcon.sourceforge.net

[15] Sockspy: http://sockspy.sourceforge.

net/sockspy.html

RECURSOS

Figura 5a: Unospection muestra una estructura de árbol de las interfaces UNO de OpenOffice.

El usuario puede ver todos los métodos para un objeto y llamarlos directamente.

Figura 5b: Especialmente práctico: la herramienta lleva consigo la documentación completa

del API de OpenOffice.

Libros • EVALUACIÓN

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

ciones que podemos correr desde la línea

de comandos.

Es casi imposible, cuando se describen

programas o instrucciones individuales,

evitar caer en la manitis, es decir, que la

explicación de las funcionalidades de un

comando se solapen con las que ofrece la

página man de ese mismo comando. Y, en

cierta medida, Classic Shell Scripting cae en

este problema en varias secciones. Los

autores lo compensan complementando

con lo que a menudo falta en las páginas

man, es decir, una serie de buenos ejem-

plos que ayudan a entender las opciones y

funcionalidades de cada una de las instruc-

ciones que se estudian.

Asimismo, ya metidos en las entrañas

del volumen, Robbins y Beebe ilustran la

potencia de la línea de comandos con una

serie de programas que muy bien se

podrían utilizar en entornos de producción.

Entiéndase que no estamos hablando aquí

de programas a lo “Hola Mundo”, sino ver-

daderas aplicaciones, como un buscador de

instrucciones en las rutas establecidas por

PATH, un script que ayuda a la compilación

e instalación de paquetes en paralelo o un

corrector ortográfico que utiliza AWK.

Mención especial merece el apartado

dedicado a AWK. Los autores expresan una

especial predilección por este analizador y

modificador de cadenas, y lo justifican

dedicándole todo un capítulo en el que

demuestran hasta donde se puede llegar

con este potente lenguaje.

El libro incluye además un análisis de

varios tipos de shell, aparte del

omnipresente Bash, destacando las fuerzas

y debilidades del Z shell, Korn y otros.

Asimismo, existe un capítulo dedicado a

scripts seguros, donde se apuntan los pro-

blemas que puede causar un script defi-

cientemente escrito y las soluciones para

evitarlos.

Classic Shell Scripting concluye con

apéndices sobre el formato utilizado para

escribir páginas man, imprescindibles para

documentar correctamente un programa,

un apartado sobre el sistema de ficheros

Unix y por ultimo, un listado de los coman-

dos más importantes clasificados según su

funcionalidad (implícitos, manipulación de

texto, manipulación de ficheros, control de

procesos, etc.).

A DestacarEl volumen que nos ocupa sigue la línea

habitual de O’Reilly en lo que se refiere a

excelentes manuales técnicos magnífica-

mente diseñados. Merece la pena destacar

el buen diseño y la usabilidad de este ma-

nual que tiene detalles tales como poner en

cada página par, al pie, el título del capítu-

lo, y en cada página impar el título de la

sección, lo que ayuda a encontrar fácil-

mente la información que interesa. Esta

característica, unido a un completo glosario

y el citado índice de instrucciones temático,

hace que Classic Shell Scripting sea un pla-

cer de consultar.

ConclusiónUn volumen sobre el uso y programación

desde la línea de comandos no es algo que

la mayoría de los usuarios de Linux pueda

obviar. Se pueden elegir los manuales de

aplicaciones según las aplicaciones que se

utilicen. También pueden elegirse los ma-

nuales de programación según los lengua-

jes en los que se desarrolle. Pero, en lo que

a la línea de comandos se refiere, no hay

mucha alternativa. Tarde o temprano todo

usuario de Linux acaba en la shell, y para

navegar por ella sin perderse, Classic Shell

Scripting tal vez sea el mejor de los mapas

que uno pueda encontrar.

Autores: Arnold Robbins y Nelson

H.F. Beebe

Idioma: Inglés

Formato: 531 páginas

Editorial: O’Reilly

ISBN: 0-596-00595-4

Precio: 31,00 euros

CLASSIC SHELL SCRIPTINGEs apropiado que en un número dedicado

al scripting hagamos una reseña del libro

que nos ocupa. Classic Shell Scripting es el

manual que necesitará cualquier adminis-

trador de sistemas Unix (ya sea de Linux,

Solaris, AIX o HP-UX, arquitecturas todas

ellas contempladas por el volumen) si

desea sacar el máximo rendimiento a su

sistema operativo.

El Poder de la Línea deComandosA diferencia de otros entornos cuyo princi-

pal medio de comunicación con el

usuario, administrador o programador es

un medio gráfico, en los sistemas basados

en Unix, los terminales de texto son de

una gran importancia. La mayoría de las

aplicaciones gráficas Unix y todas las que

se ocupan de la administración del sis-

tema operativo recurren en cierta medida

a sus homólogos de texto y, si bien el

entorno gráfico a menudo es suficiente

para muchas tareas, el control granular

que ofrecen las instrucciones y aplica-

ciones que se ejecutan desde la línea de

comandos con sus múltiples opciones, no

tiene igual en sus equivalentes basados en

GUI.

Asimismo, a menudo ocurre que en

otras plataformas hay una clara distinción

entre el programador, el administrador y el

usuario final. Sin embargo, en los

entornos GNU/Linux, lo más normal es

que el administrador también programe,

que el programador administre y que el

usuario final también microadministre en

cierta medida su sistema.

Así las cosas, un conocimiento del

entorno de texto Unix y las prestaciones

que ofrece, es de gran valor para todos los

que lo utilicen. En este sentido, el volu-

men que nos ocupa podría ser una de la

mejores inversiones que pueda hacer uno

que quiera adquirir un profundo

conocimiento sobre las distintas shells.

Nótese que digo “profundo conocimien-

to”, porque Classic Shell Scripting, es eso:

un examen en profundidad y exhaustivo

de casi todas las instrucciones y aplica-

LIBROS POR PAUL C. BROWN

30

EVALUACIÓN • Portátiles con Linux

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

segundos. También realiza una pausa

de 4 minutos y 30 segundos cada cinco

tandas, y luego comienza de nuevo.

Esto simula el uso habitual con un

portátil, que suele ser revisar

documentos existentes, por ejemplo.

Los resultados y las características

técnicas de los portátiles se muestran

en la tabla “Comparativa de

Portátiles”.

Acer Travelmate 4652LMiEl Acer Travelmate 4652LMi es el

candidato más asequible, incorpora

una CPU Centrino y está

sorprendentemente bien equipado. La

pantalla de 15’‘ tiene una resolución de

1400x1050 píxeles, con una CPU

Pentium M bastante rápida a una

velocidad de 1.73 GHz. La grabadora

de DVD soporta todos los formatos de

DVD, incluyendo el DVD+R de doble

capa. El único problema con la unidad

es que el mecanismo de resorte falla al

expulsar la bandeja si el portátil no

esta completamente nivelado, sino que

está inclinado a la derecha. En este

caso, tendremos que sacar la bandeja

de manera manual para extraer el

disco.

Bajo Precio, pero BuenoLos 80GB de disco duro tienen un

conector paralelo ATA. (Samsung es el

único que instala un disco X50 SATA, que

cuesta más del doble). Acer no instala

una cara tarjeta gráfica de ATI o Nvidia.

Esto significa que el Travelmate no está

pensado para juegos 3D complejos como

Quake o Unreal, pero funciona bien con

Tuxracer, gracias al soporte 3D integrado

en el chipset gráfico. Podemos conectar

una pantalla externa al puerto DVI o

VGA, aunque la tarjeta gráfica no soporta

el modo dual-head. Podemos únicamente

ver la misma imágen en el monitor y en

la pantalla del portátil.

Acer va por su cuenta en lo referente al

teclado y ratón. El teclado está

ligeramente curvado para proporcionar

una escritura más ergonómica.

Desafortunadamente, Acer ha movido las

teclas de “mayor que” y “menor que”, así

como el símbolo de tubería al otro lado

del teclado, lo que puede resultar

molesto si estamos acostumbrados al

teclado tradicional, ya que esto nos

obliga a mirar las teclas hasta que nos

acostumbremos a su disposición. El

portátil de Acer no tiene un bloque de

teclas separadas, sino dos teclas con

Los ordenadores portátiles

presentan muchos retos para el

sistema operativo. Los chipsets

y tarjetas gráficas varían enormemente

de los modelos usados en PCs

estándar. Las funcionalidades de

ahorro de energía de la CPU y los

periféricos son una dificultad más.

Hemos investigado cómo responden

bajo Linux tres portátiles actuales de

los fabricantes Acer, Dell y Samsung.

Estas máquinas están pensadas para

sustituir PCs estándar de escritorio,

por lo que un requerimiento básico fue

una resolución de más de 1024x768

píxeles. Además, quisimos que los

portátiles tuvieran grabadora de DVD y

discos duros de gran capacidad.

Probamos una instalación estándar

de Suse Linux 10 en los equipos. Las

funcionalidades 3D se probaron con

Tuxracer, instalando los drivers

propietarios de ATI en el Dell Latitude

D180 y en el Samsung X50.

Hemos usado, así mismo, un

testeador de teclados para comprobar

el rendimiento de la batería. El

testeador presiona caracteres a una

velocidad de 60 por minuto, durante

30 segundos, y luego espera otros 30

Comparativa de portátiles bajo Linux

PORTÁTILESA EXAMEN

Hemos tomado tres ejemplos de la cosecha actual de portátiles para comprobar cuál se comporta mejor bajo Linux.

POR MIRKO DÖLLE

símbolos de moneda.

Desafortunadamente estas teclas no

devuelven códigos de escaneo, como las

cuatro teclas extra de la parte superior

del teclado, por lo que resultan inútiles.

El touchpad que monta Acer para

sustituir al ratón es el único que tiene

rueda entre los botones, y lo que es más,

la rueda permite desplazamiento vertical

y horizontal.

Buen Rendimiento de laBateríaEl Acer Travelmate tiene un buen soporte

para Linux. Tanto el Bluetooth como la

WLAN funcionaron a la primera, y se

configuraron fácilmente desde la

instalación de Suse Linux 10. Dos

botones iluminados en la parte frontal

del portátil permiten al usuario

deshabilitar el Bluetooth y la WLAN de

forma independiente. El resto de

portátiles de la prueba habilitan o

deshabilitan ambas de manera conjunta.

Las características de gestión de

consumo de Acer funcionaron es su

mayor parte, lo cual ayudó al Travelmate

a conseguir una duración de la batería de

cuatro horas y media. Ocho horas de

autonomía parecen una propuesta muy

razonable si colocamos una batería extra

en el zócalo de la unidad óptica. Los

drivers gráficos dieron problemas al

habilitar el modo suspensión a RAM: al

reanudar el trabajo, la pantalla seguía en

negro.

Dell Latitude D180La pantalla que monta Dell en su

Latitude D180 es del mismo tamaño que

la pantalla de Samsung, aunque no

muestra tanto brillo.

Desafortunadamente, esto afecta a la

autonomía: la batería, de 80

vatios-hora, aguantó tres

horas y media en nuestra

prueba de tecleo. Con una

batería opcional en la unidad

de DVD conseguiríamos otras

dos horas extra.

Teclado EjemplarEl equipo de Dell brilla

realmente en el apartado de

teclado y ratón. El teclado no

sólo tiene un bloque de

cursores separado, sino que

tiene teclas de

desplazamiento encima de las

teclas numéricas, como el esquema

habitual en un PC. Los usuarios

acostumbrados a teclados normales de

PC deberían poder adaptarse al teclado

de Dell sin problemas. Dell monta tanto

touchpad como trackpoint como

sustitutos del ratón, lo que debería dejar

contentos a ambos frentes.

El modelo Latitude presenta algunos

pequeños defectos en su uso como

portátil. Las rejillas de ventilación para la

CPU y la tarjeta gráfica están

fundamentalmente debajo del equipo, y

por tanto podemos taparlas si tenemos el

ordenador en nuestro regazo o si lo

ponermos sobre una superficie blanda.

La interfaz para la base de docking con

sus señales y voltajes está totalmente

desprotegida en la parte inferior del

equipo. Al menos el Samsung X50 tiene

dos pinzas para evitar que cuerpos

extraños como clips o grapas provoquen

un cortocircuito en el bus PCI o causen

cualquier otro daño. Y por último, las

inusuales posiciones de los topes hacen

que sea difícil colocar el portátil sobre

superficies irregulares.

Unidad DVDEquivocadaDe acuerdo con la orden de

compra, el Dell Latitude D180

debía tener una grabadora de

DVD para discos +R y -R. En

realidad, Dell nos proporcionó

una unidad combo DVD-

ROM/CD-RW, que

normalmente no está

disponible con este modelo.

No tuvimos manera de saber

si la unidad era capaz de

grabar DVDs de doble capa, o

si soporta DVD-RAM.

31

Portátiles con Linux • EVALUACIÓN

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

Desafortunadamente, Dell usa dos

módulos DIMM de 512MB, (al igual que

Samsung). Sin embargo, mientras que se

puede acceder a ambos slots para RAM

desde unas cubiertas bajo el Samsung

X50, sólo podemos acceder a uno de los

módulos en el Latitude. Obviamente, esto

reduce la capacidad de memoria máxima

del portátil Dell a 1536 MB en lugar de

los 2048 MB que anuncia el fabricante.

WLAN y BluetoothEl Latitude D180 usa una combinación de

[Fn]+[F2] para habilitar las interfaces

inalámbricas WLAN y Bluetooth. Sin

embargo, el estado de los LEDs encima del

teclado no siempre muestran una

indicación veraz del modo en uso. Por

ejemplo, el LED Wifi se mantiene

encendido incluso si hemos deshabilitado

las funciones inalámbricas. En nuestro

laboratorio, encontramos que sólo el LED

del Bluetooth era fiable. Ambas

conexiones WLAN y Bluetooth

funcionaban cuando estaba encendido, y

no funcionaban si estaba apagado, aunque

el LED del Wifi estuviese encendido. No

hubo manera de habilitar el Bluetooth y

WLAN de manera independiente, un gran

inconveniente en comparación con el Acer

Travelmate. Al menos la BIOS nos permite

seleccionar si habilitamos la interfaz

inalámbrica al arrancar.

No fue fácil conseguir soporte para

aceleración 3D por hardware con el chipset

ATI Radeon X600, ya que el driver binario

no estaba disponible en el momento de

escribir este artículo. El modo de

suspensión a RAM funcionó tras la

instalación, aunque no era estable al

100%: el portátil falló al despertar en un

par de ocasiones.

Figura 1: EL Acer Travelmate 4652LMi no es sólo el más

barato de la comparativa, sino que tiene el mejor

rendimiento de batería, lo que lo convierte en el ganador.

Figura 2: El Dell Latitude D180 tiene una pantalla de 15,4

pulgadas de alta definición, con una resolución de 1680 x

1050 píxeles. Sin embargo, el puerto para la docking station

situado en la parte inferior del portátil es susceptible de sufrir

daños.

El Samsung X50 tiene buen

soporte bajo Linux: Suse Linux

10.0 detectó todos los

componentes, con la excepción

del lector de tarjetas Flash y el

escáner de huellas digitales. De

nuevo, las cuatro teclas extra

situadas encima del teclado no

generan códigos de escaneo y

quedan sin usar. La gestión de

consumo resultó también algo

fallona: el portátil no se

despertaba tras habilitar la

suspensión a RAM.

Suse 10.0 detectó la tarjeta

gráfica correctamente, y

aunque soportó la visualización en

1680x1050 píxeles, la aceleración 3D y el

modo dual-head no funcionaron. Para

habilitar estas funcionalidades, debemos

descargar el driver ATI desde [1] e

instalarlo de forma manual.

La configuración del driver en Sax es

complicada. Podemos configurar la

resolución a 1680x1050 y el tamaño a 15,4

pulgadas, pero en este caso, tendremos

que reiniciar. Esto es aplicable igualmente

al modo dual-head.

Linux a BordoEl software multimedia AV Station

preinstalado es otra de las características

especiales del Samsung X50. De hecho, el

AV Station no es sino una mini-

distribución Linux que se puede ejecutar a

través de los botones extra situados

encima del teclado, cuando el portátil está

apagado. El portátil tarda unos 20

segundos en arrancar, y aparece la AV

Station con una cuidada interfaz gráfica

de usuario desde la que podemos

visualizar imágenes, oír música y ver

películas.

La distribución multimedia Linux está

oculta en una partición invisible de 16MB.

Incluso la herramienta fdisk de Suse Linux

10.0 respeta la marca de ocultación y no

muestra la partición. Sin embargo, fdisk

de Busybox, que se usa en muchos CDs de

rescate, revela esta segunda partición.

El sistema de rescate fue incapaz de leer

la partición oculta, ya que la BIOS impide

el acceso. En otras palabras, no hay

peligro de borrar el sistema multimedia

cuando instalamos Linux.

Los primeros resultados sugieren que

Samsung usa el Kernel 2.4.21 para su

mini-Linux y libdvdcss para reproducir

DVD con protección anticopia. Samsung

ofrece el código fuente de estos paquetes

en [2] para cumplir con la GPL, y esto

hace de Samsung el primer fabricante que

ofrece oficialmente el polémico paquete

libdvdcss.

ConclusionesLa Tabla 1 proporciona una comparación

de los portátiles que hemos puesto a

prueba. Con el menor precio, un buen

conjunto de hardware, el mejor

rendimiento de la batería y un buen

soporte para Linux, el Acer Travelmate

4652LMi se corona como vencedor de la

prueba, demostrando que un buen portátil

no tiene por qué ser caro.

El Samsung X50 WMV 2130 ocupa la

segunda plaza: aunque tiene una pantalla

mayor y una CPU más rápida que el

ganador, así como un disco duro SATA,

cuesta más del doble. Recomendamos el

Samsung X50 para guerreros de la

carretera, debido a su delgado diseño y

bajo peso, aunque seguramente

necesitemos la batería con más capacidad.

Un excelente soporte para Linux, una

gran pantalla y un buen rendimiento de la

batería caracterizan al Dell Latitude. Sin

embargo, el equipo de Dell es más lento y

pesado que el Samsung X50. Esta es la

razón por la que el Dell Latitude D180

queda en tercer lugar en esta prueba,

perdiendo la segunda frente al Samsung

X50 por un estrecho margen. �

Samsung X50 WMV 2130El Samsung X50 es el más caro de los

candidatos, pero es también el único de

ellos que presenta una carcasa de

magnesio de primera categoría. No sólo

mejora la estabilidad: también lo hace

mucho más ligero. De hecho el X50 pesa

cerca de medio kilo menos que el Acer.

El X50 está bien equipado. La pantalla

alcanza unos fantásticos 1680x1050

píxeles, y el Pentium Mobile 2.13 GHz fue

el más rápido en las pruebas de CPU. Así

mismo, el X50 es el único portátil del test

que incorpora disco duro SATA.

Sólo hay tres cosas criticables: el

conector VGA para monitores externos no

es precisamente tecnología de

vanguardia. Un puerto combinado DVI

con señal analógica o dos puertos para

pantallas, como en el Acer, habrían sido

más útiles, especialmente si

consideramos que el Samsung X50

soporta dual-head con imágenes distintas

en pantallas TFT externas. También

encontramos grandes dificultades para

añadir una ampliación de memoria, ya

que el Samsung usa dos DIMM de 512

MB, en lugar de un módulo de 1 GB, y

esto bloquea ambos slots RAM. También

resulta imposible sacar la unidad de DVD:

algunas líneas aéreas no le dejarán usar el

portátil en vuelo. Y es una pena, porque

el X50 viene con un sistema multimedia

AV Station, que reproduce videos, DVDs y

música independientemente del sistema

operativo que tengamos instalado.

Pobre Rendimiento de laBateríaLa batería estándar con capacidad de 50

vatios-hora mantienen al portátil con vida

durante dos horas y media. El hecho de

que el modelo de Samsung no tenga una

unidad de DVD extraíble, contrariamente

al Travelmate, significa que no podemos

instalar una segunda batería. Samsung

ofrece una batería de mayor capacidad,

de 80 vatios-hora, aunque la batería

sobresale de la parte trasera del portátil, y

no nos dará más de cuatro horas de

autonomía.

La distribución del teclado es correcta,

pero el touchpad es algo pequeño. Tiene

una altura de 1,5 pulgadas, que es un

tercio de pulgada más pequeño que otros

touchpads, aproximadamente. También

tenemos que restar otro tercio de pulgada

de la zona de desplazamiento, en el

lateral.

EVALUACIÓN • Portátiles con Linux

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

[1] ATI 3D HOWTO para Suse Linux:

http://www.suse.de/~sndirsch/

ati-installer-HOWTO.html

[2] Fuentes del Kernel y libdvdcss para el

AV Station de Samsung: http://www.

samsungpc.com/top_faq/

58_faqanswer_%20avsnow_info.htm

RECURSOS

Figura 3: El Samsung X50 tiene un brillante y enorme

pantalla de 1680 x 1050 píxeles, que probablemente

afecta significativamente al rendimiento de la batería

Portátiles con Linux • EVALUACIÓN

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

Fabricante Acer Dell Samsung

Modelo: Travelmate 4652LMi Latitude D810 Advanced X50 WVM 2130

CPU: Pentium-M 740, (1,73 GHz) Pentium-M 750, (1,86 GHz) Pentium-M 770, (2,13 GHz)

Chip set: Intel 915GM Intel 915PM Intel 915PM

RAM (max.): 512 MByte (2048 MByte) 1024 MByte (1536 MByte) 1024 MByte (2048 MByte)

Display

Tamaño (tipo): 15’‘(TFT) 15,4’‘(TFT) 15,4’‘(TFT)

Resolución: 1400 x 1050 Píxeles 1680 x 1050 Píxeles 1680 x 1050 Píxeles

Brillo ajustable: Sí Sí Sí

Tarjeta gráfica: Intel 915GM ATI Radeon X600 ATI Radeon X700

RAM de video: 128 MByte (compartida) 128 MByte 128 MByte

3D | Dual-Head | externo: Sí | No | VGA, DVI Sí | Sí | VGA Sí | Sí | VGA

Unidades

Disco Duro: 80 GByte, PATA 80 GByte, PATA 80 GByte, SATA

Unidad CD/ DVD: DVD±R/RW/RAM DL DVD-ROM/CD-RW DVD±R/RW/RAM

Interfaces de Red

Ethernet: Sí Sí Sí

Chip | driver: Broadcom BCM5788|tg3 Broadcom BCM5751|tg3 Broadcom BCM5788|tg3

WLAN: IEEE 802.11b/g IEEE 802.11b/g IEEE 802.11a/b/g

Deshabilitar: Sí Sí Sí

Chip | driver: Intel 2200BG|ipw2200 Intel 2200BG|ipw2200 Intel 2915ABG|ipw2200

Bluetooth: Sí Sí Sí

Módem: Sí Sí Sí

Soporte Linux: - Sí Sí

Teclado y ratón

Calidad del diseño del teclado: 4 2 3

Teclas de Windows: 2 2 3

Cursor separado|teclas de scroll: -|- Sí|Sí Sí|-

Teclas de scroll sin [Fn]: Sí Sí Sí

Sustituto de ratón: Touchpad Touchpad, Trackpoint Touchpad

Botones|rueda de scroll: 3|Sí 2|- 2|-

Conectores

USB|Firewire|Cardbus: 4xUSB 2.0|1|1 4xUSB 2.0|no|1 3xUSB 2.0|1|1

Monitor|Sonido: VGA,DVI|auriculares, micro VGA|auriculares, micro VGA|auriculares, micro

PS/2|serie|paralelo: -|-|- -|Sí|- -|-|-

Ethernet|Módem|IR: 1xRJ-45|Sí|Sí 1xRJ-45|Sí|Sí 1xRJ-45|Sí|-

Batería y adaptador

Tipo de batería: LiIo LiIo LiIo

Capacidad: 63 Wh (14,8 V, 4300 mAh) 79 Wh (11,1 V, 7200 mAh) 53 Wh (11,1 V, 4800 mAh)

Rendimiento: 4:44 h 3:23 h 2:30 h

Tamaño|Peso: 34 x 4 x 28.5 cm | 2.9 kg 36.5 x 5 x 26 cm | 3.2 kg 36 x 3.5 x 27 cm | 2.5 kg

Precio: 1.250 Euros 1.975 Euros 2.700 Euros

Adaptador de red, Cable eléctrico,

Cable de módem, Windows XP

Pro(Recovery CD), Norton

Antivirus, Manual, Mini-Guía

Unidad floppy, cable Mini USB,

Adaptador de red, Cable eléctrico,

Cable de Módem, Windows XP Pro

(Recovery CD), Manual

Sensor de huellas, Adaptador de

red, Cable eléctrico, Windows XP

Pro (Recovery CD), Manual, Mini-

Guía

34

Volviendo a lo básico con Linux Arch

ARCOS

PRÁCTICO • Arch Linux

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

enfrascarse directamente con los ficherosde configuración (como en los viejostiempos). Pero Arch también propor-ciona algunas ventajas sobre otras dis-tribuciones simples como Slackware,incluyendo innovaciones como la cone-xión en caliente y un sistema muchomás avanzado para la gestión de paque-tes. Además, como Arch está especial-mente optimizado para el chip i686,ofrece beneficios en cuanto alrendimiento si se le compara con otrasdistribuciones pensadas para ejecutarseen un amplio rango de arquitecturas. Losfanáticos de Arch dicen que proporciona“… la estabilidad y la simplicidad deSlackware y la velocidad de Gentoo [2]”.El cuadro titulado “Comparando Arch”proporciona una muestra de cómo losdesarrolladores de Arch comparan suproducto con otras distribuciones.

Aunque parezca que una distribucióncomo Arch pueda ser más difícil deaprender para un usuario principiante, laventaja de un sistema como este radicaen que, una vez que se haya aprendido,realmente se sabrá algo sobre Linux.Este artículo ayuda a comenzar conLinux Arch y describe algunas de suscaracterísticas más interesantes.

La InstalaciónAl contrario que la mayoría de las dis-tribuciones, el programa de instalaciónde Arch está basado en texto. Si se tieneinstalado Slackware o Debian, ya seestará familiarizado con esta instalaciónbasada en texto. Arch se instalará feliz-

mente junto con cualquier otro sistemaoperativo que ya se tenga instalado pre-viamente, aunque siempre es conve-niente realizar una copia de seguridad delos datos que sean importantes. Valerealmente la pena tener acceso a otro PCpara ver, o imprimir, la documentaciónsobre la instalación [4] del sitio web deArch.

Como con la mayoría de las instala-ciones, primero habrá que particionar eldisco, que se realiza utilizando cfdisk, obien se puede dejar que Arch se instale entodo el disco si es lo que se desea. Una vezque se han creado las particiones y se hanestablecido los puntos de montaje, la si-

Últimamente la comunidad Linuxestá haciendo énfasis en las dis-tribuciones con escritorios que

facilitan su instalación y la configuracióndel sistema sin aventurarse más allá dela GUI. A pesar del éxito de estos sis-temas amigables para los usuarios nove-les, un segmento significativo de lacomunidad Linux prefiere una soluciónmucho más simple. Estos usuariosdesean claridad, estabilidad, Línea deComandos y velocidad sin importarles laproliferación de herramientas redun-dantes y asistentes que les ayuden en latarea de configurar el sistema que hanhecho recientemente tan populares lasdistribuciones basadas en GUI. En elpasado, los usuarios de Linux que noquerían florituras cambiaban a distribu-ciones como Slackware, Gentoo oDebian, pero otra distribución sencillaestá ganando adeptos entre los usuariosde Linux: Linux Arch.

El comienzo de Linux Arch [1] se sitúaen el año 2001 cuando Judd Vinet nologró encontrar ninguna distribución quese ajustase a sus necesidades. Las ideaspara Arch fueron tomadas de Debian,Gentoo y Slackware, y poco a poco hanido evolucionando hasta convertirse enuna distribución estable, potente y sim-ple con toda una comunidad de usuariosy desarrolladores.

Arch proporciona pocas herramientasde configuración y no está diseñado paralos usuarios noveles de Linux. Sufilosofía es mantener a los usuarios cercadel sistema subyacente. Éstos esperan

Si se busca un sistema estable y rápido sin las

capacidades de una GUI, entonces hay que probar

Arch Linux. POR JON KENT

Figura 1: Arch espera que el usuario lo

configure tal y como se hacía antes: por

medio de los ficheros de configuración en

formato texto.

guiente tarea es seleccionar los paquetes ainstalar. Se recomienda que en estemomento sólo se instale el paquete básicoe instalar cualquier otro paquete que seanecesario una vez que se tenga el sistemafuncionando correctamente.

Una vez que el sistema básico estéinstalado, se selecciona un kernel configu-rado para IDE o SCSI (que hará falta si setiene cualquier dispositivo SATA) oincluso se puede compilar un kernelnuevo si se desea. Sin embargo, en estemomento, es mejor seleccionar un kernelque ponerse a compilar uno, ya que esmejor tener un sistema operativo com-pleto antes de realizar un cambio funda-mental. Hay que asegurarse de que seselecciona un kernel udev, no un kerneldevfs, ya que Arch actualmente utilizaudev en vez de devfs. El último paso delproceso de instalación es configurar el sis-tema, y aquí es donde es necesario elacceso a la documentación.

Se muestra una lista de ficheros de con-figuración que tienen que ser editados.Hay comentarios útiles dentro de cadauno de estos ficheros, lo que permite teneruna idea de cómo funcionan. Estosficheros le serán familiares a los usuarios

que hayan configurado Linux sin haberhecho uso del instalador GUI. Por ejem-plo, se utilizará el fichero rc.conf para con-figurar la red, el nombre del equipo, losmódulos del kernel que se tienen que car-gar y los servicios que se han de ejecutar.Habrá que utilizar un editor de textoscomo vi o nano para editar estos ficheros.

35

Arch Linux • PRÁCTICO

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

El orden de los servicios en rc.conf esimportante, ya que se ejecutan en el ordenexacto en el que han sido introducidos. Nohay ningún tipo de comprobación dedependencias, así que si un servicio nocomienza cuando se espera, habrá quecomprobar que el orden sea correcto. Porúltimo, es aconsejable comprobar bien loscambios que se hayan realizado y asegu-rarse de que se han realizado todas lasmodificaciones necesarias, ya que el insta-lador nos permitirá continuar aunque no sehayan editado todos los ficheros.

Cuando se haya concluido con la insta-lación, se reinicia el sistema y se tendrá unsistema Arch mínimo. El siguiente paso esactualizar el sistema con ayuda de la he-rramienta pacman (comentada más ade-lante) para asegurarse que está actualizadoal día antes de añadir paquetes adicionales.Si se seleccionó udev sobre devfs, estaactualización será bastante sencilla, pero sise estaba utilizando devfs, habrá querealizar unos pasos adicionales para con-vertir devfs a udev.

El Arranque del SistemaLa filosofía principal de Arch es propor-cionar un control completo sobre la con-

Una página del sitio web de Linux Arch

compara Arch con otras distribuciones

Linux populares [3]. La comparativa, por

supuesto, es cortesía de Arch, por lo que

las otras distribuciones podrían verlo de

manera diferente, aunque el resumen

(que se muestra a continuación) propor-

ciona una muestra del contexto y las

metas de Linux Arch.

Arch vs. Gentoo

Gentoo contiene más paquetes. Arch

dispone de distribuciones binarias y de

código fuente. PKGBUILDs son más

fáciles de hacer que ebuilds. Gentoo es

más portable, ya que los paquetes se

tienen compilados para arquitecturas

específicas mientras que Arch sólo está

disponible para i686 (aunque se están

desarrollando proyectos por los usua-

rios para i586 y x64). No existen pruebas

documentadas de que Gentoo sea más

rápido que Arch.

Arch vs. Crux

Linux Arch es descendiente de Crux.

Judd resumió una vez las diferencias:

“Utilicé Crux antes de comenzar con

Arch. Arch era bastante similar a Crux.

Luego escribí pacman y makepkg para

reemplazar mis bash pseudo scripts para

realizar paquetes. (Compilé Arch como

un sistema LFS). Por lo tanto son dis-

tribuciones completamente diferentes,

pero técnicamente son casi lo mismo.

Tenemos dependencia para el soporte

(oficialmente) por ejemplo, aunque Crux

posee una comunidad que proporciona

otras características. Prt-get de CLC pro-

duce dependencias. Crux ignora muchos

problemas que también tenemos

nosotros, ya que es un paquete bastante

minimalista, básicamente lo que Per usa

y nada más”

Arch vs. Slackware

Slackware y Arch son distribuciones

simples. Ambas usan scripts de inicio al

estilo BSD. Arch proporciona un sistema

de gestión de paquetes más robusto con

pacman, que, al contrario que la he-

rramienta estándar de Slackware, per-

mite actualizaciones automáticas sim-

ples del sistema. Slackware se ve como

más conservador en su ciclo de desa-

rrollo, prefiriendo paquetes estables.

Arch está más al día en este aspecto.

Arch solamente está disponible para

i686, por otro lado Slackware se puede

ejecutar en sistemas i486. Arch es un sis-

tema muy bueno para los usuarios de

Slack que deseen una gestión de paque-

tes más robusta o paquetes más actua-

lizados.

Arch vs. Debian

Arch es más simple que Debian. Arch

posee menos paquetes. Proporciona un

soporte mejor para poder compilar

nuestros propios paquetes, algo que

Debian no proporciona. Arch es más

indulgente cuando se refiere a paquetes

“no libres”, tal como define GNU. Arch

está optimizado para i686. Los paquetes

de Arch están más actualizados que los

de Debian.

Arch vs. Distribuciones Gráficas

Las distribuciones gráficas poseen

muchas similitudes y Arch es muy dife-

rente de todas ellas. Arch está basada en

texto y está orientada a la línea de

comandos. Arch es una distribución

mucho mejor si lo que se desea es

aprender realmente Linux. Las distribu-

ciones basadas en gráficos suelen venir

con instaladores GUI (como Anaconda

de Fedora) y herramientas de configu-

ración del sistema GUI (como Yast de

Suse).

01 /etc/rc.sysinit -- se ocupa de

cargar y establecer la

configutación del sistema

02 /etc/rc.single -- fichero

script para nivel de sistema

monousuario

03 /etc/rc.multi -- fichero

script para nivel de sistema

multiusuario

04 /etc/rc.local -- fichero

script para nivel de sistema

multiusuario local

05 /etc/rc.shutdown -- fichero

script para nivel de sistema

de cierre

06 /etc/rc.d/* -- demonios

configurado para el sistema

Arch sobre Arch

Listado 1: Script deComienzo init de Arch

algunos, este es el sistema init verdadero,aunque otros prefieren la solución SystemV init usada por una gran cantidad de dis-tribuciones Linux. A pesar de ello, sepueden utilizar los scripts System V init,que se encuentran en /etc/rc.d.

Gestión de PaquetesBinariosArch proporciona la herramienta degestión de paquetes binarios pacman, quees análoga a la herramienta apt-get deDebian. Pacman utiliza los ficheros tar.gz

como formato de paquetes y mantieneuna base de datos de paquetes basada entexto.

Como con apt-get, pacman ofrece laposibilidad de instalar y eliminar paque-tes, consultas del estado de la instalaciónde un paquete, actualización de la basede datos de paquetes, etc. Pacman pro-porciona una manera sencilla de ges-tionar e instalar paquetes, tanto desde losrepositorios oficiales de Arch como desdelos repositorios del usuario.

Los repositorios del usuario, referidoscomo AUR (Arch User Repositories) sonuna característica muy útil de Arch, per-mitiendo a un usuario proporcionar unpaquete que no se encuentre disponibleen los repositorios oficiales de Arch. Unbuen ejemplo de esto es el repositoriofouiny_repo, que suministra paquetes dela versión E17 de Enlightenment.Además, se pueden crear repositorioslocales propios para cualquier paqueteque se desee controlar.

Como cualquier gestor de paquetes quese precie, pacman permite actualizar fácil-mente el sistema. Simplemente hay quesincronizar la lista de paquetes mantenidaen el sistema y si se le pide que los sin-cronice y actualice, pacman los actua-lizará a la última versión disponible. Lainstalación de los paquetes es igualmentesencilla; pacman descargará cualquierdependencia que el paquete precise.

Pacman se configura por medio de unfichero de configuración/etc/pacman.conf. En este fichero de con-figuración se especifican los repositorioscon los que se desea realizar la sin-cronización. También se puede especi-ficar que los ficheros de configuración no

se modifiquen por ninguna instalación depaquetes. Adicionalmente si se desea con-gelar un paquete en su versión actual, sepuede configurar para que mantenga unpaquete tal cual en este fichero.

NoUpgrade = U

etc/passwd etc/group U

etc/shadow etc/sudoers

HoldPkg = pacman glibc

En la sección del repositorio se definenqué repositorios se tienen que utilizar.Estos repositorios se pueden definirdirectamente o bien pueden incluirsedentro de otro fichero. Esta última opciónes útil para los repositorios oficiales, queposeen múltiples mirrors.

Gestión de Paquetes FuenteArch también proporciona una he-rramienta para la gestión de paquetesfuente ABS (Arch Build System), que escasi como emerge de Gentoo. ABS estádiseñado para empaquetar softwarenuevo que aún no esté disponible enningún sitio, modificar los paquetes exis-tentes según otros requerimientos oincluso recompilar el sistema entero uti-lizando los flags del compilador.

Cuando se usa ABS, crea un paqueteque puede ser instalado con la he-rramienta pacman. No hace falta utilizarABS para tener un sistema completa-mente funcional, pero proporciona laposibilidad de ajustar los paquetes soft-ware a nuestros deseos.

ABS utiliza los paquetes cvsup y wget,así que tienen que estar instalados pre-viamente antes de poder utilizarla :

pacman -Sy cvsup wget

Es conveniente utilizar los flags -Sycuando se instale cualquier paquete paraasegurarse de que se está instalando laúltima versión, ya que esta opción actua-liza la lista de paquetes antes de realizarcualquier instalación.

Hay que ejecutar el comando abs parasincronizar el árbol ABS con el servidorArch utilizando CVS, que se copia en/var/abs. La estructura del directorio esbastante sencilla. El nivel básico de/var/abs representa cada categoría y elsiguiente nivel contiene un directoriopara cada paquete. Cada directorio con-tiene un fichero PKGBUILD para cadapaquete.

Para instalar software desde ABS, hayque entrar en el directorio del paquete desoftware del árbol ABS y luego ejecutarel comando makepkg. El comandomakepkg espera que el fichero PKG-

BUILD se encuentre en el directorio

figuración. Como se habrá podido com-probar durante la instalación, no se con-figura nada automáticamente y no seactiva ningún servicio a menos que se leindique al sistema que lo haga. Esta solu-ción implica que se aprenderá el fun-cionamiento del programa y del propioLinux rápidamente.

Arch posee un sistema init estilo BSD,que también se usa en Slackware. Para

PRÁCTICO • Arch Linux

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

Figura 2: Aunque Arch hace énfasis en la

configuración basada en ficheros de texto,

aún se puede realizar con un escritorio como

Gnome o KDE.

01 pacman -Sy -- sincroniza

paquetes locales de la base de

datos

02 pacman -S package_name --

instala, reinstala o actualiza

un paquete

03 pacman -S extra/package_name

-- instala paquete desde un

repositorio extra

04 pacman -Su -- actualiza todos

los paquetes instalados si es

necesario

05 pacman -A /<path to

package>/package_name-version.

pkg.tar.gz -- instala un

paquete local

06 pacman -R package_name --

elimina un paquete

07 pacman -Rs package_name --

elimina un paquete y sus

dependencias si es seguro

hacerlo

08 pacman -Ss package -- busca un

paquete

09 pacman -Si package -- muestra

información del paquete

10 pacman -Scc -- limpia todos

los ficheros descargados de la

cache de pacman

Listado 2: Opciones deComando pacman

local. Una vez que el código fuente estécompilado, se puede instalar el nuevosoftware con pacman de la siguientemanera:

Instalación de un paquete nuevo:

pacman -A U

[nombre_paquete].pkg.tar.gz

Actualización de un paquete

existente:

pacman -U U

[nombre_paquete].pkg.tar.gz

Además de estos directorios, hay undirectorio llamado local en /var/abs. Estedirectorio es para crear nuestros propiospaquetes, en vez de modificar losficheros PKGBUILD que se hayan sin-cronizado. Si el fichero PKGBUILD noposee los parámetros que se desean, hayque crear un directorio en local, se copiael fichero a este directorio, se añaden oeliminan los parámetros y a conti-nuación se ejecuta el comando makepkg

para compilar e instalar el software.Para controlar qué optimizaciones de

gcc se van a utilizar, makepkg tiene unfichero de configuración llamado/etc/makepkg.conf. Si se ha usado Gen-too, las opciones de este fichero no serándesconocidas. Por defecto, Arch usa losflags siguientes de gcc: -march=i686 -O2

-pipe, pero si se desea saborear el peli-gro, se puede cambiar a -O3. Como Archestá firmemente basado en i686, no tienemucho sentido cambiar la opción -march

a menos que uno se sienta muy aven-turero.

hwdPor defecto, Arch usa los scripts dedetección de hardware hotplug que seusan en la mayoría de las distribucionesLinux. Este sistema simplifica la configu-ración modular, la autodetección delhardware y la carga de los módulosnecesarios. Sin embargo los desarro-

lladores de Arch sintieron que este sis-tema era demasiado lento y crearon supropia solución, que llamaron hwd. Alcontrario que hotplug, hwd ejecuta mod-probe en un proceso hijo, de modo queno tiene que esperar a que modprobecargue cada módulo antes de que puedacontinuar.

Hwd es tanto para los sistemas de dis-positivos devfs como para los udev.Como hwd no es una utilidad de confi-guración, no modifica los ficheros deconfiguración, lo que iría en contra de lafilosofía de Arch. En vez de ello hwddetecta el hardware y proporciona infor-mación de cómo configurarlo manual-mente.

No hay que instalar hwd si se está con-tento con hotplug: como ocurre con todoen Arch, el uso de hwd es opcional. Siraramente se reinicia el sistema o si sepuede vivir con un ligero retraso duranteel proceso de arranque, no hay razón porla que cambiar hotplug.

La instalación de hwd es sencilla:

pacman -Sy hwd lshwd

Incluso ahora que está instalado hwd,hay que configurar aún el servicio hwdpara que se ejecute durante el proceso dearranque y deshabilite hotplug.

Como cabría esperar, esta opción estácontrolada por el fichero rc.conf y sim-plemente hay que añadir la siguientelínea al fichero:

!hotplug hwd

El signo de admiración delante de hot-plug deshabilita el servicio hotplug. Elsiguiente paso consiste en descargar lasúltimas tablas pci/pcmcia, que hwd uti-liza para identificar el hardware, ejecu-tando:

hwd -u

Ahora, cuando se reinicie el sistema, seejecutará hwd en vez de hotplug.

Además de la detección de hardware,hwd y lshwd pueden usarse para estable-cer un fichero de configuración X inicialo para ayudar a configurar las X.

hwd -x

Este comando creará un fichero de con-figuración de ejemplo X.org en /etc/X11,

que se puede utilizar para crear elfichero de configuración final de las X.

El EscritorioArch usa X.org como servidor X y poseepaquetes para la mayoría de los escrito-rios. Para cada escritorio se encontraránla mayoría de las aplicaciones, incluidaslas no libres como Flash y Acrobat.

Algunas aplicaciones se añaden ellasmismas al menú del escritorio, mientrasque otras requerirán que se haga ma-nualmente. Parece que no existe un están-dar para Arch en esta área, lo que puederesultar algo molesto. Sin embargo, lavelocidad a la que GNOME o E17 se eje-cutan es bastante impresionante y estopuede deberse en parte a que el estándarde base de Arch se centra en i686.

ConclusionesLinux Arch es una distribución rápida yligera que proporciona una solución sen-cilla, siendo la mejor de su categoría.Incluso si se posee poca experiencia enLinux, se debería ser capaz de instalarloy ejecutarlo, además de que losconocimientos que se obtendrán tras-teando con Arch ayudarán a aumentarnuestra comprensión sobre Linux. �

Arch Linux • PRÁCTICO

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

Figura 3: hwd detecta el hardware y muestra

información del sistema.

01 [repository-name]

02 Server = ftp://server.net/repo

03 [current]

04 # Añada sus servidores

preferidos aqui, se utilizarán

primero

05 Include =

/etc/pacman.d/current

Listado 3: Entradas en /etc/pacman.conf

[1] Sitio principal de Arch Linux: http://

www.archlinux.org

[2] http://michael-and-mary.net/intro/

node/260/ 380

[3] Arch contra Otros: http://wiki.

archlinux.org/index.php/

Arch_vs_Others

[4] Guía de Instalación de Arch: http://

archlinux.org/docs/en/guide/install/

arch-install-guide.html

[5] Foros Arch: http://bbs.archlinux.org

[6] Contribución de los usuarios Arch:

http://user-contributions.org/home/

index.php

RECURSOS

38

Crear bases de datos sencillas con Mudbag

SIN ENSUCIARSECrear bases de datos sencillas con Mudbag

SIN ENSUCIARSE

PRÁCTICO • Mudbag

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

bién es la solución ideal si no queremosgastar mucho esfuerzo en mantenernuestro propio servidor, y queremos quelos datos sean accesibles a través deInternet.

Según la página de Mudbag, su servi-dor está disponible de manera gratuitapara pequeñas bases de datos (más de 10tablas con 100K de información), y a par-tir de este límite se empieza a cobrar.(Los detalles al respecto aún no sondefinitivos, pero según la página deMudbag “los costes serán muy bajos”).

Si queremos crear una pequeña basede datos sobre la marcha, Mudbag puedeser exactamente lo que necesitamos.

Instalación de MudbagTenemos dos opciones a la hora de insta-lar y usar Mudbag. Si tenemos nuestropropio servidor con Apache, y tenemosinstalado también MySQL y PHP,podemos configurar nuestra propia solu-ción Mudbag. La instalación es real-mente sencilla. Se descarga la últimaversión de la aplicación desdehttp://sourceforge.net/projects/mudbag yse descomprime. Localizamos el archivosetup-missing.php, lo abrimos con nues-tro editor favorito y eliminamos elpreámbulo (las 18 primeras líneas). En lasección de acceso a la base de datos,reemplazamos los valores por defectocon la información real. Se renombra elarchivo como setup.php, y lo llevamos aldirectorio localsite. A continuación se

MySQL es una potente he-rramienta que nos permite ela-borar prácticamente cualquier

aplicación con bases de datos. Sinembargo, puede llevarnos bastante tiem-po dominar las innumerables funcionali-dades que implementa. ¿Qué pasa si sóloqueremos implementar una base dedatos sencilla para almacenar notas ydirecciones?

Para una única aplicación no vamos aperder el tiempo leyendo enormes librosacerca de la teoría de bases de datos.Afortunadamente, existe una herramien-ta que puede ayudarnos a crear bases dedatos sencillas en apenas unos minutos:Mudbag.

Mudbag es un sistema de base dedatos multiusuario, basado en Web, paraaplicaciones rápidas y sencillas.Podemos instalar Mudbag en nuestropropio servidor, o bien podemos usar elservidor oficial de Mudbag, desde www.

mudbag.com. Este servidor es una buenaherramienta para experimentar un poco,pero no es recomendable para guardarinformación crítica. Por otro lado, tam- Figura 1: Un sencillo diseño de una base de datos de recetas.

Si estás buscando una base de datos rápida y sencilla, que sea

accesible a través de navegador Web, deberías probar Mudbag.

POR DIMITRI POPOV

copia el directorio mudbag entero a laraíz de nuestro servidor de documentosy dirigimos nuestro navegador ahttp://myserver/mudbag/install.php. Elscript de instalación se ocupará delresto.

Crear la Aplicación conMudbagMudbag instala varios ejemplos debases de datos para juguetear un poco.Sin embargo, la mejor manera de apren-der las funcionalidades de Mudbag escrear directamente una sencilla base dedatos relacionada con algún aspecto denuestra vida diaria. Un ejemplo podríaser una base de datos de recetas.

En primer lugar, se debe crear unatabla para nuestra base de datos de re-cetas. Pulsamos el botón Add Table y ledamos un nombre. A continuación sellenan las tablas con los campos.Podemos empezar con el campo queguarde los nombres de los platos.Pulsamos el botón Add Fields y le damosun nombre. Seguidamente selec-cionamos Text de la lista desplegableType, marcamos la opción Required ypulsamos Save. De la misma manerapodemos añadir otros campos para eltipo de plato, ingredientes, instruccionespara cocinarlo, nivel de dificultad, etc.Cuando añadamos los campos, debemosacordarnos de asignar el tipo correcto acada campo. Por ejemplo, los camposIngredients y CookingInstructions

deberían fijarse a Memo, mientras queel campo Date debería ser del tipoDateTime. Mudbag también nos permiteañadir el tipo Choice, que podemos usarpara añadir listas desplegables a nuestrabase de datos. Podemos, por ejemplo,añadir el grado de dificultad, basado entres niveles: fácil, intermedio y difícil.Cuando terminemos de añadir campos,pulsamos el botón Back to Table. Noolvidemos que el diseño de la base dedatos no es definitivo: podemos intro-ducir cambios en cualquier momentopulsando el botón Design.

Ahora podemos alimentar la base dedatos con la información. Obviamente,se pueden añadir los registros de ma-nera manual uno a uno. Para ello, selec-cionamos la base de datos y pulsamosen botón Add Records. Sin embargo, siya tenemos recetas, pongamos por caso,un documento de hoja de cálculo deOpenOffice.org Calc, podemos importar-

las de manera senci-lla a nuestra base dedatos de recetas. Enprimer lugar, debe-mos exportar la infor-mación de la hoja decálculo a formatoCVS. Antes de expor-tarla, sin embargo,deberíamos asegu-rarnos de que laestructura de la hojade cálculo es similara la de la base dedatos (es decir, quecada columna de lahoja de cálculo tienesu campo correspon-diente en la base dedatos). Es preferibleque las columnasestén también en elmismo orden que loscampos de la base dedatos. Este trabajo previo nos evitarácomplicaciones posteriores en elmomento de importar. Sin embargo,Mudbag incluye herramientas nece-sarias para importar datos en los cam-pos adecuados, de manera que podamosexportar los datos tal cual y dejar losajustes para más tarde.

Una vez que la información se haexportado a formato CVS, nos vamos ala página principal de Mudbag y pul-samos en botón Import. Seleccionamosla ruta hasta el archivo CVS y pulsamosNext. Elegimos nuestra base de datos derecetas desde la lista Import Into, y nosaseguramos de que los camposDelimiter y Quote están fijados a comasy comillas, respectivamente. Si laprimera fila de nuestra hoja de cálculooriginal contenía cabeceras (los nom-bres de los campos, según la termi-nología de Mudbag), marcamos laopción Headings. Cuando pulsamosNext, podemos ajustar otras configura-ciones de importación, como cuántascolumnas deberían ignorarse al impor-tar. Por último, revisamos la configu-ración de importación y tenemos laopción de si queremos guardarlas parausos futuros.

Crear VistasMudbag también nos permite diseñarvistas, lo cual es útil cuando queremosver un subconjunto de registros o sólo

39

Mudbag • PRÁCTICO

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

ciertos campos ordenados de maneraadecuada según los criterios delusuario. Por ejemplo, podemos crearuna vista que contenga registros,cuando el campo del tipo de plato seadel tipo desayuno, de manera que notengamos que deambular por todos losregistros para encontrar una receta deun buen desayuno. Podemos tambiéncrear una vista que contenga sólo losnombres de los platos y los ingre-dientes: esta vista puede ser útil paracrear un lista de la compra.

Generar una vista es sencillo. En lapantalla principal de Mudbag, pul-samos en el botón Add View, selec-cionamos la tabla que queramos usar ypulsamos Continue. Le damos unnombre, y marcamos la opción si que-remos que la vista sea visible por losdemás. Usamos los botones de direc-ción para añadirle los campos desea-dos. Si queremos ordenar los registrosde la vista, podemos añadir hasta trescriterios. Finalmente, podemos especi-ficar hasta dos filtros. Si queremosusar la vista para echar un vistazorápido de todos los desayunos, sólotenemos que crear un filtro en el cualDishType sea igual a Breakfast.

Podemos refinarla aún más con unsegundo filtro. Por ejemplo, si creamosun filtro donde PretTime sea menor oigual a 15 minutos y fijamos el ope-rador lógico a AND. La vista mostrará

Figura 2: Importar la información existente a una base de datos

Mudbag es sencillo.

definidos por elusuario. Encuanto al tipoLabel, está pen-sado para crearetiquetas, locual es unabendición sitenemos nues-tros contactosen una libretade direccionesbasada enMudbag. El tipoLabel ofrecetambién unamplio rango deformatos de eti-quetas basadasen códigos

Avery, con lo que podemos crear eti-quetas listas para imprimir con unesfuerzo mínimo. Cuando ejecutamosun reporte, Mudbag genera un archivoPDF que podemos guardar e imprimir.

El tipo Email es ideal para enviarcorreos electrónicos a múltiples desti-natarios cuyas direcciones estánguardadas en una base de datosMudbag. Digamos que queremos man-tener a nuestros amigos y familia al díade los cambios en nuestra base de datosde recetas. Suponiendo que tenemos lasdirecciones de email y los contactos enla base de datos AddressBook, creamosun nuevo reporte pulsando en el botón

Add Report, elegimos el tipo de reporteEmail, seleccionamos la tablaAddressBook y ajustamos la plantilla anuestro gusto. Cuando estemos satisfe-chos con el resultado, pulsamos elbotón Send para enviar el email(podemos también usar el botón Test

Send para asegurarnos de que funcionaadecuadamente).

Administración deUsuariosMudbag incluye también funcionali-dades de administración de usuarios,que podemos usar para invitar y com-partir nuestras bases de datos conotros usuarios de Mudbag. Si la per-sona a la que queremos invitar ya estáregistrada como usuario de Mudbag, ysabemos su nombre de login, podemossimplemente añadirlo a la lista deusuarios. Cada usuario de la listapuede tener el atributo de sólo visua-lización o bien el de edición (puedemodificar los datos y las tablas). Éstano es una característica especialmentesofisticada, pero no olvidemos que elobjetivo de Mudbag es facilitar lacreación y compartición de bases dedatos a usuarios no expertos. Si la per-sona con la que queremos compartir labase de datos no es un usuario re-gistrado, podemos mandarle un emailde invitación directamente desdeMudbag.

ConclusiónPara muchos usuarios avanzados, las

instrucciones descritas en este artículopueden parecer ciertamente fáciles,

pero son la prueba de la sencillezde uso de Mudbag. Admitámoslo,

Mudbag no soporta algunas ca-racterísticas avanzadas como

tipos binarios u otros queincluye MySQL. Fue di-

señado, sin embargo,con otro propósito:permitir que usua-rios normales

puedan crear bases dedatos sencillas, pero útiles,

y que puedan compartirse conotras personas. Aunque Mudbag

no está orientado a desarrollos debases de datos serios, puede conver-

tirse en una aplicación estrella para elresto de los mortales. �

todos los desayunos con tiempo depreparación inferior a 15 minutos.

ReportesLas funcionalidades de reportes sonparte esencial de un sistema de basede datos, y Mudbag tiene algunas ca-racterísticas de reportes ciertamenteingeniosas. Mudbag nos permite crearcuatro tipos diferentes de reportes:Tabular, Record, Label y Email. El tipoTabular puede usarse para crear unasencilla lista con todos los registros osubconjuntos. Con el tipo Recordpodemos generar reportes en los quelos registros se agrupen según criterios

PRÁCTICO • Mudbag

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

Figura 3: Diseño de una vista en Mudbag.

Tiene su viejo disco duro lleno de

datos hasta los topes y está

pensando en comprar un disco duro

nuevo. Para reducir el impacto en el

presupuesto familiar decide vender el disco

duro antiguo en una de las múltiples su-

bastas que se realizan en la red.

Con el paso del tiempo, su familia entera

habrá dejado rastros personales en el disco

y, desde luego, deseará eliminar los

documentos personales, las cartas, las

notas de despidos, las aplicaciones, los

álbunes fotográficos y las credenciales de

accesos del disco. Afortunadamente, tiene

Linux, y una de sus máximas es que la

línea de comandos tiene todo lo que se

necesita por si fuera necesario.

Probablemente ya conozca cómo borrar

un fichero o un directorio. Todas las GUIs

adoptan soluciones similares: se pincha en

el fichero o el directorio para seleccionarlo

y pulsando el botón [Supr] se elimina. O

eso es lo que se piensa. Incluso si la

aplicación no manda el fichero a la

papelera, el contenido aún permanece

almacenado en alguna parte del disco en

segmentos de diversos tamaños. Los datos

antiguos no desaparecen realmente hasta

que se escriben datos nuevos y se empieza

a rellenar el disco otra vez.

Si se teclea rm en la línea de comandos

tampoco ayuda: el comando rm

simplemente elimina las entradas en los

diarios del sistema de ficheros. Sin estas

entradas, el sistema de ficheros no tiene

forma de localizar los datos, pero esto no

significa que los datos hayan desaparecido

realmente.

Sobre el Borrado de DatosEl siguiente comando borra el directorio

mis_datos/, sus directorios y cualquier

fichero que contengan sin pedir

confirmación:

rm -rv mis_datos/

Hablando estrictamente, lo que realmente

se ha hecho es eliminar la etiqueta del

nombre para todos estos ficheros y

41

Limpieza • PRÁCTICO

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

directorios. El comando simplemente ha

borrado la entrada en la Tabla de

Localización de Ficheros. Cada partición

necesita un resumen que le indica dónde

están almacenados físicamente en el disco

los ficheros y los directorios. Esta solución

Borrando Datos con Seguridad

LA LIMPIEZA

El tema de las copias de seguridad es algo común, pero rara vez se oye a alguien hablando del borrado de

datos seguro. POR MARCUS NASAREK

Listado 1: Búsqueda deSectores

01 #!/bin/bash

02 # showSector.sh

03 MAX = 1000

04 for ((i=0;i<=$MAX;i=$i+1));

05 do

06 val=`dd if=$1 skip=$i

bs=512 count=1 2>/dev/null |

hexdump -v -e '"%_p"' | fgrep

$2`

07 if [ "$val" ];

08 then

09 echo -e "Sector $i:\

n$val"

10 fi

11 done

COMO en [2] proporciona más

detalles.

Incluso formateando o particionando

de nuevo una unidad no le ayudará a

librarse de los datos no deseados.

Cuando se formatea un disco, un sistema

operativo moderno simplemente rees-

cribirá la Tabla de Localización de

Ficheros y un particionamiento tan sólo

cambiará las entradas en la tabla de

particiones del disco. Los datos

simplemente podrían estar perdidos en

algún lugar del nirvana digital, pero aún

están físicamente en el disco.

Buscando PistasNo se necesitan grandes conocimientos

para recuperar los datos borrados de un

disco. El cuadro titulado “Particiones”

explica cómo el disco duro y el sistema

operativo manejan los ficheros y los

directorios.

Si sólo se están buscando claves de

búsquedas especificas o cadenas,

como credenciales de acceso o datos

personales, probablemente lo único

que se necesita son comandos como

dd, hexdump y fgrep. Será preciso

disponer de los privilegios de root para

poder realizar la mayoría de estas

operaciones.

es compartida por todos los sistemas

operativos modernos, aunque existen

algunas diferencias en la forma en la

que almacenan y leen los datos.

Pero lo importante es que, cuando se

“borra” un fichero o directorio, el

sistema simplemente elimina la

etiqueta de la tabla, liberando de este

modo el espacio. La eliminación física

de los datos del espacio donde la

etiqueta está apuntando significaría un

esfuerzo computacional mucho mayor.

Dicho de otro modo, se tiene una

buena oportunidad de recuperar los

ficheros que se han borrado por error

si se evitan los accesos de escritura a la

partición y se empieza a buscar los

ficheros perdidos inmediatamente. Se

puede encontrar una descripción de los

pasos a seguir para recuperar los datos

borrados en una partición Ext2 usando

herramientas simples en [1]. Y el

PRÁCTICO • Limpieza

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

Listado 3: Una Soluciónmás Segura

01 #!/bin/bash

02 # Parameter $1 is the device

to be deleted

03 BLOCKSIZE=8192

04 echo -e "Device to delete:

$1\nBlock size for

write: $BLOCKSIZE"

05 echo "[`date +"%a %T"`] Round

1"

06 dd if=/dev/zero of=$1

bs=$BLOCKSIZE

07 echo "[`date +"%a %T"`] Round

2"

08 dd if=/dev/urandom of=$1

bs=$BLOCKSIZE

09 echo "[`date +"%a %T"`] Round

3"

10 dd if=/dev/zero of=$1

bs=$BLOCKSIZE

11 echo "[`date +"%a %T"`] $1

deleted"

Listado 2: ¿Creíste que lo habías borrado?

01 john@jack:~$ sudo ./showSector.sh /dev/sda1 Sesamo Sector 101:

02 Esto es un secreto. La contraseña para la caverna es "Abrete Sésamo!".

03 Pero no se lo digas a nadie!

04....................................................................

05....................................................................

06....................................................................

07....................................................................

08....................................................................

09....................................................................

Los ficheros de dispositivos especiales, /dev/random y

/dev/urandom, utilizan un controlador del kernel para generar

números pseudoaleatorios. El término “pseudo” es indicativo

de un bien conocido problema de los ordenadores. Los orde-

nadores no pueden generar números aleatorios, aunque

pueden generar más o menos valores aleatorios. Es decir,

/dev/random y /dev/urandom generan números con un sufi-

ciente grado de aleatoriedad para la mayoría de las aplica-

ciones criptográficas de un PC.

Cuando se generan secuencias de números aleatorios, el ge-

nerador de números aleatorios basado en el kernel obtiene

diversos valores internos de los dispositivos que utiliza para

obtener suficiente entropía. La entropía expresa el grado de

aleatoriedad de una secuencia de números generada en un

periodo de tiempo específico.

Las aplicaciones leen un flujo de bytes desde los ficheros

/dev/random y /dev/urandom. Al contrario que /dev/urandom,

/dev/random sólo proporciona un byte si se ha alcanzado el

suficiente grado de entropía. Si este no es el caso, el disposi-

tivo bloquea la salida hasta que se hayan acumulado sufi-

cientes datos para asegurar un buen nivel de entropía para los

valores.

Como puede tardar un rato, el modo de no bloqueo del sis-

tema de E/S permite eliminar el bloque, pero esto no mejora la

velocidad de respuesta. Los bytes proporcionados por

/dev/random proporcionan números aleatorios perfectamente

válidos para poder utilizarse en sistemas criptográficos y son

lo suficientemente seguros para ser usados en cifrados largos

y como material de alta calidad para generar claves.

/dev/urandom no garantiza el nivel de entropía que se obtiene

con el generador del kernel. Al tener una entropía más baja, no

se interrumpe el flujo de bytes. Este hecho hace que los

números sean más “pseudos” que nunca, pero hay que recor-

dar que no es siempre necesario apuntar tan alto en crip-

tografía.

De hecho, /dev/urandom está bien para obtener claves tempo-

rales, como las claves de sesión en las sesiones web, para re-

llenar el espacio en disco con ruido o para la autenticación a

corto plazo en escenarios de reto-respuesta.

¿Pura Coincidencia?

Una unidad de memoria USB es una

buena candidata para realizar

experimentos. Se puede formatear el

“disco” con varios sistemas operativos y

llenarlo con datos de pruebas. Supóngase

que el dispositivo que se desea investigar es

/dev/sda; la primera partición del dispo-

sitivo sería /dev/sda1.

Puede utilizarse el editor hexadecimal

hexdump para inspeccionar los sectores de

la partición y ayudarse de él para encontrar

los datos existentes. El siguiente comando

crea un volcado de la unidad y muestra

cualquier carácter imprimible como código

ASCII. Se puede ver el contenido de

cualquier fichero borrado, además de los

caracteres no estándar, inmediatamente.

hexdump -v -e '"%07.7_ad: " U

60/1 "%_p" "\n"' U

/dev/sda1 | less

Si este modo de vista no es de su agrado,

probablemente prefiera ejecutar Midnight

Commander en una ventana de consola y

experimentar con esta nueva vista.

Midnight Commander es un administrador

de archivos que puede también mostrar los

datos en formato hexadecimal.

Desde luego, los ficheros no tienen

necesariamente que estar almacenados en

sectores contiguos del disco; de hecho,

probablemente estén dispersos por todo el

disco; los expertos lo denominan

fragmentación. Todo depende de cómo el

sistema operativo organice el espacio de

almacenamiento para conseguir los

mejores tiempos posibles de lectura y

escritura. Pero como al menos un fichero

siempre ocupa un cluster, se tiene una

buena oportunidad de descubrir ficheros

pequeños de texto de menos de 4096 bytes.

Esta técnica no se utiliza mucho como

solución sistemática para buscar un fichero

específico. Sí se sabe que una determinada

cadena aparece en el fichero que se quiere

recuperar (por ejemplo, los ficheros LaTeX

siempre empiezan por /document); un

simple script puede ayudar a restringir la

búsqueda. Tan sólo hay que pasarle la

unidad, la cadena y el número de sectores a

buscar al script del Listado 1. Si la

búsqueda devuelve resultados, tan sólo hay

que investigar más detenidamente los

sectores en cuestión.

La ejecución del script del Listado 1

produce la salida que se muestra en el

Listado 2 cuando se busca la cadena

Sesame en el dispositivo /dev/sda1.

Hace falta el comando dd, con los

parámetros skip y count para investigar la

localización.

skip permite que el comando se salte un

número determinado de bloques. El script

proporciona un valor para el parámetro

skip.

El parámetro count devuelve la longitud

de la zona bajo investigación. Ambos

valores pueden modificarse ligeramente

para investigar la zona sospechosa. Una

combinación inteligente de estos dos

parámetros permitirá realizar una copia de

las zonas de interés. Por ejemplo, si el

sector 32 contiene una cadena interesante,

se puede utilizar el siguiente comando para

investigar los 5 sectores de alrededor de

esta localización:

dd if=/dev/sda1 skip=30 count=5U

bs=512 2>/dev/null | hexdump U

-v -e '"%_p"' | less

Este ejemplo muestra la técnica. Los

editores de disco probablemente sean la

herramienta elegida para analizar o

recuperar ficheros mayores desde los datos

del disco. Un editor de disco ayuda a

navegar a través de las grandes cantidades

de datos y realizar un volcado de los bits

interesantes.

Los servicios de recuperación de datos

profesionales utilizan técnicas de análisis

de superficie para recuperar los datos de

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

Limpieza • PRÁCTICO

El disco duro almacena los datos que maneja en sectores de 512

bytes. Los discos duros modernos usan LBA (Logical Block

Addressing, Direccionamiento de Bloques Lógicos) para numerar

los sectores en secuencia. Al mismo tiempo, el disco duro controla

y monitoriza diversos parámetros y proporciona la interfaz para

acceder a los mismos.

Los parámetros incluyen varias medidas de temperatura, pero lo

más importante es una tabla de sectores defectuosos. El disposi-

tivo etiqueta los sectores como defectuosos e impide que se

puedan acceder a ellos. Si se nota un incremento considerable de

sectores defectuosos, es probable que en un futuro cercano se

produzca un fallo total del disco.

Los sectores marcados como defectuosos no están disponibles

para el acceso normal. Los expertos pueden utilizar herramientas

especiales para poder acceder a dichos sectores, sin embargo, es

bastante improbable que contengan datos de alto secreto.

Un disco duro debe contener una partición, que agrupa cierta can-

tidad de sectores. La tabla de partición contiene la forma de las

particiones. Esta tabla está localizada en el primer sector, también

denominado MBR (Master Boot Record, Registro de Arranque

Maestro), empezando en el byte 446 y con una longitud de 64

bytes. El MBR también contiene el cargador del sistema para

poder arrancarlo.

El sistema operativo maneja los datos de la partición en una

especie de base de datos que contiene la estructura de una tabla.

Este es el caso de la FAT (File Allocation Table, Tabla de Loca-

lización de Ficheros): DOS y Windows utilizan diversas variantes

de la FAT conocidas como FAT12, FAT16 y FAT32.

Linux soporta un amplio rango de sistemas de ficheros. Son

comunes Ext2, Ext3 y ReiserFS. Los dos últimos utilizan un diario,

algo similar a una base de datos genuina, para proporcionar una

gestión extremadamente efectiva de las entradas en la misma,

ofreciendo de este modo bastantes ventajas, especialmente con

particiones grandes. Como contrapunto, esto hace mucho más

difícil la localización de los datos borrados.

El sistema de ficheros agrupa los sectores para formar clusters con

la idea de mejorar el rendimiento. Dependiendo de la elección del

sistema de ficheros, los clusters pueden ser de diversos tamaños.

Si se tiene un tamaño de cluster de cuatro KBytes, los ficheros nor-

malmente ocuparán un tamaño múltiplo de este valor y como

mínimo un único cluster. Un fichero que contenga un solo byte

ocupará por ello al menos 4096 bytes de espacio en el disco.

Particiones

aparece en el Listado 3 debería ser

suficiente. Pero hay que tener cuidado de

elegir el dispositivo adecuado si lo que

quiere es estar seguro de la eliminación

definitiva de los datos.

El script del Listado 3 primero llena el

disco con ceros, luego con valores

aleatorios y posteriormente con ceros de

nuevo. Con tres rondas, normalmente, es

suficiente. Por otro lado, el programa

tardará unas horas en borrar un disco de

80Gb.

Las normas de protección de datos

normalmente optan por siete rondas, tal

como hace el DOD de EE.UU. con el

estándar 5220.22-M. El algoritmo de Peter

Gutman, que es el más moderno de

nuestros candidatos desde el punto de vista

tecnológico, realiza 35 rondas y requiere

bastante paciencia por parte de los

usuarios. Si se comprueba el disco tras su

ejecución lo único que se podrá observar

son ceros.

Borrando FicherosIndividualesAlgo similar a la solución ofrecida en el

Listado 3 puede teóricamente aplicarse al

borrado de un único fichero del disco. Pero

este programa no es apto para el borrado

recursivo de directorios completos y

probablemente se prefiera buscar una

alternativa o mejorar el programa para que

se ajuste a las necesidades.

Son más convnientes aplicaciones como

Wipe. La mayoría de las distribuciones

incluyen la herramienta, que permite el

borrado de árboles de directorios

completos:

wipe -r directorio

Sin embargo, sólo se puede confiar en

Wipe si se deshabilita la caché de escritura

del disco duro. El programa requiere el

acceso exclusivo al disco duro en cada

ronda, como explica la página oficial del

proyecto [6].

Bajo circunstancias normales debería ser

suficiente con un kernel que soporte

bloqueos, suponiendo que se acuerde de

especificar la opción mand cuando se

monte. Si el sistema no se ajusta a estos

requerimientos o si el sistema mueve los

ficheros que se sobrescriben a una

localización diferente, programas como

Wipe no deben usarse, ya que

proporcionan una falsa sensación de

seguridad, lo que es peor.

Wipe utiliza el patrón de Peter

Gutmann para crear cadenas que

utiliza para la sobrescritura. Para ello,

accede a los ficheros especiales

/dev/urandom y /dev/random, que

proporcionan el nivel de entropía

necesario. Para acelerar el proceso,

Wipe también utiliza el generador de

números pseudo-aleatorios de Mersenne

Twister (PRNG).

ConclusionesEs interesante notar que el

departamento de defensa de EE.UU.

estipula la destrucción física de los

dispositivos de almacenamiento

magnético que contienen datos de alta

confidencialidad. Si se manejan datos

sensibles, siempre se debería tener en

cuenta que no existe el software

perfecto. Como punto a destacar, las

herramientas Linux deberían

proporcionar a la mayoría de los

usuarios más seguridad de la que

realmente necesitan. �

zonas del disco que han sido reescritas.

Estas técnicas de análisis de superficie se

basan en el hecho de que la cabeza

escritora no abarca toda la pista antigua,

dejando datos residuales a los lados de la

misma.

Borrado SeguroA la luz de todo esto, probablemente se

prefiera utilizar un método estándar de

borrado para borrar los datos y eliminar

cualquier posibilidad de recuperación de

los mismos. Las siguientes soluciones

son probablemente las más

conocidas:

• Guía BSI para

salvaguardar los

documentos

clasificados en los

sistemas de

procesamientos de

datos (VSITR), Informe

Nº 11, [BMI]

• El estándar 5220.22-M del

departamento de defensa de los

EE.UU., [DOD]

• El algoritmo de Bruce Schneier, [BSA]

• El algoritmo de Peter Gutmann, [PGA]

Los algoritmos anteriormente mencionados

sobreescriben los sectores múltiples veces

con patrones específicos de datos. Los

patrones comprenden los bytes 0x00, 0xFF

y valores aleatorios. Con la idea de generar

datos genuinamente aleatorios y hacer que

sea imposible substraer estos datos de la

señal leída, la mayoría de las soluciones

usan la generación de números aleatorios.

Linux proporciona a los usuarios un alto

nivel de seguridad basándose en ficheros

de dispositivos especiales como

/dev/urandom, que crea datos aleatorios

simples. /dev/zero proporciona cualquier

cantidad de bytes con valor cero (0x00).

Con una combinación de ambos se

obtienen todas las herramientas que se

necesitan.

El cuadro titulado “¿Pura Coincidencia?”

proporciona información sobre la calidad

de los dos generadores de números

aleatorios: /dev/random y /dev/urandom.

Solamente /dev/urandom es capaz de

proporcionar la cantidad de números

aleatorios necesaria para algo tan grande

como un disco duro.

Los dos ficheros, /dev/zero y

/dev/urandom, pueden usarse

conjuntamente con una de las soluciones

mencionadas anteriormente. Para uso

doméstico, con la ejecución del script que

PRÁCTICO • Limpieza

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

RECURSOS

[1] Recuperando datos borrados en

Linux: http://wiki.yak.net/592

[2] Recuperando datos en un sistema de

ficheros Ext2: http://www.faqs.org/

docs/Linux-mini/Ext2fs-Undeletion.

html

[3] Guía para el manejo de datos confi-

denciales en las oficinas USA: http://

www.dss.mil/isec/nispom_0195.htm

[4] Página web de Bruce Schneier: http://

www.schneier.com

[5] Página web de Peter Gutmann: http://

www.cs.auckland.ac.nz/~pgut001

[6] Wipe: http:// wipe.sourceforge.net

Si un script de backup se inicia a

las 10 PM y termina a las 4 AM,

¿cuánto tiempo le ha llevado

ejecutarse? ¿Seis horas? Bueno… pues

depende. Imaginemos que el proceso se

ejecutó entre el 26 y 27 de marzo de

2005 en algún lugar de Gran Bretaña.

Los relojes se adelantaron una hora a la

1 AM, con lo cual la respuesta correcta

es cinco horas. Pero si el mismo

proceso se ejecutó al mismo tiempo en

Estados Unidos, la respuesta correcta

sería seis horas, ya que el horario de

verano comienza una semana más

tarde en este país. Salvo en el estado de

Indiana, que no había introducido aún

el horario de verano en 2005. De hecho,

2006 es el primer año en el que lo

ponen en marcha (véase [2]).

Afortunadamente, el módulo DateTime

[5] de CPAN conoce todas estas reglas

históricas y futuras, y proporciona una

interfaz sencilla para lidiar con los

cálculos de fechas más complicados.

¿Y si quisiésemos saber desde

cuándo se han estado usando las reglas

de calendario actuales en Gran

Bretaña? El Listado 1 (dsthist) lo

muestra echando la vista atrás desde el

año 2006 y comprobando el mes de

marzo para encontrar un día en el cual

acabásemos a las 5 AM al añadir tres

horas y un segundo a las 00:59:59. Si

ocurre esto, se estaba usando el

calendario de verano en ese año, y el

script para en el momento en que

detecta que no es el caso. El listado

muestra que 1972 fue el primer año con

las reglas de calendario de verano

actuales:

...

1974: DST

1973: DST

1972: DST

1971: No DST

Verano en la CityEuropa parece tener unas reglas de

calendario de verano bastante

uniformes, aunque no ocurre lo mismo

en el continente americano. Esto no sólo

se aplica a los diferentes países: incluso

en los mismos estados de Estados

Unidos se planifican por su cuenta, e

incluso existen algunos condados en los

que no se rigen por las mismas normas

que el estado en el que se encuentran.

Para terminar de complicar las cosas, las

reglas han cambiado con el paso del

tiempo.

El Listado 2 (dstchk) usa all-names

para averiguar todas las franjas horarias

con el módulo DateTime::TimeZone

(también disponible desde CPAN). Se

sitúa en el primero de enero en la zona

horaria que está investigando y le añade

seis meses. Si esto devuelve una fecha

con un valor horario distinto de cero,

Perl • DESARROLLO

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

Exploramos el módulo DateTime de Perl

CUENTA ATRÁSExploramos el módulo DateTime de Perl

CUENTA ATRÁS

Debido a que las reglas del calendario están influenciadas por deci-

siones históricas y políticas, la manipulación de fechas está plagada

de trampas. El módulo DateTime de Perl se sabe todos los trucos.

POR MICHAEL SCHILLI

ciudad es Louisville. (Aunque

Frankfort es la capital de Kentucky, no

es la ciudad más grande del estado).

Para reflejar el hecho de que el

condado de Monticello en Kentucky

pertenecía (hasta el año 2000) a una

franja horaria diferente a la que

pertence en estos momentos,

DateTime::TimeZone tiene un registro

para America/Kentucky/Monticello. La

Figura 1 muestra el resultado de

ejecutar dstchk, mostrando las franjas

horarias con aprovechamiento de luz

solar en verde usando

Term::ANSIColor.

DateTime puede manipular

información de cualquier franja horaria

que queramos, incluido fechas del

pasado y las franjas horarias que han

sufrido cambios. La isla de Lord Howe,

próxima a la costa australiana, tiene

unas reglas de horario de verano un

tanto peculiares: atrasan o adelantan el

reloj justo media hora. El Listado 3

(lord_howe) muestra que si añadimos

un segundo a 2005-10-30 01:59:59

devuelve una hora local de 2:30:00.

A un objeto DateTime creado por el

constructor new se le asigna una zona

horaria floating en primera instancia,

si el parámetro time_zone no especifica

la zona horaria de manera explícita. En

este punto, la zona horaria se adapta

se entiende que existe algún tipo de

ajuste horario en los primeros seis

meses del año, y que por lo tanto, esta

zona horaria ha debido pasar a

calendario de verano durante este

periodo.

Las zonas se guardan en formato

“Continent/City”, por ejemplo

Europe/London (para Gran Bretaña),

Europe/Dublin (para Irlanda),

America/New_York (para el estado de

Nueva York en Estados Unidos,

America/Vancouver (el estado

canadiense de British Columbia), y

Pacific/Honolulu (para Hawaii). Pero si

una región se ha desviado de las reglas

del estado en algún momento del

pasado, se hace necesaria una

subdivisión adicional. Por ejemplo,

America/Kentucky/Louisville designa

los estados de Kentucky, cuya principal

DESARROLLO • Perl

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

01 #!/usr/bin/perl -w

02 use strict;

03 use DateTime;

04

05 YEAR:

06 for my $year (

07 reverse 1964 .. 2006) {

08

09 for my $day (1 .. 31) {

10

11 my $dt = DateTime->new(

12 year => $year,

13 month => 3,

14 day => $day,

15 hour => 0,

16 minute => 59,

17 second => 59,

18 time_zone =>

19 "Europe/London",

20 );

21

22 $dt->add(

23 hours => 3,

24 seconds => 1

25 );

26

27 if ($dt->hour() == 5) {

28 print "$year: DST\n";

29 next YEAR;

30 }

31 }

32 print "$year: No DST\n";

33 last;

34 }

Listado 1: dsthist

01 #!/usr/bin/perl -w

02 use strict;

03 use DateTime;

04 use Term::ANSIColor

05 qw(:constants);

06

07 for my $zone

(DateTime::TimeZone::all_names

()) {

08

09 my $from =

10 DateTime->now(

11 time_zone => $zone);

12

13 $from->truncate(

14 to => "year");

15 my $to =

16 $from->clone()

17 ->add(months => 6);

18

19 print "$zone: ";

20

21 if ($to->hour() == 0) {

22 print RED, "no", RESET,

23 "\n";

24 } else {

25 print GREEN, "yes", RESET,

26 "\n";

27 }

28 }

Listado 2: dstchkFigura 1: ¿Alguna vez has querido saber qué

zonas del continente americano usan hora-

rios de aprovechamiento de luz en verano?

temporalmente para coincidir con otros

objetos DateTime cuando se llevan a

cabo cálculos o comparaciones con

estos.

Si queremos ignorar los cambios en

horarios debidos a horarios de verano

en nuestros cálculos, podemos bien

usar la zona “floating”, o bien

podemos elegir la zona horaria libre de

horarios de verano UTC (Universal

Time Coordinated). Al configurar

time_zone => "local" en un objeto

DateTime, para fijar la hora a la zona

donde esté ubicado nuestro ordenador,

forzamos a DateTime a que pruebe

todos los trucos posibles para

averiguar la configuración de nuestra

zona horaria:

my $dt = DateTime->now(

time_zone => "local");

print $dt->time_zone()->name();

Esto devuelve America/Los_Angeles en

una máquina ubicada en nuestro

laboratorio de Perlmeister en San

Francisco. No está nada mal.

Arrastre Rotacional¿Cuántos segundos pasaron entre las

00:59:00 y las 01:00:00 del 1 de enero

de 1999? ¿Un minuto, es decir, 60

segundos? ¡Mal! Pista: justo en este

instante, la zona horaria estándar,

UTC, que es idéntica a la zona horaria

Greenwich, añade un segundo extra, lo

que da como resultado ¡un minuto de

61 segundos!

Como podemos leer en [3], ya no se

define un segundo como una fracción

de un día. Desde 1967 se define en

función de la mucho más constante

resonancia del átomo de Cesio 133. La

velocidad de rotación de la Tierra ha

ido decreciendo lentamente en los

últimos 40 años. Como la Tierra tarda

ahora un poco más que 24 veces 3600

segundos atómicos en completar una

rotación, se ha estado añadiendo un

segundo adicional a la hora oficial

desde 1972, cada 1,5 años de media. El

30 de junio y el 31 de diciembre son las

fechas de referencia. Si la hora oficial

tiene un desfase de un segundo

aproximadamente, se añade ese

segundo al final de esas fechas. Dicho

esto, la Tierra parece que ha

recuperado algo de velocidad: 2005 ha

sido el primer año desde 1998 que

necesitó un segundo extra. Si la Tierra

empezase a rotar a mayor velocidad, a

la hora oficial simplemente se le

restaría un segundo adicional. Sin

embargo, esto no ha pasado en la

reciente historia de los “segundos

adicionales”.

El Listado 4 (leapsec) comienza en el

año 1960 y continúa gradualmente

hasta el año 2005, buscando segundos

adicionales a 30 de junio o 31

diciembre. Para ello, fija la hora en la

zona horaria UTC a 23:59:00, le añade

60 segundos y verifica si ha devuelto

un valor inusual en el segmento de los

segundos. En este caso, el minuto en

cuestión tuvo 61 segundos y hemos

descubierto un segundo “extra”. Tras

completar la búsqueda, la zona horaria

se fija a “Europe/London” llamando a

la función set_time_zone(). Con print

mostramos la hora local y el número de

Perl • DESARROLLO

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

01 #!/usr/bin/perl -w

02 use strict;

03 use DateTime;

04

05 my $dt = DateTime->new(

06 year => 2005,

07 month => 10,

08 day => 30,

09 hour => 1,

10 minute => 59,

11 second => 59,

12 time_zone =>

13 'Australia/Lord_Howe',

14 );

15

16 $dt->add(

17 DateTime::Duration->new(

18 seconds => 1

19 )

20 );

21

22 # 2005-10-30 02:30:00

23 print $dt->date(), " ",

24 $dt->hms(), "\n";

Listado 3: lord_howe

01 #!/usr/bin/perl -w

02 ##############################

03 # leapsec - Imprime años con

segundos bisiestos

04 # Mike Schilli, 2005

([email protected])

05 ##############################

06 use strict;

07 use DateTime;

08

09 my $secs;

10

11 for my $year (1960..2005) {

12 for my $date ([30,6],[31,12])

{

13 my $now = DateTime->new(

14 year => $year,

15 month => $date->[1],

16 day => $date->[0],

17 hour => 23,

18 minute => 59,

19 second => 0,

20 time_zone => "UTC");

21

22 my $later =$now->clone()->add(

23 seconds => 60);

24

25 $later->set_time_zone

("Europe/London");

26

27 if($later->second() == 60) {

28 print $later->dmy(), "",

29 $later->hms(), ":",

30 ++$secs, "\n";

31 }

32 }

33 }

Listado 4: leapsec

Figura 2: Segundos adicionales desde 1960

hasta hoy.

corregir los resultados si hubo un

segundo adicional entre las dos fechas.

Para más información de este confuso

método, véanse [6] y [7].

DateTime proporciona el método

from_epoch(epoch =>$time), que

construye un objeto DateTime a partir

de un contador Unix. El método

epoch() del objeto DateTime hace lo

contrario, devuelve un valor de

contador.

El Listado 5 (leapreveal) muestra lo

que pasa si simplemente añadimos el

número de segundos de 5.000 días a la

fecha del 1.1.1990: el resultado de este

cálculo es 2003-09-09T23:59:53. En

otras palabras, la respuesta revela que

hay siete segundos perdidos al final de

ese día, ¡debido a los segundos

adicionales entre esas dos fechas! Por

otro lado, si usamos add(days =>

5000) para añadir 5.000 días,

obtenemos como resultado

2003-09-10T00:00:00. DateTime separa

de manera estricta el manejo de

unidades de tiempo como días y

segundos y no convierte normalmente

un valor de tiempo como “5.000 días” a

segundos. Pero si queremos convertir

días a segundos, aunque tengamos que

pasar por la siguiente abstracción llena

de baches, podemos usar el método

$to->subtract_datetime_absolute($fro

m) para restar el objeto DateTime

$from al objeto $to para obtener un

objeto DateTime::Duration. Y este

método seconds() da por fin el número

exacto de segundos transcurridos

durante ese periodo.

SupermanLa línea de cambio de fecha es otra

curiosidad. Si volamos hacia el Este, a

medida que atravesamos las zonas

horarias, se va haciendo cada vez más

tarde. En un momento dado, la fecha

cambia al día anterior. Si no fuese así,

seríamos capaces de viajar al futuro en

un avión suficientemente rápido. La

línea de cambio de

fecha ([4]) cruza el

Pacífico de Norte a

Sur, un poco más al

Este de las islas que

se agrupan en las

cosas del Sudeste de

Asia.

El Listado 6

(daytrip) muestra lo

que pasa si tomamos un veloz avión

desde Japón (al Oeste de la línea de

cambio de fecha) hasta Hawaii (al Este

de la línea de cambio de fecha). Estos

son los detalles del vuelo:

Departure: Sunday, U

January 29 2006, 07:30

Arrival: Saturday, U

January 28 2006, 19:00

En otras palabras, salimos un domingo

por la mañana y llegamos un día antes,

aunque el vuelo ha durado seis horas y

media. El sábado por la noche se juega

la lotería, la pena es que sólo funcione

para la hora local…

Hablando IdiomasEl Listado 6 (daytrip) muestra también

cómo maneja DateTime los diferentes

segundos adicionales encontrados

hasta el momento.

La Figura 2 muestra el resultado. Las

diferentes horas a día 1 de julio son

debidas a los cambios realizados a lo

largo del tiempo para aprovechar la luz

solar.

Abstracción llena de bachesDesafortunadamente, el sistema de

cómputo de tiempo en los sistemas

Unix, que cuenta el número de

segundos desde 1970, no tiene en

cuenta los segundos adicionales

comentados. Mientras que el reloj

pasaba de las 23:59:59 a las 23:59:60 el

31 de diciembre de 1998, en Gran

Bretaña, el contador en las máquinas

Unix que siguen el estándar POSIX

pasaba de 915148799 a 915148800. El

siguiente salto virtual desde las

00:59:60 a las 01:00:00, sin embargo,

no se reflejó en el contador de tiempo

de Unix, ambos instantes en el tiempo

se representan correctamente por un

valor de tiempo en Unix

correspondiente a 915148800.

Si restamos ambos tiempos Unix, y

calculamos el tiempo UTC que ha

pasado entre ellos, tendremos que

DESARROLLO • Perl

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

01 #!/usr/bin/perl -w

02 use strict;

03 use Sysadm::Install qw(:all);

04

05 use DateTime;

06

07 my $dt = DateTime->new(

08 year => 1990,

09 time_zone => 'UTC'

10 );

11

12 $dt->add(

13 seconds => 3600 * 24 *

14 5000);

15 print "$dt\n";

Listado 5: leapreveal

01 #!/usr/bin/perl -w

02 use strict;

03 use DateTime;

04 use

05 DateTime::Format::Strptime;

06

07 my $format =

08 DateTime::Format::Strptime

09 ->new(

10 pattern =>

11 "%A, %B %d %Y, %H:%M",

12 locale => "en_UK",

13 time_zone => 'Asia/Tokyo',

14 );

15

16 my $dt =

17 $format->parse_datetime(

18 "Sunday, January 29 2006,

07:30"

19 );

20

21 $dt->set_formatter($format);

22

23 print "Departure: $dt\n";

24

25 $dt->add(

26 DateTime::Duration->new(

27 hours => 6,

28 minutes => 30

29 )

30 );

31

32 $dt->set_time_zone(

33 'Pacific/Honolulu');

34 print "Arrival: $dt\n";

Listado 6: daytrip

Figura 3: Distintos idiomas y configuraciones aplicables a la con-

versión y formateo de cadenas de fechas.

formatos de fecha. Usa herramientas de

formateado de la jerarquía de clases

DateTime::Format::* tanto para

analizar una cadena de fecha con

parse_datetime(), como para devolver

los resultados.

DateTime::Format::Strptime es una

herramienta de formateo

particularmente flexible que tiene

parámetros de sustitución para el

formato de cadena, siguiendo un

método similar al de la función

strptime() en C. %A representa el día

de la semana, %B el nombre del mes

escrito, %d la fecha, %H la hora, etc.

El parámetro locale se fija a “en_GB”

para Gran Bretaña. en selecciona el

idioma inglés. La segunda parte de

locale especifica el país y sus reglas

especiales.

En el Listado 7 (locales) hay más

ejemplos: en_AU y en_US son locales

para el inglés australiano y americano,

respectivamente. fr_FR para francés,

es_ES y es_MX para el castellano de

España y México. Tras inicializar el

formateador con el valor adecuado de

locale, se pasa al objeto DateTime

haciendo uso de set_formatter. Los

objetos DateTime se convierten a

cadenas. La Figura 3 muestra algunos

ejemplos.

a) Años Bisiestos

b) Volviendo atrás al año 2000, es

casi seguro que la mayoría de los

programas son conscientes de la regla

de que un año bisiesto ocurre cada

cuatro años, pero no si ese año es

divisible entre 100, siendo excepción a

esto si ese año es también divisible

entre 400.

Por supuesto, DateTime entiende estas

reglas. Para ponerlas a prueba, veamos un

problema algo más complejo: ¿cuántos

viernes 29 de febrero hay entre 1980 y

2000?

Dos conjuntos de objetos DateTime

nos ofrecen un elegante método para

resolver este problema tenemos que

guardar todos los viernes en uno de

ellos, y todos los 29 de febrero en el

otro. Un objeto de la clase DateTime::Set

puede en teoría contener un número

infinito de objetos DateTime.

La manera más sencilla de crear un

conjunto para este propósito es usar el

módulo DateTime::Event::Recurrence de

CPAN. El constructor

Date-Time::Event::Recurrence->

yearly(days=> 29, months => 2); nos

da un objeto de tipo DateTime::Set con

todos los 29 de febrero como una

descripción abstracta.

Al mismo tiempo, el Listado 8

(frifeb29) usa weekly(days => 5) para

definir un segundo conjunto que

contiene todos los viernes (es decir, los

que ocupan la posición 5 de la semana).

Podemos ahora usar el método

intersection() para obtener, por fin,

todos los viernes 29 de febrero.

Para indicarle al iterador (definido en

la línea 20) el conjunto por el que tiene

que empezar, el parámetro start define

la fecha de comienzo, usándose un

objeto DateTime configurado al año

2020 se usa para indicar la fecha de fin.

El bucle while de la línea 29 usa

next() para ir rebajando el iterador y

acercarlo al fin del periodo de tiempo

bajo revisión. El resultado de la

investigación: sólo hubo un viernes, el

29 de febrero de 1980, y habrá otro en

2008. �

Perl • DESARROLLO

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

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

linux-magazine.es/Magazine/

Downloads/17

[2] “What time is it in Indiana?” http://

www.mccsc.edu/time.html

[3] Segundos adicionales: http://es.

wikipedia.org/wiki/

Segundo_intercalado

[4] Línea de cambio de fecha: http://en.

wikipedia.org/wiki/

International_Date_Line

[5] Página del proyecto Datetime: http://

datetime.perl.org

[6] Hora en Unix: http://en.wikipedia.org/

wiki/Unix_time

[7] Hora UTC, TAI y UNIX: http://cr.yp.to/

proto/utctai.html

RECURSOS

01 #!/usr/bin/perl -w

02 use strict;

03 use DateTime;

04 use

05 DateTime::Format::Strptime;

06

07 my $dt = DateTime->now();

08

09 for my $locale (

10 qw(en_AU en_US de_DE fr_FR

11 es_ES es_MX)

12 )

13 {

14

15 $dt->set_locale($locale);

16

17 my $format =

18 DateTime::Format::Strptime

19 ->new(

20 pattern => $dt->locale()

21 ->long_datetime_format()

22 );

23

24 $dt->set_formatter($format);

25 print "$locale: $dt\n";

26 }

01 #!/usr/bin/perl -w

02 use strict;

03 use DateTime;

04 use

05 DateTime::Event::Recurrence;

06

07 my $feb29 =

08 DateTime::Event::Recurrence

09 ->yearly(

10 days => 29,

11 months => 2

12 );

13 my $fri =

14 DateTime::Event::Recurrence

15 ->weekly(days => 5);

16

17 my $set =

18 $fri->intersection($feb29);

19

20 my $it = $set->iterator(

21 start => DateTime->new(

22 year => 1980

23 ),

24 end => DateTime->new(

25 year => 2020

26 ),

27 );

28

29 while (my $dt = $it->next())

30 {

31 $dt->set_locale("en_GB");

32 print $dt->day_name(), ", ",

33 $dt->month_name(), " ",

34 $dt->day(), " ",

35 $dt->year(), "\n";

36 }

Listado 7: locales

Listado 8: frifeb29

Esta es la gran cuestión no resuelta

de la informática pero, aunque no

hayamos encontrado una solución

fiable, sí se disponen de técnicas que

aumentan la probabilidad de que, al

menos, se cree algún software útil.

Una de estas técnicas consiste en

emplear un sistema de componentes

como base para el desarrollo. Un com-

ponente es una cantidad de software

que ofrece un servicio bien definido y

que es reutilizable. Además debe ser

posible reutilizarlo «de verdad»: desde

cualquier lenguaje y cualquier sitio.

Cualquiera que tenga conocimiento

sobre cómo funcionan los lenguajes de

programación a bajo nivel sabrá que

esto es muy muy complicado. Por ello

se han desarrollado infraestructuras

que nos permiten interactuar con los

componentes de manera indirecta. A

este software se le suele llamar “mid-

dleware” (algo así como “software de

en medio”).

Ejemplos famosos de Middleware son

J2EE, que muchos conocerán, y

CORBA, que a muchos les gustaría no

conocer. Ambos son sistemas enormes

y costosos que relegan al programador

a mera herramienta en manos de inge-

nieros denominados arquitectos que

conocen su compleja infraestructura.

Pero los sistemas de componentes

también se emplean en software libre y

han dado buenos resultados. Quizás el

más desconocido es UNO, de Universal

Network Objects, el sistema que

emplea OpenOffice, ver Listado [1], y

que SUN desarrolló para su precursor:

StarOffice.

PyUNOUn sistema de componentes con el que

sólo se pueda programar en un

lenguaje no tiene mucha utilidad. Por

eso en OpenOffice se han asegurado de

fomentar la creación de interfaces a

distintos lenguajes de programación.

Podemos acceder a UNO usando

Javascript, Java, Ruby, Perl o Python

(ver Recurso [2]).

PyUNO es el nombre de la interfaz y

podremos encontrarlo sin problemas en

nuestra distribución de Linux. Eviden-

temente, necesitamos también tener

instalado OpenOffice. En este artículo

hemos realizado los programas usando

OpenOffice 2.0, que cambió la interfaz

respecto a la versión 1.0, y la versión

de PyUNO 0.7.0.

Un ejemplo rápidoVamos a crear el famoso «Hola mundo»

con PyUNO. Para ello primero debemos

arrancar OpenOffice con el siguiente

comando desde el directorio donde esté

instalado:

$> ./sofficeU

"-accept=socket,U

host=localhost,U

port=2002;urp;"

No es ni será la última vez que

desde esta sección recordemos

que la idea original de Stallman

era la de que cada programa libre estu-

viese construido sobre librerías de fun-

ciones, de manera que su código fuese

reutilizable por cualquier otro pro-

grama.

Quizás en un programa pequeño no

sea muy útil este tipo de diseño, pero

¿qué pasa con esos monstruos consumi-

dores de memoria que rondan por nues-

tros discos duros? Nos referimos a pro-

gramas o entornos del calibre de

Gnome, KDE, Mozilla u OpenOffice.

Todo el mundo se queja de su tamaño

excesivo, su alto consumo de recursos y

su inexplicable complejidad.

Quizás con este artículo desmintamos

este mito y hagamos que el lector mire

con nuevos ojos a estos maravillosos

programas.

Grandes sistemas decomponentesEl diseño de un gran programa puede

llevar años y cientos o miles de progra-

madores. Organizar tal cantidad de per-

sonas supone ya una locura sólo por el

hecho de asegurarse que todos cobren.

Pero vayamos a nuestro mundillo

¿cómo podemos organizarles para que

el desarrollo no acabe en un fiasco?

DESARROLLO • Python

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

PyUNO: Explota todo el potencial de OpenOffice

PYTHON NO HAYMÁS QUE UNO¿Has visto alguna vez a los brokers de bolsa? ¿Recuerdas sus sofisticados y caros pro-

gramas para ver las cotizaciones de las empresas en bolsa en tiempo real? Nosotros

haremos lo mismo con 70 lineas de código Python, OpenOffice y la tecnología UNO de

OpenOffice. POR JOSÉ MARÍA RUIZ

Al arrancar OpenOffice se arranca su

sistema de componentes. Podemos pen-

sar en este proceso como en el arranque

de un servidor, sólo cuando esté funcio-

nando podrán los clientes trabajar con

él.

Las opciones que pasamos son para

que se cree un socket y se escuche en

localhost en el puerto 2002. Por defecto

OpenOffice no abre el socket, de ma-

nera que no podrán controlar nuestro

OpenOffice sin nuestro consentimiento.

OpenOffice incorpora de serie varios

intérpretes de lenguajes, entre ellos uno

de Python que ya viene preconfigurado

para poder hacer uso de la librería UNO.

Está junto al resto de ejecutables de

OpenOffice, así que lo ejecutaremos

desde allí. El programa que usaremos se

encuentra en el Listado [2].

El proceso es el siguiente:

• Obtenemos un contexto local (un

sitio donde guardar los datos de la

conexión)

• Arrancamos el componente UnoUrl-

Resolver que nos sirve para acceder

a otro OpenOffice en otro equipo

(en nuestro caso accederemos a

nuestro propio equipo)

• Emplearemos el objeto resolver para

acceder al OpenOffice remoto

• Arrancamos un «Desktop» (escrito-

rio) de OpenOffice (esto es una

instancia de OpenOffice vacía)

• Arrancamos un SWriter (es decir, el

procesador de textos) en el escrito-

rio

• Obtenemos un cursor, con el que

podremos posicionarnos dentro del

texto

• e insertamos texto en el cursor

El resultado, no muy espectacular,

podemos verlo en la Figura [1]. Ya te-

nemos nuestro «hola mundo» insertado

en SWriter.

¿Demasiado código? Piensa por un

momento lo que estamos haciendo.

Hemos levantado dos componentes y

hecho acceso remoto a otro OpenOffice.

Este segundo OpenOffice puede estar en

una máquina al otro lado del mundo. Es

algo bastante impresionante, pero por el

momento poco útil. Veamos un poco

más sobre UNO antes de realizar un

programa más útil.

Arquitectura de UNOOpenOffice está implementado en

C++. UNO se usa internamente para

realizar cualquier cosa. Básicamente

OpenOffice no es más que una gran

cantidad de componentes que interac-

túan entre sí. Todo dentro de OpenOf-

fice es un componente, así que

podemos acceder a cualquier parte de la

aplicación, ¡incluso reconstruir Open-

Office en Python!

Los sistemas de componentes usan

un registro de componentes al que se le

puede pedir que arranque compo-

nentes. El registro localiza el compo-

nente en disco y lo carga en memoria,

de manera que puede ser usado. Las lla-

madas a las funciones no se realizan

directamente, sino que se suele emplear

algún sistema no dependiente de

lenguaje o plataforma, como puede ser

XML o un formato ASCII.

El registro también debe ser capaz de

gestionar los recursos que consume el

componente, descargándolo de memo-

ria cuando ya no sea necesario.

Los componentes pueden ser progra-

mados en cualquier lenguaje con el

que se tenga interfaz. Un componente

es un conjunto de ficheros que propor-

cionan un servicio. Se acompañan de

un fichero XML que describe su fun-

cionalidad. Lo mejor es que podemos

vincular ese servicio a algún compo-

nente gráfico, como por ejemplo un

botón o menú.

Comenzaremos por realizar un pro-

grama que funcionará de manera

externa a OpenOffice y después creare-

mos un componente con él y lo inte-

graremos en OpenOffice.

Nuestro programa deStocksComencemos con la parte útil, ver Lis-

tado [2]. Vamos a crear un sistema que

nos permita controlar las acciones de

una serie de empresas que están en

bolsa dentro de un índice tecnológico,

el Nasdaq (para algo estamos en una

revista de informática), usando la hoja

de cálculo SCalc y un programa

Python. Nuestro programa accederá

usando Internet a un sitio web donde

podrá recoger los datos en CSV (Val-

ores Separados por Comas), los proce-

sará y los introducirá en SCalc.

Comenzaremos por crear una fun-

ción que recoja el fichero CSV y lo pro-

cese. Lo que hacemos es conectarnos

con la página web finance.yahoo.com.

Yahoo tiene un sitio web bastante

avanzado sobre cotizaciones de bolsa,

y uno de sus servicios nos permite

recoger los datos de cotización de una

empresa en tiempo real en formato

CSV. Sin embargo, Yahoo no nos per-

mitirá acceder a los datos demasiado a

menudo, ya que dispone de un servi-

cio de pago para ello, así que puede

cortarnos el «grifo» en cualquier

momento si hacemos demasiadas con-

sultas por minuto. Por eso recogere-

mos los datos cada 10 segundos. La

función getSimbolo() se encargará de

ello.

Ahora ya tenemos los datos, te-

nemos que mandarlos a SCalc. Hemos

creado un objeto llamado Calc para

gestionar el acceso. Hemos metido en

el método constructor (__init__) el

código que conecta con el OpenOffice,

puesto que sólo lo haremos una vez.

Una hoja de cálculo posee varias

«hojas», así que tendremos que solici-

Python • DESARROLLO

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

01 import uno0203 localContext =

uno.getComponentContext()0405 resolver =

localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver",

06localContext )

07 ctx = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" )

0809 desktop =

ctx.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop",ctx)

1011 doc =

desktop.loadComponentFromURL("private:factory/swriter","_blank",0,())

1213 cursor =

doc.Text.createTextCursor()1415 doc.Text.insertString( cursor,

"Hola Mundo", 0 )1617 ctx.ServiceManager

Listado 1: programa «Hola Mundo»

primera hoja, que es la que se ve

cuando arrancamos SCalc.

El método actualiza() admite una

lista con los datos de cotización y

número que representa la fila donde

aparecerá en SCalc. Una hoja de cálculo

se compone de celdas y éstas tienen un

tipo. La función getCellByPosition() nos

permite acceder a una celda pasándole

la columna y la fila (al revés de lo nor-

mal, así que cuidado).

Una vez localizada la celda tenemos

varias funciones para poder asignar un

valor:

• setString(): para poner una cadena

• setValue(): para poner un número

• setFormula(): para poner una fór-

mula

El dato cotización es la lista de

parámetro de cotización, pero vienen

dados como cadenas de caracteres. Las

posiciones 0, 2 y 3 son realmente cade-

nas, pero el resto son números. Por eso

tenemos que convertir ciertos valores

al tipo float() mediante la función

float().

El resultado se puede ver en la Figura

[2], veremos cómo se abre una ventana

tar una usando el método getSheets(),

que nos devuelve una lista con las dis-

tintas hojas. Dentro de esta lista usare-

mos getByIndex() para seleccionar la

DESARROLLO • Python

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

01 import uno

02 import random

03 import time

04 import httplib

05 import csv

06

07 class Calc:

08 def __init__(self):

09 self.conecta()

10

11 def conecta (self):

12 self.local =

uno.getComponentContext()

13 self.resolver =

self.local.ServiceManager.crea

teInstanceWithContext("com.sun

.star.bridge.UnoUrlResolver",

self.local)

14

15 self.context =

self.resolver.resolve("uno:soc

ket,host=localhost,port=2002;u

rp;StarOffice.ComponentContext

")

16

17 self.desktop =

self.context.ServiceManager.cr

eateInstanceWithContext("com.s

un.star.frame.Desktop",

18

self.context)

19

20 #self.doc =

self.desktop.getCurrentCompone

nt()

21 self.doc =

self.desktop.loadComponentFrom

URL("private:factory/scalc","_

blank",0,())

22

23 self.hojas =

self.doc.getSheets()

24 self.s1 =

self.hojas.getByIndex(0)

25

26 def actualiza(self,

cotizacion, fila):

27

28 i = 0

29 for entrada in

cotizacion:

30 if (i == 0) or (i

== 2) or (i ==3):

31

self.s1.getCellByPosition(i,fi

la).setString(entrada)

32 else:

33

self.s1.getCellByPosition(i,fi

la).setValue(float(entrada))

34

35 i = i + 1

36

37 def getSimbolo(simbolo):

38 c =

httplib.HTTPConnection("financ

e.yahoo.com")

39

c.request("GET","/d/quotes.csv

?s="+simbolo+"&f=sl1d1t1c1ohgv

&e=.csv")

40 r = c.getresponse()

41 cad = r.read()

42 reader = csv.reader([cad])

43 resultado = []

44 for row in reader:

45 resultado = row

46 return resultado

47

48 if __name__ == '__main__':

49

50 simbolos =

["GOOG","MSFT","RHAT"]

51

52 c = Calc()

53

54 while(1):

55 i = 0;

56 for s in simbolos:

57

c.actualiza(getSimbolo(s),i)

58 i = i + 1

59

60 time.sleep(10)

Listado 2: «OfficeBroker»

Figura 1: Un documento de Write de OpenOffice con el ineludible “Hello World” generado a par-

tir de PyUNO.

de SCalc y se rellena con los valores de

las contizaciones, además de cómo se

actualizan cada 10 segundos. Si

creamos un gráfico que use esos va-

lores se actualizará con ellos.

Pero este es un programa externo…

estaría bien que pudiésemos hacer eso

pulsando un botón

Creamos un componenteUNOLos componentes UNO no son más que

código debidamente empaquetado. Los

paquetes que OpenOffice admite tienen

una estructura fija. Son ficheros ZIP

que contienen los ficheros con el

código fuente, recursos (como imá-

genes) y un fichero de configuración

XML.

Los ficheros deben tener nombres

especiales. El fichero de configuración

debe llamarse Addons.xcu y permite

asignar el código fuente del paquete con

el widget que deseemos, un botón, una

entrada de un menú… Ver Listado [3].

La sintaxis del fichero parece bastante

complicada, cuando en realidad no es

muy difícil de entender. Básicamente

decimos que queremos que nuestro com-

ponente se asocie con una entrada en el

menú «Addons» que está en Tools o Her-

ramientas en castellano. Nuestro compo-

nente tiene una ruta que especificaremos

después y que es:

org.openoffice.comp.pyuno.U

linuxmagazine.Stock

Esta ruta la hemos creado nosotros y

tenemos que tener cuidado de que sea

única, por eso hemos incorporado li-

nuxmagazine en ella ;). Definimos un

título, que puede estar en varios

idiomas, y una imagen, que hemos

escogido de entre las que proporciona

OpenOffice.

El fichero con el código fuente Python en

sí se puede ver en el Listado 4. Tenemos un

objeto llamado StockJob que será el que se

invocará en caso de pulsar la entrada en el

menú. Ese objeto se vincula a la ruta que

vimos antes. Cada vez que se pulse sobre la

entrada del menú se ejecutará el método

trigger, que descargará de Internet las coti-

zaciones y las mostrará en la hoja de cál-

culo. Es posible hacer que sólo se muestre

el menú cuando arrancamos la hoja de cál-

culo SCalc, pero por motivos de espacio no

hemos puesto la restricción. Aún así si no

estamos en una hoja de cálculo no suce-

derá nada, simplemente no funcionará.

Manejo de paquetes enOpenOfficeAhora tenemos que generar nuestro

paquete UNO. Para ello necesitaremos el

programa ZIP, gzip no nos vale, y crear un

fichero:

$> zip stock.zipU

stock_comp.py Addons.xcu

updating: ...../Addons.xcuU

Python • DESARROLLO

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

01 <?xml version="1.0"

encoding="UTF-8"?>

02 <oor:node

xmlns:oor="http://openoffice.o

rg/2001/registry"

03

xmlns:xs="http://www.w3.org/20

01/XMLSchema"

04 oor:name="Addons"

oor:package="org.openoffice.Of

fice">

05 <node oor:name="AddonUI">

06

07 <node

oor:name="AddonMenu">

08 <node

oor:name="org.openoffice.comp.

pyuno.linuxmagazine.Stock"

oor:op="replace">

09 <prop

oor:name="URL"

oor:type="xs:string">

10

<value>service:org.openoffice.

comp.pyuno.linuxmagazine.Stock

?insert</value>

11 </prop>

12 <prop

oor:name="Title"

oor:type="xs:string">

13 <value/>

14 <value

xml:lang="en-US">Stock

Market</value>

15 <value

xml:lang="es">Cotización en

Bolsa</value>

16 </prop>

17 <prop

oor:name="Target"

oor:type="xs:string">

18

<value>_self</value>

19 </prop>

20 <prop

oor:name="ImageIdentifier"

oor:type="xs:string">

21

<value>private:image/3216</val

ue>

22 </prop>

23

24 </node>

25 </node>

26 </node>

27 </oor:node>

Listado 3: Addons.xcu

Figura 2: Nuestro programa examina los valores de la bolsa NASDAQ disponibles en Yahoo a

intervalos regulares y los inserta en una hoja de cálculo de OpenOffice.

Con esto concluye la instalación del

paquete…¡no ha sido tan difícil!

Cuando arranquemos de nuevo

OpenOffice podremos seleccionar la

hoja de cálculo SCalc y en el menú

Tools/Herramientas veremos cómo ha

aparecido al final un nuevo submenú:

«Complementos (add-ons)». Dentro

del mismo aparecerá una nueva

entrada llamada «Cotización de

Bolsa». Si lo pulsamos aparecen los

datos de 3 compañías (Google,

Microsoft y Redhat) del Nasdaq en

nuestra hoja de cálculo.

ConclusiónPython nos permite

un uso nuevo de

algo tan trillado

como puede

ser un

paquete

ofimático.

OpenOffice

entero es

accesible

desde Python; no es difícil imaginarse

programas que podrían facilitarnos

mucho la vida y no son tan difíciles de

crear gracias a PyUNO. No hemos

explorado la posibilidad de actuar

sobre un OpenOffice remoto por falta

de espacio, pero es una nueva posibili-

dad que abre un camino para aplica-

ciones muy interesantes, como puede

ser la edición distribuida de documen-

tos o un uso más creativo de la hoja de

cálculo.

Todo un mundo de posibilidades se

abre ante nosotros gracias a Python. �

(deflated 59%)

updating: ...../stock_comp.pyU

(deflated 57%)

>

Este fichero debe ser integrado en Open-

Office, iremos al directorio donde esté

instalado y ejecutaremos como root:

$> sudo ./unopkg addU

stock.zip

>

DESARROLLO • Python

[1] El sitio de OpenOffice: http://www.

openoffice.org

[2] El “puente” entre Python y OpenOf-

fice: http://udk.openoffice.org/python/

python-bridge.html

[3] Los listados de este arículo: http://

www.linux-magazine.es/Magazine/

Downloads/17

RECURSOS

Listado 4: stock_comp.py

01 import uno

02 import unohelper

03

04 import random

05 import time

06 import httplib

07 import csv

08

09 from com.sun.star.task import

XJobExecutor

10

11 def getSimbolo(simbolo):

12 c =

httplib.HTTPConnection("financ

e.yahoo.com")

13

c.request("GET","/d/quotes.csv

?s="+simbolo+"&f=sl1d1t1c1ohgv

&e=.csv")

14 r = c.getresponse()

15 cad = r.read()

16 reader = csv.reader([cad])

17 resultado = []

18 for row in reader:

19 resultado = row

20 return resultado

21

22 class StockJob(

unohelper.Base, XJobExecutor

):

23 def __init__( self, ctx ):

24

25 self.ctx = ctx

26

27 def trigger( self, args ):

28 desktop =

self.ctx.ServiceManager.create

InstanceWithContext(

29

"com.sun.star.frame.Desktop",

self.ctx )

30

31 model =

desktop.getCurrentComponent()

32

33 self.hojas =

model.getSheets()

34

35 self.s1 =

self.hojas.getByIndex(0)

36

37 simbolos =

["GOOG","MSFT","RHAT"]

38 i = 0;

39

40 for s in simbolos:

41

self.actualiza(getSimbolo(s),i

)

42 i = i + 1

43

44 def actualiza(self,

cotizacion, fila):

45 i = 0

46 for entrada in

cotizacion:

47 if (i == 0) or (i

== 2) or (i ==3):

48

self.s1.getCellByPosition(i,fi

la).setString(entrada)

49 else:

50

self.s1.getCellByPosition(i,fi

la).setValue(float(entrada))

51

52 i = i + 1

53

54 g_ImplementationHelper =

unohelper.ImplementationHelper

()

55

56

g_ImplementationHelper.addImpl

ementation( StockJob,

57

"org.openoffice.comp.pyuno.lin

uxmagazine.Stock",

58

("com.sun.star.task.Job",),)

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

De vez en cuando reviso los

ficheros de registro de mi servi-

dor web, aunque no es algo que

me guste hacer muy a menudo. Después

de todo, veo muchas cosas molestas en

el trabajo. Cuando analizo mis propios

registros, normalmente aparece informa-

ción de depuración, pero también apare-

cen entradas del tipo “accesos erróneos”.

A veces se ven registros extraños como:

tharis.xxxxx.at - - U

[03/Dec/2005:08:24:43

+0100] "GET /LOST HTTP/1.1" U

404 1025 "-"

"Mozilla/4.0"

Aunque este mensaje parece muy ofensi-

vo, en realidad es bastante inofensivo.

En otras ocasiones, encuentro gente

intentando navegar por URLs

pertenecientes a aplicaciones que han

sido nombradas en los avisos recientes

de seguridad. En las últimas semanas,

por ejemplo, he leído avisos referentes a

PhpMyAdmin y PhpBB. Los intentos

para acceder a ficheros con extensiones

tales como .mdb y .asp, son signos evi-

dente de fuego enemigo. El Listado 1

muestra un extracto.

Es bueno conocer exactamente qué

consultas realizadas contra nuestro

servidor han dado en el blanco. De

hecho, esto es una forma de detectar

patrones de ataque que podrían causar

dolores de cabeza a otros servidores.

Detectando Patrones 404Se entra en Webalizer, el amigo del

administrador. Patrick Frei ha escrito un

parche para Webalizer que proporciona

al administrador estadísticas adicionales

referentes a solicitudes que hayan provo-

cado la respuesta 404 - File not found en

el servidor. La Figura 1 muestra estas

estadísticas de mi servidor web del día 6

de Diciembre de 2005. Se puede ver de

un vistazo que las entradas que descubrí

no son un caso aislado. También se

pueden observar un par de enlaces erró-

neos que tengo que eliminar.

El código fuente de Webalizer (inclui-

do el parche ya aplicado) está disponible

en [1]. Tan sólo hay que compilar e

instalar:

./configure

make

make install

Harán falta los paquetes Zlib, Libpng y

GD, junto con los paquetes de desarrollo

correspondientes. El parche que con-

vierte el código fuente original de

Webalizer en “Webalizer Xtended” está

disponible en [1]. Para aplicarlo, en el

directorio del código fuente de

Webalizer, se teclea el siguiente coman-

do:

patch -Np1 -i /Pfad

/webalizer-2.01-10-RB06-patch

Luego sólo hay que compilar Webalizer

como se ha descrito anteriormente. El

proceso completo es mucho más sencillo

para los usuarios de Gentoo, ya que está

disponible un Ebuild. ¡Felices accesos

erróneos! �

55

La Columna de Charly • ADMINISTRACIÓN

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

[1] Webalizer Ztended: http://www.

webalizer.go.to

RECURSOS

Netfilter L7.…......................................56

Vemos como filtrar protocolos fami-

liares que utilizan puertos no tan fami-

liares con el parche IPTables L7.

Asterisk .....…......................................61

Implementamos una centralita tele-

fónica IP con Asterisk.

SYSADMIN

Webalizer es una herramienta para analizar los ficheros de registros de los servidores web. Un nuevo parche

le proporciona a los administradores la posibilidad de ver lo que no hay. POR CHARLY KÜHNAST

01 cncln.online.ln.cn - -

[05/Dec/2005:22:09:04 +0100]

"GET

/bbs/upload.asp?action=upfile

HTTP/1.1" 404 1025 "-"

"InetURL:/1.0"

02 58.241.228.180 - -

[06/Dec/2005:03:32:54 +0100]

"GET /bbs/diy.asp HTTP/1.1"

404 1025 "-" "Mozilla/4.0"

03 222.62.228.179 - -

[06/Dec/2005:07:19:49 +0100]

"GET /bbs/diy.asp HTTP/1.1"

404 1025 "-" "InetURL:/1.0"

04 220.191.42.203 - -

[13/Oct/2005:10:12:23 +0200]

"GET /data/dvbbs6.mdb

HTTP/1.1" 404 1025 "-"

"InetURL:/1.0"

05 220.191.42.203 - -

[13/Oct/2005:10:12:24 +0200]

"GET /data/dvbbs7.mdb

HTTP/1.1" 404 1025 "-"

"InetURL:/1.0"

Listado 1: Accesos alServidor Web

El Día a Día del Administrador de Sistemas: Webalizer Xtended

ACCESOS ERRÓNEOS

Figura 1: Webalizer Xtended muestra las

estadísticas erróneas para el 6 de Diciembre.

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

Bloqueando puertos en la capa 7 con el parche L7

MÁS ALLÁ DELPUERTO

Tradicionalmente los cortafuegos

deciden si permitir o rechazar los

paquetes basándose en la dirección

IP, los flags TCP, las direcciones MAC, los

puertos y otros criterios que residen en las

capas que van desde la segunda a la

cuarta del modelo de referencia OSI. Los

administradores con experiencia pueden

probablemente teclear comandos como

iptables -A FORDWARD -i $IF -o $OF -p tcp

-dport 80 --syn -j ACCEPT. ¿Pero qué

sucede si el servidor web está escuchando

en el puerto 8500 en vez de en el puerto

80? O ¿si un servidor de juegos lo utiliza

inadecuadamente? Las aplicaciones peer-

to-peer son incluso peores, ya que no hay

forma de predecir los puertos que van a

utilizar. Y VoIP hace que el caos sea total

con el protocolo RTP (Real Time

Protocol), que tiene total libertad a la hora

de utilizar los puertos UDP.

Incluso si no se necesita utilizar un

cortafuegos, puede ser que se necesite

adaptar el tráfico para VoIP priorizando

RTP. Y para ello, el router ha ser capaz de

distinguir entre los distintos protocolos. El

número de puerto no es de gran ayuda,

excepto en los casos más simples, por lo

que el usuario tendrá que inspeccionar los

flujos de datos con mayor detalle. Quizás,

no sea un gran reto para un administrador,

pero sí que supone un reto para un

cortafuegos sujeto estrictamente a su

conjunto de reglas. Un cortafuegos no se

puede permitir el lujo de perder tiempo

analizando datos, pero al mismo tiempo,

tampoco puede permitirse el lujo de hacer

suposiciones erróneamente.

El parche L7 para IPTables intenta

resolver este problema [1]. L7 viene de

Layer 7 (capa 7) del modelo de referencia

OSI, es decir, la capa donde residen los

protocolos de aplicación como FTP o SSH

(Figura 1). L7 hace uso de expresiones

regulares para

investigar el

contenido de una

conexión

individual. Al

contrario que otras

puertas de enlace

de la capa de

aplicación más

complejas, que

comprueban los

protocolos

basándose en el

conjunto completo

de reglas RFC y filtran los contenidos

dañinos en el proceso, L7 usa expresiones

regulares rápidas para comprobar los

flujos de datos. Es capaz de cribar

rápidamente los datos de entrada

utilizando para ello expresiones regulares

que sean capaces de identificar

características propias de los protocolos

individuales sin tener que depender de

indicadores externos como puedan ser los

números de los puertos.

Cazando EstrellasL7 necesita un fichero patrón para cada

protocolo que vaya a soportar. El nombre

ADMINISTRACIÓN • Netfilter L7

Si se necesita una herramienta para filtrar los protocolos que no dependen de un puerto, entonces hay que

probar L7, un parche para IPTables que opera basándose en expresiones regulares. POR JÖRG HARMUTH

Figura 1: Después de instalar el parche L7, Netfilter funciona en la capa de

Aplicación del modelo de referencia OSI, así como con las capas que van

desde la 2 a la 4 de OSI.

Netfilter L7 • ADMINISTRACIÓN

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

del fichero con el patrón está formado por

el nombre del protocolo y la extensión

.pat; por ejemplo, http.pat contiene una

expresión regular que identifica a HTTP.

Un fichero de patrón L7 contiene una o

varias expresiones regulares que

identifican el protocolo. Todas las

opciones están detalladas en los ficheros

proporcionados con la ruta y todas las

opciones están deshabilitadas, con la

excepción de una expresión. También se

puede encontrar una evaluación

cualitativa (cómo de rápido, cómo de

seguro) y si fuera necesario, los HOWTO

típicos de las aplicaciones. Los listados 1a

y 1b muestran las definiciones para FTP y

SMTP.

Ambas expresiones empiezan con un

código 220; éste es el código al comienzo

de la cabecera de los dos servicios. Tanto

FTP como SMTP son protocolos basados

en ASCII que escriben mensajes en líneas

individuales en un formato totalmente

legible por una persona. De acuerdo con

los RFCs, realmente nada tiene que seguir

al código 220, pero puede haber algo y

normalmente lo hay. Los programas de

línea de comandos típicos para FTP

muestran estos mensajes, como el

siguiente, tras llamar a ftp.kernel.org:

Connected to kernel.org.

220 Welcome to ftp.kernel.org.

Name (kernel.org:jha): anonymous

331 Please specify the password.

Password:

El mensaje Connected es generado por el

programa cliente y a continuación va

seguido por la cabecera del servidor, que

L7 localiza en los datos transferidos y los

evalúa para identificar el protocolo. Como

la cabecera incluye una cadena ftp, L7

identifica al protocolo FTP reconociendo

esta cadena con la expresión regular

(Listado 1a, línea 11) y no intenta

identificar ninguna otra expresión. Si el

servidor hubiera respondido con un

código 220 conforme al RFC, L7 hubiera

sido incapaz de identificar al protocolo, ya

que la expresión SMTP (Listado 1b, línea

7) no devolvería una coincidencia.

En el siguiente paso, el cliente FTP

transmite el nombre del usuario, y el

servidor responde con el código 331. Esta

línea se corresponde con la expresión del

listado FTP (que aparece deshabilitada,

véase Listado 1a, línea 13), ya que la línea

contiene las claves de

búsqueda 331 y password.

L7 identificaría a FTP

basándose en esta

información.

L7 no encuentra una

coincidencia hasta que se

haya mandado el séptimo

paquete en esta conexión;

el saludo en tres partes, la

cabecera del servidor, la

petición del nombre del

usuario y el nombre del

usuario se transfieren

antes de que ocurra esto.

Así se explica el

comentario “This will

match more, but much

slower” (Esto coincidiría

mejor, pero es mucho más

lento). Si L7 fallara

identificando un

protocolo, habría que comparar el fichero

del protocolo con un volcado de la sesión.

Comparando los datos de la conexión con

la expresión regular nos conduciría hacia

la pista.

QoS en vez de realizar unDrop o un RejectL7 puede manejar todos los destinos

normales de Iptables (DROP, REJECT,

ACCEPT, …) lo que permitiría basar el

conjunto de reglas del cortafuegos con las

identificaciones llevadas a cabo por L7.

Sin embargo, el proyecto L7 tiene buenas

razones para aconsejar a los

administradores. Los atacantes

experimentados podrían modificar

fácilmente la información del protocolo,

colándole una a L7, y de este modo abrir

una conexión no autorizada en la red. En

vez de bloquear el tráfico, se debería

utilizar L7 como una ayuda potente para

reforzar las reglas que ya se disponían con

anterioridad.

De hecho, L7 está recomendado para

QoS (Calidad del Servicio). Lo peor que

pueda pasar es que QoS asigne una

conexión erróneamente a una banda de

baja prioridad. Con lo que se mantendrá a

los usuarios dentro de un nivel de quejas

aceptable. La recompensa a todo este

esfuerzo es que L7 mantiene a los

servicios de poca importancia, como las

redes peer-to-peer, a raya, impidiendo que

se apoderen de todo el ancho de banda.

Una configuración adecuada permitiría

que las aplicaciones importantes tengan el

Figura 2: La configuración para L7, Netfilter y QoS se

extiende por varias ramas de Qconf. El soporte para la capa 7

se esconde bajo Networking | Networking support | Net-

working options | Network packet filtering | IP tables support.

01 # Calidad de la pauta: bueno y rápido

02 # Conicide con las dos primeras cosas que el servidor debería ver.

03 # La mayoría de los servidores dicen algo después de 220, aunque

04 # no tengan ninguna obligación de hacerlo y suele incluir la cadena

05 # "ftp" (l7-filter no es sensible a las mayúsculas/minúsculas

06 # en estos momentos).

07 # Esto incluye a proftpd, vsftpd, wuftpd, warftpd, pureftpd,

Bulletproof

08 # FTP Server, y cualquier servidor que utilice ftp.microsoft.com.

09 # Por si acaso, la siguiente cosa que envía el servidor es un 331.

10 # Todos los servidores citados también envían algo que incluye la

11 # cadena "password," después de este código. ftp

12 # de momento sólo te deja hacer lo primero, al ser más rápido

13 ^220[\x09-\x0d -~]*ftp

14 # Esto coincidiría con más, pero es mucho más lento

15 # ^220[\x09-\x0d -~]*ftp|331[\x09-\x0d -~]*password

Listado 1a: Patrón FTP

defecto, L7 investigará los primeros

2048 bytes o los diez primeros

paquetes de una conexión como

máximo (ocho paquetes en las

versiones anteriores), dependiendo de

cual suceda antes. Se puede modificar

este valor umbral del número de

paquetes a investigar por medio de la

interfaz proc:

echo number > U

/proc/net/layer7_numpackets

Con la versión 2.0, se puede modificar el

número de bytes del buffer en la ejecución

del módulo. modprobe ipt_layer7

maxdatalen=número_de_bytes se encarga

de ello, sin embargo, en versiones

anteriores habrá que volver a recompilar.

Bajo circunstancias normales, los 2048

bytes por defecto son adecuados; y

recuérdese que cuanto mayor sea este

valor, mayor será su impacto en el

rendimiento.

Cuando L7 identifica un protocolo,

realiza la acción asignada con la regla

Iptable. El comando para el protocolo

HTTP sería iptables opciones -m layer7

--l7proto http -j acción. Si L7 falla

identificando el protocolo, no coincide con

ninguno de los patrones, supondrá que

recibe el nombre unknown. Dicho de otro

modo, se puede definir una regla L7 que

coincida con unknown. Mientras L7 está a

la espera de datos e investigando el

paquete, no asignará ningún nombre al

protocolo.

FTP e IRC-DCC son dos casos especiales

bien conocidos que aún no han dejado de

divertirse con los cortafuegos. Usan

canales adicionales para la transferencia de

datos en paralelo con el objeto de controlar

los datos. L7 puede identificar el canal de

control, pero no será capaz de encontrar

los canales de datos. Los módulos del

kernel ip_conntrack_ftp e ip_conntrack_irc

solucionan este problema; ambos son

parte de la distribución de Iptables (FTP

protocol support e IRC protocol support en

el apartado de configuración Connection

tracking).

CoincidenciasEl mejor sitio para establecer las

coincidencias L7 es en la tabla mangle.

Las reglas L7 sólo funcionarán en la

tercera tabla, filter, si la política es

ACCEPT. Las razones se vuelven

aparentes cuando se considera cómo se

establece una conexión TCP:

• Llega un paquete SYN para iniciar la

conexión.

• El paquete SYN no posee ninguna

información acerca de ningún

protocolo de la capa 7, así que L7

fallará a la hora de identificar el

protocolo y la regla L7 no puede ser

aplicada (por ahora).

• El paquete pasa a través de todas las

reglas. Si no se tiene una política

ACCEPT, el paquete se descarta y la

conexión no se establece.

ancho de banda suficiente para

trabajar. El bloqueo completo de las

redes peer-to-peer sería como lanzarles

un nuevo reto a los usuarios para que

encuentren una alternativa.

Cómo FuncionaCon el objeto de identificar protocolos

basándose en expresiones regulares, L7

necesita investigar un segmento del

flujo de datos, que normalmente

comprende varios paquetes. Por

ADMINISTRACIÓN • Netfilter L7

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

Para soportar QoS con el parche L7, se

necesitan las herramientas IProute2 y

una configuración del kernel adecuada.

L7 requiere los siguientes paquetes:

• El parche L7 actual [1] (la versión 2.0

está disponible desde hace poco)

• Descripciones del protocolo en for-

mato de expresión regular [1]

(actualmente: 2005-11-20)

• El código fuente de Iptables [2]

(actualmente: 1.3.4, al menos la

1.3.0)

• Las fuentes del kernel [3]. Se pueden

parchear los kernels específicos de

las distribuciones. L7 v2.0 está di-

señado para las versiones 2.6.14 y

2.4.31 del kernel.

Hay que descomprimir los archivos L7

y aplicar los parches. Para ello, en el

directorio del kernel y de la Iptables se

teclea match -p1 patchfile. A continua-

ción se ha de continuar haciendo un

fichero nuevo oculto,

iptables-1.3.4/extensions/.layer7-test

en el paquete ejecutable Iptables

(chmod +x).

make install proporciona una manera

sencilla de colocar las descripciones

del protocolo en el directorio por

defecto, /etc/l7-protocols/protocols/. Si

se modifica la ruta, entonces habrá que

especificar el directorio del protocolo

en cada regla L7.

Configurando el Kernel

Para el soporte de QoS (y para los

ejemplos de este artículo), hay que

habilitar varias opciones del kernel (y

o m, detalles para el kernel 2.6), algu-

nas de las cuales únicamente son vi-

sibles cuando se habilita Code matu-

rity level options | Prompt for deve-

lopment and/or incomplete code/dri-

vers.

Hay dos opciones importantes en el

área de configuración Networking |

Networking support | Networking

options | TCP/IP networking:

• IP: advanced router

*IP: policy routing e IP: use netfilter

MARK value as routing key

Las siguientes opciones se necesitan

para la configuración de Netfilter en

Networking support | Networking

options | Network packet filtering | IP:

Netfilter Configuration:

• Connection tracking, y más especí-

ficamente Connection tracking flow

accounting (requerido para L7).

También, FTP protocol support e

IRC protocol support, para identi-

ficar las sesiones FTP e IRC.

• IP tables support y Layer 7 match

support (Figura 2), así como netfil-

ter MARK match support, Packet fil-

tering, Packet mangling y de nuevo

MARK target support.

Instalando L7

01 # Calidad de la pauta: bueno y rápido

02 smtp

03 # Como de costumbre, no se requiere ningún texto después del 220

04 # pero todos los servidores conocidos tienen alguno.

05 # (Casi) siempre contiene la cadena "smtp". Los ejemplos

06 # RFC no, así que coincidimos esos también., por si alguien

07 # los ha copiado literalmente.

08 ^220[\x09-\x0d -~]*

09 (e?smtp|simple mail)

Listado 1b: Patrón SMTP

• En este caso, las reglas L7 nunca

llegan a aplicarse.

Si se añaden las reglas al final de la

cadena para interceptar los primeros

paquetes que pasen, sería una solución

que tan sólo funcionará para los puertos

bien conocidos. Pero la idea de L7 es

poder realizar las identificaciones en

puertos desconocidos, así que las reglas

adicionales no van a prestar mucha

ayuda. Las políticas en las otras dos

tablas, mangle y nat principalmente se

establecen a ACCEPT por buenas razones.

UDP no tiene el “saludo a tres bandas”,

ya que no está orientado a la conexión. En

este caso de una política DROP, los

paquetes de respuesta llegarán al destino

suponiendo que el primer paquete UDP

coincidió con alguna expresión regular; el

seguimiento de conexiones de Netfilter se

encarga de esto.

Bajo ControlL7 proporcionará mejores resultados si

puede ver los dos lados de la conexión,

es decir, tanto los paquetes entrantes

como los salientes. Este no es el caso de

las cadenas INPUT y OUTPUT (o con la

tabla raw). Imagínese que se tiene una

regla L7 en INPUT, pero la clave de

búsqueda que coincide con la expresión

regular está en la respuesta. El segundo

paquete no pasará por INPUT sino a

través de OUTPUT y la regla nunca

llegará a verlo.

La tabla mangle proporciona una

respuesta simple. Todos los paquetes que

llegan al cortafuegos tienen que pasar a

través de mangle en PREROUTING y

todos los paquetes que salen tienen que

pasar por mangle en POSTROUTING. La

solución recomendada es:

• En caso de redireccionamiento, poner

la regla en PREROUTING o en

POSTROUTING.

• Para los paquetes locales, poner la

regla tanto en PREROUTING como en

POSTROUTING.

Aparte de esto, las coincidencias de L7

obedecen a la sintaxis normal. La

siguiente regla añade la marca 10

(--set-mark 10) a todos los paquetes

salientes (-A POSTROUTING)

pertenecientes al protocolo http

(--l7-proto http):

iptables -t mangle -A U

POSTROUTING -m layer7 U

--l7proto http -j MARK U

--set-mark 10

Téngase en cuenta que el nombre del

protocolo tiene que coincidir exactamente

con el nombre del fichero de patrón, sin

incluir la extensión, y además se distingue

entre mayúsculas y minúsculas.

FiltrosAl contrario de las recomendaciones de

los desarrolladores, se puede utilizar L7

para bloquear completamente algunos

protocolos. Sin embargo, si se va a tomar

esta postura, se debe proceder con

precaución, comprobando los resultados

y tomando algunos pasos adicionales, si

fuera necesario, para evitar la apertura

de posibles agujeros de seguridad. Este

bloque simple de reglas está enfocado al

acceso a los grupos de noticias:

iptables -A FORWARD -p U

tcp -m layer7 --l7proto U

nntp -j DROP

Un proxy de noticias o un servidor que

se esté ejecutando en el cortafuegos no

se vería afectado por esta regla de

redireccionamiento.

La compartición de ficheros es algo

que la mayoría de los administradores

quieren evitar. Si se es uno de esos

administradores que están

constantemente batallando para impedir

que los usuarios accedan a los servicios

de compartición, L7 puede facilitar

enormemente el trabajo. Los filtros

basados en los puertos fallan si un

servidor de E-Mule, por ejemplo, está

escuchando en el puerto 80. Algunos

programas peer-to-peer utilizan el puerto

HTTP. L7 soluciona este problema con

buenos resultados en la mayoría de los

casos utilizando excelentes patrones

para E-Donkey/E-Mule, Bittorrent y

Fasttrack.

A por la Compartición deFicherosLa siguiente variante etiqueta las

conexiones para la compartición de

ficheros en la tabla mangle usando

MARK y deja la labor de filtrado real a la

tabla filter. Esta solución permite formar

grupos de protocolos que están

gobernados por tan sólo unas pocas

reglas de filtrado. La caracterización del

grupo es una buena opción para muchos

entornos, ya que permite controlar todos

los protocolos de un grupo en un solo

punto. El Listado 2 muestra una porción

del script IPtables que se encarga de ello.

Las dos primeras líneas en el Listado 2

inicializan dos variables para no tener

que teclear tanto. Las líneas 3 y 4 del

listado etiquetan los paquetes

pertenecientes al protocolo Fasttrack con

la marca 13 tanto en PREROUTING como

en POSTROUTING para estar seguro. Tan

sólo hay que repetir estas líneas para el

Netfilter L7 • ADMINISTRACIÓN

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

Las opciones QoS se encuentran en Net-

working | Networking support | Network-

ing options | QoS and/or fair queueing;

tras habilitarla, hay que comprobar lo

siguiente:

• HTB packet scheduler

• SFQ queue

• QoS support y Rate estimator

• Packet classifier API

Sorprendentemente, la herramienta de

configuración Qconf almacena dos

opciones QoS Classifier un nivel por

encima, en vez de hacerlo en QoS:

• Firewall based classifier

• Traffic policing (needed for in/egress)

La última opción sólo aparece cuando se

deshabilita Packet ACTION. Después de

completar la configuración, se compila

el kernel y el programa IPTables,

instalándose este último. Precaución:

iptables se ubicará en /usr/local/sbin por

defecto, mientras que la versión sin L7

se encontrará en /sbin y por ello en un

nivel superior de la ruta del sistema.

A la caza del soporte QoS

01 IPT_PRE="iptables -t mangle -A PREROUTING -m layer7 --l7proto"

02 IPT_POST="iptables -t mangle -A POSTROUTING -m layer7 --l7proto"

03 $IPT_PRE fasttrack -j MARK --set-mark 13

04 $IPT_POST fasttrack -j MARK --set-mark 13

05 <I>[...]<I>

06 iptables -A FORWARD -m mark --mark 13 -j DROP

07 iptables -A INPUT -m mark --mark 13 -j DROP

Listado 2: Etiquetando Grupos

HTTP y esto es por lo que se necesita

insertar esta regla en la cadena antes de

aplicar la regla HTTP. Fasttrack es

utilizado por Kazaa, Morpheus, E-Mesh y

Grokster.

VoIP últimamente está ganando

bastante terreno. La calidad de los

patrones L7 para identificar VoIP es

mediocre. Además, se necesitan los

módulos de ayuda de Iptables para H.323

y SIP, ya que ambos protocolos trabajan

con múltiples puertos al mismo tiempo.

Estos módulos requieren el Kernel

2.6.11 o posterior. Para Skype, no hace

falta ningún módulo adicional.

Buenos PatronesCómo de bien se comporte el parche L7

en sistemas reales depende de la calidad

del fichero de patrones. Serían útiles

patrones con mejor calidad para los

protocolos VoIP. Los patrones

sorprendentemente simples ya son

capaces de identificar los protocolos

estándar, incluso los candidatos

escurridizos como FTP o IRC-DCC. Y la

calidad de los patrones para la mayoría

de los protocolos peer-to-peer son

bastante buenos.

L7 puede facilitarle la vida a los

administradores de sistemas,

especialmente en combinación con el

control del tráfico: añadiendo algunas

armas al arsenal del administrador que

está en constante batalla contra los

usuarios de las redes peer-to-peer. En

vez de bloquear completamente la

compartición de ficheros, sencillamente

se puede bajar su tasa de transferencia.

La mayoría de los usuarios no se quejan

de conexiones lentas en sus redes

locales, e incluso si lo hicieran, no se

podrían quejar realmente a nadie,

porque la mayoría de las políticas de las

empresas tienen reglas que prohíben la

compartición de ficheros. �

resto de protocolos. Las dos últimas

líneas del Listado 2 eliminan los paquetes

enviándolos al Nirvana digital.

Nota: El fichero fasttrack.pat establece

que el patrón pueda detectar descargas,

pero no búsquedas. Esta limitación no es

realmente un problema en la mayoría de

los casos. El fichero también indica que

Fasttrack normalmente utiliza peticiones

ADMINISTRACIÓN • Netfilter L7

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

L7 no puede identificar protocolos en

túneles SSL (HTTPS, IMAPS,?). El único

paquete con texto en claro tras el

“saludo” TCP/IP es el certificado del

servidor SSL. El intercambio de claves

se produce justo después de este

momento y todos los otros intercambios

entre el cliente y el servidor están encrip-

tados. Esto fuerza a los administradores

a tratar a todos los protocolos que pasan

por el túnel SSL como si fuesen el

mismo.

Algo que se podría probar es buscar

algún criterio en el certificado, es decir,

se podría decidir no confiar en determi-

nadas autoridades certificadoras. Esto

es por lo que el fichero del patrón para

SSL no está titulado como ssl.pat sino

como validcertssl.pat. El patrón tan sólo

permite las CAs conocidas y por ello no

funcionará con los certificados autofir-

mados, aunque se podría escribir un

patrón propio que se encargara de ello.

SSL y L7

[1] Código fuente de L7 y definiciones de

protocolo: http://l7-filter. sourceforge.

net

[2] Código fuente de IPtables: http://www.

netfilter.org

[3] Código fuente del Kernel: http://www.

kernel.org

RECURSOS

Un rápido vistazo al (bastante simplifi-

cado) diagrama que muestra cómo un

paquete circula a través de IPtables

(Figura 3), probablemente nos haga

suponer que todos los paquetes

entrantes pasan por las tablas mangle y

nat en la cadena PREROUTING, y por

ello, que los paquetes salientes pasan

por las mismas tablas, pero de la cadena

POSTROUTING. Si esta suposición fuera

correcta, se podría colocar L7 en ambas

cadenas.

Desafortunadamente, esto tan sólo se

aplica a las cadenas en la tabla mangle.

La tabla nat tan sólo llega a ver el primer

paquete de una conexión si se está

usando DNAT o SNAT. El código de

seguimiento de las conexiones corta

justo en el segundo paquete y se

encarga de todo lo demás, enrrutando

los paquetes sin consultar la tabla nat,

después de todo, la decisión NAT ya ha

sido tomada.

Intentar usar L7 en este punto está con-

denado al fracaso, ya que el punto más

temprano en el que L7 puede identificar

un protocolo es en el paquete cuarto

(siguiendo el saludo a tres bandas), o

más adelante en la mayoría de los

casos.

L7 y la Tabla NAT

Figura 3: Con Iptables, los paquetes entrantes primero pasan por la tabla mangle en la cadena PREROUTING; a continuación le sigue la tabla

NAT. Si el paquete tiene como destino otro equipo, simplemente se pasa a la tabla mangle de la cadena POSTROUTING.

Asterisk • ADMINISTRACIÓN

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

Actualmente existen varios

motivos por los que las empre-

sas están planteándose la inte-

gración de sus redes de voz y datos. En

primer lugar está la reducción de costes

y personal. En segundo lugar, la mejora

en las comunicaciones y la productivi-

dad de los empleados. Y como tercera

razón de peso encontramos las aplica-

ciones novedosas que pueden implemen-

tarse y que, sin duda, mejoran la comu-

nicación con los clientes.

ASTERISK: la solución parala convergenciaHace 4 años un amigo y yo decidimos

montar una empresa de telefonía IP. Yo

tenía experiencia en sistemas IP usando

el protocolo h323, incluso había desa-

rrollado sistemas de tarificación con

dicho protocolo basándome en el

GNUgatekeeper (un servidor de seña-

lización para sistemas de telefonía IP

usando el protocolo h323), que era una

de las alternativas más fiables al soft-

ware propietario de aquel entonces.

Montamos una solución de telefonía IP y

sólo nos faltaba el hardware para inter-

conectar con la red de telefonía tradi-

cional, llamado gateway o pasarela de

VoIP. Miramos el mercado, y el equipo

que necesitábamos para 60 llamadas

simultáneas costaba unos 8000 euros.

En aquel momento comenzaba a sonar

el nombre de Asterisk: una plataforma de

telefonía IP que lo hacía todo. Asterisk es

un servidor de telefonía IP multiprotoco-

lo con todas las funcionalidades de una

centralita tradicional, que además puede

actuar como gateway o pasarela entre las

redes de VoIP y las redes de telefonía

tradicional, o PSTN, usando hardware

compatible tipo Digium o Sangoma. Tras

investigar un poco sobre el proyecto y

realizar los cálculos económicos decidi-

mos arriesgarnos y usar Asterisk como

nuestra pasarela principal, que en una

primera fase fue diseñada para soportar

30 llamadas simultáneas a la red de tele-

fonía tradicional. Los resultados finales

fueron mejores de lo esperado y hoy no

sólo lo usamos como gateway, sino que

además lo usamos como servidor SIP

para el registro de clientes. En este artícu-

lo explicamos cómo se puede usar

Asterisk como gateway, para dar salida a

las llamadas que provienen de una red IP

en la red de telefonía tradicional (PSTN).

¿Por dónde empezar?El nombre de Asterisk proviene del

carácter (*) usado como comodín en los

sistemas Linux. Es el nombre perfecto

para esta PBX por varias razones, la más

importante de las cuales es la variedad

de interfaces con las que Asterisk puede

conectar, incluyendo:

• Interfaces analógicas, como líneas

RTB, llamadas FXO, o teléfonos

analógicos, llamadas FXS

• Circuitos digitales, tipo E1 ó T1

(véase Figura 1)

• Protocolos VoIP, como SIP, h323,

MGCP, IAX

Así que lo primero que haremos será

definir los requisitos del sistema Asterisk

que queremos montar. Dicho sistema

debe ser capaz de interconectar una red

VOIP formada por teléfonos IP que usan

el servidor Asterisk como servidor de

registro y enrutamiento hacia la red

PSTN.

En este tipo de sistemas el parámetro

más significativo es el número de lla-

madas simultáneas que ha de soportar el

gateway en hora punta. En nuestro caso

el número máximo de llamadas

simultáneas será 30.

Sistema avanzado de telefonía IP con Asterisk

BUENO, BONITO YBARATO

Sistema avanzado de telefonía IP con Asterisk

BUENO, BONITO YBARATO

Si tu centralita no da para más, sólo necesitas un ordenador para montar una nueva centralita IP con servicios

avanzados de telefonía. POR MEHDI CHOUIKH

que más nos

guste: en nuestro

caso instalamos una DEBIAN SARGE

con un kernel 2.6.8. Después de la insta-

lación del sistema operativo, debemos

instalar algunos paquetes necesarios

para la compilación de Asterisk y de los

drivers Zaptel para tarjeta de comunica-

ciones:

• kernel-headers.

• bison.

• ncurses-dev.

• libssl-dev.

• libnewt-dev.

• zlib1g-dev.

• initrd-tools.

InstalaciónAntes de comenzar la instalación,

descargamos el software necesario desde

[1] para instalar Asterisk y Zaptel, y

seguimos los pasos que aparecen en el

Listado 1.

ConfiguraciónAquí nos metemos en faena de verdad,

ya que comenzaremos a construir nues-

tro sistema Asterisk. Para ello tendremos

que modificar los siguientes archivos de

configuración de la carpeta /etc/asterisk

y el fichero Zaptel que se encuentra en

/etc:

• Zaptel.conf: Aquí irá la configu-

ración de bajo nivel para la interfaz

de hardware. Configuraremos los 30

canales de la E1.

• Zapata.conf: Asterisk usa este

fichero para configurar y determinar

cómo se va a comunicar con el hard-

ware. Desde este fichero podemos

controlar varios parámetros como

identificación de llamadas entrantes,

desvío de llamadas, cancelación de

eco y muchos más.

• Extensions.conf: El plan de marcado

será simple, pero demostrará que

nuestro sistema funciona.

• Sip.conf: Donde configuraremos todo

lo relacionado con el protocolo SIP,

desde su comportamiento global

hasta los usuarios autorizados y sus

parámetros.

Vamos a comenzar configurando el canal

Zaptel. Para ello modificaremos el fichero

/etc/zaptel.conf en función del tipo de inter-

faz telefónico que tengamos. Vamos a

hablar de dos de ellos: los SPAN para acce-

sos primarios y los fxsks para líneas analó-

gicas RTB.

La configuración de los SPAN tiene el

siguiente formato de configuración:

span=<spannum>, <timing>,U

<LBO>, <framing>, <coding>

donde spanum es el número del conector

de entrada, timing es el parámetro que

especifica si la señal de reloj la propor-

ciona el proveedor (valor 1) o no (valor

0).Y LBO es el valor que nos indica el

nivel de potencia de la señal, que varía

en función de la distancia a la central:

por defecto es 0 salvo que el proveedor

indique lo contrario. framing y coding

definen cómo nos comunicamos con el

hardware para un acceso E1. framing

toma el valor hdb3 y coding el valor crc4.

1- Elección del Hardware: empezare-

mos eligiendo el hardware de nuestra

máquina teniendo en cuenta que nues-

tro Gateway ha de ser capaz de soportar

en hora punta la conversión de telefonía

tradicional a IP de 30 llamadas

simultáneas, la tarea principal de este

equipo es la conversión entre dos proto-

colos, es decir, el recurso más preciado

es la CPU. Para nuestro caso hemos

elegido un Pentium 4 a 3Ghz con 1MB

de CACHE y 512 MB de RAM. El resto de

hardware del equipo no es tan crítico.

2- Elección de la tarjeta de comuni-

caciones: para poder realizar 30 lla-

madas simultáneas, existen dos

posibilidades. La primera es contratar

30 líneas analógicas RTB. Esto es poco

viable: la placa base de un ordenador de

gama media-alta tiene como máximo

seis slots PCI, por lo que sólo podemos

usar 6 tarjetas Digium PCI de 4 puertos

FXO, es decir 24 líneas como máximo.

Además el coste de dichas tarjetas es

elevado, cada una supone el 40% del

precio de una tarjeta E1. La segunda

posibilidad es mediante un acceso

Digital E1 usando una tarjeta Digium

TE110P.

3- Instalación del sistema operativo:

una vez tengamos todo el hardware

montado, instalaremos la distro Linux

ADMINISTRACIÓN • Asterisk

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

01 # cd /usr/src

02 # svn checkout http://svn.digium.com/svn/asterisk/branches/1.2

asterisk-1.2

03 # svn checkout http://svn.digium.com/svn/zaptel/branches/1.2

zaptel-1.2

04 # svn checkout http://svn.digium.com/svn/libpri/branches/1.2

libpri-1.2

05 # cd ../libpri-1.2

06 # make clean; make install

07 # cd zaptel-1.2

08 # make clean; make install

09 # cd ../asterisk-1.2

10 # make clean; make install; make samples

Listado 1: Instalación

Figura 1: Tarjeta Sangoma para Interfaz E1 y una Digium para líneas

analógicas.

Figura 2: Hardware de telefonía IP [5].

En caso de haber elegido línea analógi-

ca RTB en lugar de span usamos

fxsks=número-interfaces para las líneas

telefónicas [2].

Ahora pasaremos al /etc/asterisk/za-

pata.conf. Este fichero es el más com-

plejo, ya que encontramos muchos

parámetros (véase Listado 3). El fichero

tiene una sola sección [channels], en

donde especificamos el modo de seña-

lización y los distintos parámetros para

el uso de la tarjeta Zaptel. En el Listado

3 hay un ejemplo con los parámetros

más usados, el primero es context y se

refiere a la sección del plan de marcado

(extensiones.conf) donde definimos las

acciones a realizar con las llamadas

recibidas. transfer es el parámetro que

nos permitirá transferir las llamadas

recibidas por este canal. signalling

define el modo de señalización que usa

la tarjeta Zaptel y tiene que coincidir

con lo definido en el zaptel.conf. En

nuestro caso el valor es “pri_cpe”, que

corresponde a los accesos E1. La

siguiente opción es SWITCHTYPE, que

nos define el tipo de marcado de un

canal E1, y el valor más común es

“euroisdn”, aunque depende del

proveedor del servicio. Para poder

habilitar los parámetros de identifi-

cación de llamada usamos los paráme-

tros usecallerid, igual a “yes”, y callerid,

igual a “asreceived”; para eliminar el

eco creado por las líneas analógicas

jugaremos con las opciones echocancel

y echocancelwhenbridged. Los pon-

dremos a “yes”, pero aún así el cance-

lador requiere un cierto tiempo para

aprender a corregir el eco: para esto

añadimos el parámetro echotraining con

el valor “yes”. Esto le indica a Asterisk

que envíe un tono al inicio de cada lla-

mada para medir el eco de la línea, y

aprender así con mayor velocidad el com-

portamiento del eco. Si aún así seguimos

teniendo algo de eco podemos terminar

de cancelarlo jugando con las ganancias

de recepción rxgain y transmisión txgain:

sus valores pueden variar de -100% a

100%. Finalmente definimos el número

de canales que tenemos, e incluso

podemos agruparlos para ser tratados

como uno solo. En nuestro caso hemos

agrupado los 30 canales en un solo

grupo. Para ver más opciones de configu-

ración de zapata.conf véase [4].

Una vez modifi-

cados los ficheros

zaptel.conf y za-

pata.conf, ten-

dremos que com-

probar si funciona

la configuración

que hicimos. Para

ello vamos a car-

gar los drivers de

zapatel con las órdenes #modprobe zap-

tel y #modprobe wctw11xp. Tras esto,

ejecutamos el configurador del zaptel

con #ztcfg -v, que nos mostrará el

número de canales configurados (véase

Figura 3).

Pasamos a ver el fichero sip.conf,

donde decidimos quién puede regis-

trarse en nuestro sistema y con quién

nos podemos registrar. Vemos que está

estructurado en secciones. La primera

es [general] donde se configura el com-

portamiento global del protocolo y el

canal SIP:

[general]

port=5060U

;Puerto de registro

bindaddr=0.0.0.0U

;dirección ip donde escuchar

;la ip 0.0.0.0 = todas

context=defaultU

;Contexto por defecto

disallow=allU

;Deshabilita todos los codecs

allow=gsmU

;Permite sólo el códec gsm

A continuación encontramos una sec-

ción por usuario tipo [usuario] y luego

los parámetros del usuario como sigue:

[100]

type=friend

secret=suclave

context=salientes

callerid="Usuario 1" <100>

host=dynamic

canreinvite=yes

disallow=all

alolow=gsm

Después de crear los usuarios SIP, sólo

nos falta diseñar nuestro plan de marca-

do para poder llamar y recibir llamadas.

Para ello modificamos el fichero exten-

sions.conf, considerado por muchos el

fichero más importante de Asterisk. Este

fichero a su vez tiene varias secciones, la

primera de las cuales es general, y

comienza siempre así:

[general]

static=yes

writeprotect=yes

Las siguientes secciones son los contex-

tos. Cada contexto tiene al menos una

extensión (una extensión es un número

de teléfono que puede estar compuesto

por números, letras o una combinación

de ellos). Cada extensión tiene priori-

Asterisk • ADMINISTRACIÓN

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

01 span=1,1,0,ccs,hdb3,crc4

02 # Span 1 --es un comentario

03 bchan=1-15

04 dchan=16

05 bchan=17-31

Listado 2: Ejemplo deConfiguración de

zaptel.conf para un E1.

01 [channels]

02 context=entrantes

;Contexto donde entran las

llamadas en plan de marcado

03 transfer=yes ;Nos

permitirá transferir llamadas

04 signalling=pri_cpe

05 switchtype=euroisdn

06 usecallerid=yes

;Habilita y deshabilita el uso

del número llamante

07 echocancel=yes

;parámetros para la

cancelación del eco

08 echocancelwhenbridged=yes

09 echotraining=yes

10 group=1

11 rxgain=0.0 ;ganancia

en db de las señales de

entrada y salida.

12 txgain=-5.0

13 channel => 1-15

14 channel => 17-31

Listado 3: Ejemplo deConfiguración de

zapata.conf para un E1.

Figura 3: Resultado mostrado tras configurar Zaptel.

[default]

exten => s,1,Answer

exten => s,2,Playback(invalid)

Luego definiremos el contexto para lla-

madas salientes, al que llamaremos

[local], que tendrá una sola extensión

para las llamadas nacionales que sólo

permite llamadas que empiecen con 9 y

en las que el segundo dígito sea una cifra

entre 1 y 9, del tercero al último entre 0 y

9 y con la longitud que sea. Esta exten-

sión tiene dos prioridades, la primera eje-

cuta la aplicación Dial eligiendo el grupo

1 del canal Zaptel usando la tarjeta que

configuramos llamando al número local

definido por la variable ${EXTEN} que

no es más que el número marcado.

[locales]

exten => _9ZXXXXXXX,1,U

Dial(Zap/g1/${EXTEN},90,Tt)

exten => _9ZXXXXXXX,2,Hangup()

Finalmente definimos el contexto para

llamadas entrantes [entrantes] que

recibimos a través de nuestro acceso

telefónico.

[entrantes]

exten => 951233900,1,U

Dial(Sip/100,90,Tt)

exten => 951233900,2,Hangup()

Probando Probando, 1, 2, 3Por fin, ejecutamos Asterisk con el

comando Asterisk -vvvgc, configuramos

un teléfono IP software o hardware

(véanse Figuras 1 y 2), y probamos a

realizar llamadas a números locales

(véase Figura 4 con el resultado de la

consola de Asterisk). Finalmente rea-

lizamos una llamada a un número de

nuestras líneas (véase Figura 5) y vere-

mos cómo suena la extensión correspon-

diente, y al descolgar…¡todo funciona!

ConclusiónAdemás de lo contado, con Asterisk se

puede hacer cualquier cosa imaginable:

un centro de llamadas de atención al

cliente, un sistema de respuesta interac-

tiva, un sistema de consulta de pedidos,

donde al cliente le contesta una operado-

ra digital que le presenta unas opciones,

introduce su código, y le responde con el

estado de su pedido… entre otra

infinidad de cosas. Lo único que hace

falta son ganas y algo de tiempo. Para

más información recomendamos una

visita a [6]. �

dades y aplicaciones para ejecutar.

Gracias a los contextos podemos orga-

nizar nuestro plan de marcado y

restringir llamadas a algunos destinos

a los usuarios que queramos.

Las extensiones tienen el siguiente

formato:

exten => número, prioridad,U

aplicación(arg1,arg2,...)

donde número es el número de telé-

fono, la prioridad es el orden en la

cual se ejecuta, y finalmente apli-

cación, la aplicación a ejecutar. La

más importante de estas últimas es

Dial(), que permite realizar llamadas,

y a su vez tiene el siguiente formato:

Dial(canal/número, tiempo espera,

opciones)

El primer contexto en nuestro plan

es [default], Asterisk lo usa para

manejar las llamadas no autorizadas o

no definidas para el canal SIP, así que

lo único que pondremos en este con-

texto es un mensaje que avisa al

usuario de que el número al que están

llamando no es correcto.

ADMINISTRACIÓN • Asterisk

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

[1] Sitio oficial de asterisk http://www.

asterisk.org

[2] Información adicional sobre la confi-

guración del Zaptel: http://www.

digium.com/downloads/

configuring_zaptel.pdf

[3] Cómo configurar el wanpipe de San-

goma: http://sangoma.editme.com/

wanpipe-asterisk-configure

[4] Información adicional sobre el fichero

zapata.conf: http://www.digium.com/

asterisk_handbook/zapata.conf.pdf

[5] En este sitio podemos comprar telé-

fonos IP y servicios de telefonía

IPhttp://www.mitelefonovirtual.com

[6] Wiki acerca de telefonía IP, con énfasis

en Asterisk http://www.voip-info.org

RECURSOS

Figura 5: La consola de Asterisk muestra esto al realizar una llamada.

Figura 6: La consola de Asterisk muestra esto al recibir una llamada.

Mehdi Chouikh, es ingeniero

técnico de telecomunicaciones,

Responsable de VoIP de Uni-

versal Telecom Experts, y tiene

más de 4 años de experiencia

ofreciendo servicios de tele-

fonía y networking.

EL AUTOR

7373ISSUE 52 MARCH 2005W W W . L I N U X - M A G A Z I N E . C O M

Bienvenidos a Linux UserÉsta es la sección dedicada a la presentación de software interesante y útil que nos ayuda en nuestro quehacer diario con

el escritorio Linux. Aquí aprenderemos a utilizar software estándar de una manera más eficiente, adquiriremos valiosos

conocimientos y descubriremos nuevas y apasionantes aplicaciones.

Ktools: Klik 66

Klik nos trae la instalación cómoda al escritorio de

KDE.

Chats con Irssi 69

La capacidad de Irssi para correr scripts hacen que

sea en un gigante entre todas las herramientas de

chat .

Desktopía: Wmii 72

Para gobernar el escritorio desde el teclado, échale un

vistazo a este potente administrador de ventanas.

Cine en PSP 77

Con Linux se pueden cargar películas en una consola

de juegos portátil Playstation (PSP).

Educación: Squeak II 79

Squeak no pretende que los niños (y mayores) apren-

dan a programar, sino que programen para aprender.

Linea de Comandos: cat, more, less 84

Herramientas prácticas como cat, less, y head son

ideales para visionar (y modificar) textos.

Juegos: Lugaru 86

Si pensabas que los conejitos eran blanditos y tiernos,

es que no conoces a Lugaru, el conejo ninja.

grama. El sistema Linux básico per-manece inalterado. Pueden inclusograbarse las aplicaciones en stick USBpara tenerlas disponibles para una dis-tribución live.

Contenidos del KernelKlik requiere algunos preparativos antesde poder suarse: Suse Linux 10 (y OpenSuse) y sistemas basados en Debianvienen con los pre-requisitos (ver elcuadro “Distribuciones Soportadas”).Tampoco olvidemos Knoppix y sus deriva-dos, los cuales desencadenaron el desa-rrollo de Klik. Esta historia también expli-ca por qué el sistema se encontrabadisponible para el escritorio KDE sola-mente al principio. Gracias a numerososcontribuyentes, Klik corre ahora tambiénen Gnome. Si su sistema Linux no seencuentra soportado directamente, el ker-nel deberá soportar al menos el sistema deficheros Cramfs. Las fuentes del kerneltípicamente disponen de este soporte enforma de módulo, pero puede compilarseestáticamente dentro del kernel. Lo mismose aplica al dispositivo de bucle para mon-tar los ficheros de imagen.

El ClienteDespués de completar todos los prerrequi-sitos, puede escribirse en la línea decomando lo siguiente: wget

klik.atekon.de/client/install -O- | sh. Conesto se descarga el script de instalacióndesde la página de inicio de Klik, y seinstala el cliente Klik. En sistemas multi-usuario este paso ha de llevarse a cabo porcada usuario que esté corriendo Klik,cuando no hay una instalación globalactualmente. Si se está corriendo el scriptpor primera vez, y no hay un su-perusuario, se requieren los siguientescomandos:

su

sh klik-cmg-install-root

Esto añade unas cuantas líneas necesariaspara Klik a /etc/fstab. Después de comple-tar la instalación, aparece una ventanaindicando que todo ha ido bien. A conti-nuación, aparece Konqueror mostrando lapágina de inicio de Klik con un menú detodas las aplicaciones que utiliza Klik re-gistradas con el proyecto. No existeningún tipo de restricción para usar elnavegador konqueror; para más detallespuede verse el cuadro “OtrosNavegadores”.

¡Klik-éame!El script de instalación de Klik registratambién un protocolo nuevo conKonqueror durante la instalación. Si luegose introduce una URL como klik://xvier,Konqueror pasa tu solicitud al clienteKlik, el cual descarga xvier de Internet ylo coloca en el escritorio, esto puede ha-cerse usando el directorio$HOME/Desktop. Si se comprueba eldirectorio, lo que se verá será un granfichero. Pero si se hace click en el iconodel fichero arrancará la aplicación ocultaen dicho fichero.

66

LINUX USER • KTools: Klik

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

Los sistemas Linux que corren direc-tamente desde el CD son muy po-pulares. Estas live distribuciones no

solamente ayudan a atraer a nuevosusuarios hasta el mundo de Linux sinoque además resultan útiles si se necesitareparar un sistema dañado. Cuando algose estropea, puede que se vea en lasituación en la que no todo lo que se nece-sita para arreglarlo está en el CD. Todo elmundo pasa por esto tarde o temprano yacabamos hartos de dependencias noresueltas y librerías perdidas sobre sis-temas de ficheros de sólo lectura. Inclusosi se consigue instalar la herramienta, nosiempre se logra resolver el problema.También ocurre que los usuarios deseanprobar nuevos programas en sistemas deproducción sin tener que pasar por unainstalación completa.

El proyecto Klik convierte todos estossueños en realidad. Klik son las siglas deKDE-based Live Installer for

Knoppix+Kanotix. Sus creadores hanadoptado el diseño hecho tan popular porApple. Los paquetes son típicamentearhivos especiales comprimidos que con-tienen todos los ficheros y libreríasrequeridas junto con la aplicación yalgunos metadatos. Para instalarlo, sim-plemente se descarga el fichero de Internety se deja en el escritorio; el sistema opera-tivo arranca la aplicación almacenada enel archivo. El sistema oculta los procesosdel usuario (Figura 1). Como no se tratade una instalacion complicada que con-suma mucho tiempo ni es preciso exten-der los ficheros por todo el árbol del sis-tema de ficheros, pueden incluso insta-larse diferentes versiones del mismo pro-

Distribución de Software con Klik

UN KLIK

Las siguientes distribuciones soportan el

sistema Klik: Suse Linux 10 (incluyendo

Open Suse), Debian, Linspire, Ubuntu,

Kubuntu, Kanotix y Knoppix. Fedora 4

está en tramitación. Gentoo y Mandrake/

Mandriva requieren un nuevo kernel ya

que no soportan Cramfs. Las versiones

actuales de Knoppix, Kanotix y la ver-

sión aumentada-SLICK de Open Suse

(ver http://www.opensuse.org/

SUPER_KLIK) y CPX-MINI incluyen el

cliente Klik.

Distribuciones Soportadas

Klik nos trae la instalación cómoda al escritorio de KDE.

POR TIM SCHÜRMANN

67

KTools: Klik • LINUX USER

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

Una búsqueda rápida en Internet,enlaces en la página de inicio del programao el catálogo de la página de inicio de Kliknos informan de los programas representa-dos en cada URL. En el momento en que seestá escribiendo este artículo, se encuen-tran disponibles unas 4000 aplicaciones. Sise hace clic en un enlace se inicia la descar-ga, la cual irá seguida por el modelodescrito anteriormente.

Si se muestra un mensaje que dice Error

while trying to run program (esto es, erroral intentar correr el programa), lo normal esque se deba a un error en la red. O bien laconexión a Internet se ha caído, o bien elservidor Klik está temporalmente nodisponible. A juzgar por lo que se anuncióen el foro de Knoppix, esto ocurre muy fre-cuentemente. Si se desea correr un servidorKlik propio, se aconseja leer el cuadro“Servidor Klik” para más detalles.

Bajo la CapotaA excepción de los cambios puntuales alfichero /etc/fstab, ninguna de esas tareasrequieren privilegios de superusuario. El

script de instalación solamenteafecta al directorio de inicio delusuario. Pero si se comprueba eldirectorio de inicio para señales dela instalación de un cliente Klik,puede que no se vea el cliente aprimera vista. Klik se compone dedos cortos script denominados .klik

y .zAppRun. Los otros cambiosafectan simplemente al fichero deconfiguración de KDE.

Esta es la razón por la que Klikfunciona aún sin una GUI. Cuandose arranca el script, pide el progra-ma desde el servidor Klik. Si el pro-grama existe, el servidor devolveráotro script. Ésta, concoida como“receta”, contiene detalles dedónde se encuentra disponible elpaquete de binario y una descrip-ción de cómo crear un paquetetodo-en-uno para la distribución encuestión desde los ficheros con-tenidos en el paquete. Este plan deconstrucción incluye detalles deresolución de dependencias. El pro-ducto finalizado hace referencia aun paquete. Hay ejemplos de re-cetas para seguir en [3] y [4]. Laslibrerías y recursos requeridos paracorrer el programa se encuentranalmacenadas en el paquete. Paraconseguirlo, los scripts Klik pasande contrabando los componentesdel paquete para que no los vea eladministrador de paquetes. Estoexplica el hecho de que versonesdiferentes de un mismo programapueden entenderse en una coexis-tencia pacífica.

Como se habrá entendido, estospaquetes no se encuentran disponiblesbajo una forma lista para correr. Lospaquetes se montan justo-a-tiempo, esdecir, son generados individualmentecuando un usuario pide un paquete parauna distribución específica. Esto no sola-mente ahorra a los proveedores del servi-cio de Klik mucho espacio en la web,sino que también significa que los desa-rrolladores conservan el control de suspaquetes de programas.Desafortunadamente, también existeninconvenientes. Como cabría esperarse,la generación de paquetes para produc-tos de software complejos es de todomenos trivial. Por ejemplo, Suse usa elformato de paquete RPM, lo cual signifi-ca que ha de convertir los paquetes

Debian. Y diferentes distribucionesvienen con entornos de software dife-rentes. Como consecuencia de ello, lasrecetas no pueden ser iguales para todaslas distribuciones. Incluso existe unarchivo de paquete separado para SuseLinux en [2], aunque ha estado inactivodurante muchos meses.

Existe otro asunto relacionado con estetema. Como la mayoría de las 4000 re-cetas del servidor Klik fueron generadasautomáticamente, este servidor disponede un gran número de paquetes que nodarán un paquete independiente. En estecaso se verá el mensaje This package

contains no application. klik can't han-

dle it (es decir, el paquete no contieneuna aplicación. klik no puede manejar-

El cliente Klik siempre entra a un servi-

dor Klik basado en Internet, aunque no

es mala idea correr un servidor propio,

especialmente en intranets cerradas,

resultando ser la mejor manera de ase-

gurarse de que sus usuarios consigan

las versiones correctas de los programas

correctos. Para apuntar al cliente Klik al

servidor, se busca la línea en el script

install, la cual invoca a wget para

recoger las recetas. Se cambia la línea

para que refleje la dirección del servidor

web, asegurándose de que este servidor

web dispone de las recetas requeridas.

Servidor Klik

Klik soporta unos cuantos navegadores.

Opera, la suite de Mozilla y su sucesor

Firefox se configuran automáticamente

con el script de instalación. Es necesario

registrar el protocolo en los restantes

casos, o si se tienen dificultades. La

mayoría de los navegadores ofrecen un

elemento de menú en algún lugar en las

configuraciones o de las preferencias de

diálogo. En Opera, por ejemplo, ésta es

Preferences... Advancedtab, seguido de

Programs. Después de localizar el ele-

mento correcto se selecciona el proto-

colo klik y se asigna la aplicación .klik en

el directorio de inicio.

Otros Navegadores

Figura 1: Perspectiva de la arquitectura de Klik: el

navegador pasa el enlace Klik (1) al cliente, que

contacta con el servidor Klik (2). El servidor

devuelve un script, denominado recipe (receta) (3),

el cual será usado por el cliente para crear un

AppDir (4). Luego el directorio es empaquetado y

comprimido (5), para finalmente ser montado por

el script .zApp (6).

LasGolosinasEl script .klik

monta la ima-gen en/temp/app/1 através del dis-positivo loop.Si se hace clicsobre el paque-te en kon-queror, puedeaccederse alcontenido através deldirectorio. Sise arranca más de una petición de unaaplicación, Klik asigna un número deserie en vez de un 1. El segundo pro-grama residiría en /temp/app/2.

Para permitir que los usuarios nor-males se beneficien de este diseño, elfichero necesita puntos de montaje en/etc/fstab. El script de instalación deKlik crea inmediatamente las entradasal punto de montaje requerido. Si esnecesario, los usuarios pueden desem-paquetar el paquete usando herra-mientas del sistema de ficheros:/sbin/fsck.cramfs -x Myprg Myprg.cmg,y arrancar a continuación manual-mente el script wrapper: cd Myprg;

./wrapper. Esto significa que se puedemodificar el paquete y luego regene-rarlo introduciendo /sbin/fsck.cramfs

Myprg/Myprg.cmg.

Tabla de Ocho EntradasEl kernel de Linux actual restringe elnúmero de dispositivos loop montadossimultáneamente. En otras palabras, nopueden arrancarse al mismo tiempo másde ocho aplicaciones desde los paquetes.Aunque este número podría incremen-tarse (hasta 64 en nuestro ejemplo) através de la opción linux max_loop=64

o a través de una entrada para options

loop max_loop=64 en /etc/modules.conf,será dificíl correr un sistema de produc-ción basado en paquetes, una de lasrazones es atribuible a la caída delrendimiento.

Y por cierto, los AppDirs solamentepueden alojar programas que se portenbien. Si una aplicación necesita repartirficheros de configuración a lo alrgo yancho del sistema, con Klik te estre-llarás. Además, no existe ninguna garan-tía de que Klik ayude a evitar conflictos

entre las versiones. Cuando Klik montalos paquetes en el árbol del sistema deficheros, podrían existir conflictos conpredecesores instalados, dependiendo delas dependencias que necesitan serresueltas.

ConclusionesKlik es limpio, elegante y está estructura-do de manera simple, incluso bajo lacapota . Esto hace de su instalación y dela distribución de los paquetes de soft-ware un juego de niños. Aconsejamos alos desarrolladores echar un vistazo alsistema.

Sin embargo, Klik no es apropiadopara cualquier tarea. Las restricciones aocho aplicaciones simultáneas y la faltade un administrador de paquetes con unmecanismo de actualización automático,han impedido que Klik sustituya a otrassistemas de paquete. �

lo). La gente corre el servidor Klik qui-tando poco a poco los paquetes que cau-san este problema, aunque aún quedanmuchas recetas inútiles cuando se estáescribiendo este artículo.

Paquetes EmpaquetadosPara comprender lo que ocurre cuandose arranca una aplicación Klik, es precisoechar una ojeada a la estructura delpaquete. Éste contiene un sistema deficheros comprimido con todos los direc-torios de la aplicación y los ficheros enellos contenidos. Klik usa el sistema deficheros Cramfs o Zisofs.

La figura 2 muestra una nítida pers-pectiva de cómo trabaja Klik. El cons-tructor de paquetes recoge en primerlugar todos los ficheros y librerías parauna aplicación en un directorio único, elcual se referencia como el AppDir(Application Directory o directorio deaplicación). Un script especial tituladowrapper reside en la raíz de cada AppDir.

Cuando un usuario hace click en unAppDir, el sistema operativo no cambiaal subdirectorio, en su lugar arranca elscript. Como los directorios presentandificultades para ser distribuidos equi-tativamente, el constructor de paquetes amenudo añade un AppDir a un paqueteconocido, el cual puede ser un archicoZIP, o en el caso de Klik, una imagen.

No existen distinciones claras entre lostérminos AppDir y paquete. Por ahífuera, es habitual encontrar el uso de losvocablos tanto para describir lo mismocomo cosas diferentes.

LINUX USER • KTools: Klik

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

[1] Página de Inicio de Klik y almacén de

software: http://klik.atekon.de/

[2] Archivo con paquetes listos para cor-

rer para Suse Linux 10: http://

opensuse.linux.co.nz/klik/10.0/

[3] Receta muestra para Scribus: http://

klik.atekon.de/scribus.recipe.example

[4] Otra receta muestra con anotaciones:

http://klik.atekon.de/architecture/

recipe.php

[5] Foro de Klik en las páginas de Knop-

pix: http://www.knoppix.net/forum/

viewforum.php?f=17

[6] Información para desarrolladores:

http://klik.atekon.de/docs/

?page=A%20note%20to%20applicati

on%20developers

RECURSOSEl script .klik crea siempre un paquete

con el sufijo .cmg y luego arranca la apli-

cación el paquete que contiene. Sin

embargo, no hay necesidad de ello si el

paquete ya existe en el escritorio. En

este caso, simplemente se puede correr

.zApp pasando como un parámetro el

nombre del fichero del paquete al script.

Si se prefiere, puede usarse Binfmt para

registrar los paquetes como ficheros eje-

cutables:

mount -t binfmt_misc none U

/proc/sys/fs/binfmt_misc

echo ' :CMG:E::cmg::U

/pfad/zu/ .zAppRun: ' > U

/proc/sys/fs/U

binfmt_misc/register

Arranque Directo

Figura 2: Cada paquete comprime su propio sistema de ficheros Linux

con un script wrapper en la parte superior. El directorio con los ficheros

está referido al AppDir. El directorio AppDir está comprimido para Klik.

Tal y como muestra la figura, pueden coexistir múltiples paquetes.

Irssi es un cliente de chat basado entexto que se ejecuta desde la línea decomandos. No debe cometerse el

error de pensar que se trata de unaantigualla o de que tiene unas funcionali-dades limitadas; de hecho, Irssi supera amuchos de sus contendientes ganando

fácilmente en lo que respecta a riqueza yusabilidad.

Irssi es una herramienta de la línea decomandos, así que, en primer lugar se abreuna consola y luego, para arrancar el pro-grama, se escribe irssi. Se mostrará la ven-tana de estado, que es donde aparecen los

textos del servidory de ayuda.

A continuaciónpuede intro-ducirse /connect

irc.nombre_servi-

dor.com paraseleccionar elservidor IRC quese haya elegido.Seguidamente,para introducirseen una sala dechat se escribe/join #nombresala

o /j #nombresala.Si uno se

conecta a múlti-ples servidores,puede presionarse[Ctrl]+[X] para

saltar de un servidor a otro (esto suponeque aún nos encontramos en la ventanade estado). Cuando se entra en una salade chat, automáticamente se cambia aotra ventana; la línea de estado nos diceel número de ésta. Dicha línea de estadonos ofrece, de izquierda a derecha, lossiguientes detalles:

[Hora][Tu_Nick U

(+Parametrosusuario)]U

[Número_Ventana:U

#Nombresala U

(+Parámetroscanal)]

Pulsando [Alt]+[Número_Ventana] sepuede saltar entre ventanas (es decir,[Alt[+[1] lleva hasta la ventana de estado),o [Alt]+[Flecha] para cambiar a la ventanasiguiente. Si se pulsa [AvPg] o [RePg] eltexto se desplaza hacia arriba o abajo en laventana.

Buenas ConexionesAntes de comenzar a explorar lasopciones de ventana, configuraremosnuestro ordenador para que se conecteautomáticamente a la red IRC cuando searranca el programa. Para listar las redesIRC preconfiguradas se escribe /ircnet.Irssi conoce las redes más importantes

69

Chat • LINUX USER

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

Chat basado en texto con Irssi

¿HABLAMOS?

El cliente chat de la consola Irssi es poderoso aun siendo frugal

en el uso de recursos. Su capacidad para correr scripts hace que

sea un gigante entre todas las herramientas de chat.

POR MIRKO ALBRECHT

Figura 1: La página web de Irssi cuenta con numerosos consejos para el

programa de chat basado en texto, incluyendo varios scripts y temas.

Puede especificarse un canal de la si-guiente forma:

/channel add -auto U

#sala red contraseña

De nuevo, Irssi puede usar la opción -auto

para permitir conectarse automáticamentea un canal cuando se arranca el programa.El autocompletado de comandos (al igualque ocurre es Bash) es un efecto secun-dario positivo del almacenamiento de datosde esta manera. Supongamos que la conex-ión a irc-hispano se produce sin que se usela opción -auto; para encontrar una sala dechat se escribe /conn[Tabulador] ir[Tabu-

lador]. Irssi lo ampliará para ofrecer /con-

nect irc-hispano. Esto funciona muy biencon salas de chat preconfiguradas y /save

almacenará las entradas en ~/.irssi/config.

ÓpticaCuando se comienza aescribir en una sala de chates preciso fijarse en unascuantas cosas que podríadesearse cambiar. Por ejem-plo, la línea de estado en laparte inferior y la de asuntoen la parte superior son muydifíciles de distinguir deltexto de la ventana. Estopuede cambiarse si seinstala un tema. Existen unagran variedad de temas co-loreados para la consola Irssien [2]. Se mueve el ficherodescargado, nnombre.tema

al directorio ~/.irssi, yluego se carga el tema através del comando /set

theme nombre.tema (Figura2).

Si se abren distintas salasde chat al mismo tiempo esfácil perder la ventana a laque pertenece cada una delas salas de chat. En Irssi, losscripts en Perl pueden solu-cionar éste y otros proble-mas, pudiéndose encontrarmuchos ejemplos acerca deestos en la Web [3]. Así,puede usarse un script paraintegrar en Irssi el reproduc-tor de mp3 basado en texto,Mp3blaster con Irssi, o paramanejar URLs desde lasesión de chat a programas

externos, para añadir una simple funciónque crea una calculadora y otras muchascosas.

La barra de estado muestra los númerosde ventana de salas de chat en las que algoha cambiado bajo [Act:]; esto puedesuponer un problema si se dispone de unnúmero considerable de salas de chat.Después de todo, ¿cómo se puede esperarque pueda recordarse el número de canalque está corriendo en la ventana número 8?Para presentar el nombre del canal juntocon el número de ventana, se almacena elscript chanact.pl [3] en ~/.irssi/scripts y seejecuta el comando /script load chanact.pl

para añadir el script. Si no se desea ejecutarel script cada vez que se arranca Irssi, locopiaremos en ~/.irssi/scripts/autorum.

Listas de NicksOtra cosa que pueden echar de menos losveteranos de los chats es una lista de nom-bres de usuarios en el lado derecho de laventana. Aunque se puede utilizar elcomando de IRC /name para obtener unalista de usuarios, Irssi dispone de nuevo deuna solución gráfica. Se descarga el scriptde Perl nicklist.pl [4], versión, 0.4.6, y seinstala como ya se ha descrito anterior-mente. No es mala idea crear una copia delscript en ~/.irssi/scripts/autorum.

Se necesita el administrador de ventanasde la consola screen (que debería venir pre-instalada con la mayoría de las distribu-ciones) para añadir una lista de nicks en laparte lateral de la pantalla de Irssi. Searranca el programa escribiendo screen irssi

y a continuación, para cargar el script,/script load nicklist.pl. Finalmente sehabilita la lista escribiendo /nicklist screen

(Figura 3).Puede modificarse el ancho de la barra

introduciendo /set nicklist_width: y seexperimenta con un número entre el 10 y el15 para establecer la anchura. /set/nick-

list_automode screen le dice a la he-rramienta que ofrezca una lista de nicks lapróxima vez que arranque el programa. Elúnico detalle nimio es que el script noparece soportar el modo de ventana divi-dida, de modo que irssi tiende a destellarde vez en cuando cuando se intenta usar elcliente en una sesión remota.

Algunas salas de chat alojan más de 100usuarios al mismo tiempo. Aunque notodos pueden estar escribiendo al mismotiempo, no hay manera de que quepan enla lista de nicks. El comando /nicklist scroll

puede servir de ayuda en este sentido, y

tales como Efnet, Ircnet, Dalnet y Freen-ode. Si se desea añadir una nueva redIRC, se introduce /ircnet add nombre. Irssiguarda los servidores con la siguiente sin-taxis:

/server add - ircnet U

red dirección puerto

La opción -auto le dice que se conecte alservidor cuando se arranca el programa.Por ejemplo, si se desea configurar elacceso a irc-hispano.org, primero sería pre-ciso establecer la red. Para ello, se escribe/ircnet add irc-hispano. A continuación seañade un servidor a la red irc-hispano:

/server add -ircnet U

irc-hispanoU

thebe.irc-hispano.orgU

6667

LINUX USER • Chat

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

Figura 2: La web posee temas para su descarga.

puede asignarse un atajo de teclado alcomando. Ésta sería la forma de hacerlo:

/bind tecla command U

nicklist scroll -3

/bind tecla command U

nicklist scroll +3

Alternativamente, se abre el fichero ~/

.irssi/config en el editor de texto que seprefiera y se añaden las siguientes líneasal final del fichero:

keyboard = (

{ key = "meta2-P"; U

id = "command"; U

data = "nicklist scroll -3"; },

{ key = "meta2-Q"; U

id = "command"; U

data = "nicklist scroll +3"; }

);

En el ejemplo se mapean las teclas [F1] y[F2]. Si se prefiere usar otras teclas distin-tas, en [5] existe una tabla que contienediversos nombres para varias teclas defunción.

Consejos y TrucosExisten más trucos que ayudan a modificara Irssi según los requerimientos necesarios.Es un buena idea echar un vistazo a losscripts en [3]. Se descubrirán todo tipo decuriosidades, con distintos grados de utili-dad.

El hecho de que el programa se ejecuteen una ventana screen resulta práctico. Unavez que se arranca sobre X, permaneceráen el fondo incluso si se cierra el terminalde ventana inadvertidamente o de forma

deliberada (por ejemplo, abandonandoKDE/Gnome). Usar screen es bastantecomplicado, pero la siguiente línea decomandos puede ser de ayuda:

alias irssi=U

'if pgrep irssi;then screen -x U

irssi;else screen -S U

irssi irssi;fi'

Este alias se puede añadir al fichero .bashrc

en el directorio home. Lo que hace estecomando es arrancar Irssi en una ventanade screen y comprueba que se está ejecu-tando el cliente. Si el programa aún estáejecutándose, el comando continuará conla sesión actual.

Irssi permite definir atajos de tecladopara comandos complejos con innume-rables parámetros y opciones. Existen dostipos de comandos: los que se corren conbastante frecuencia, pero en variedad deescenarios, y aquéllos otros que necesitacorrer cada vez que contacta con el servi-dor. Puede usarse la opción autosendcmd

para manejar la última categoría. Puedeusarse un comando de este tipo para regis-trar el nombre de nick propio con Nickserv.El que sigue añade esta opción:

/ircnet add -autosendcmd U

"/^msg nickserv identify U

Contraseña; wait -freenodeU

2000" freenode

El comando contacta con el servicio deNickserv en la red Freenode.

Comandos frecuentes requieren unmétodo diferente: por ejemplo, /msg

chanser set #nombresala guard off, arranca

o apaga el bot del ChanServ, o lo que es lomismo, el operador de canal automático.Es posible usar un alias para definir unparámetro más corto, como sigue:

/alias BOTOFF U

"msg chanserv set U

#nombresala guard off"

ahora, escribiendo /botoff se eliminará elbot del ChanServ.

ConclusionesEl cliente de chat basado en texto Irssi esuna herramienta muy poderosa y, gracias alos scripts de perl, se le puede atribuir unaextensibilidad casi ilimitada. Este programaes una buenísima elección si se disfruta tra-bajando en la línea de comandos.

El volumen completo de comandos ylas configuraciones pueden llegar a in-timidar a más de uno, más aún si se echaun vistazo a los scripts que controlan alos clientes que comparten ficheros o allector de noticias. Pero que nadie seasuste: cada cual puede decidir qué fun-ciones de Irssi puede usar. �

Chat • LINUX USER

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

[1] Irssi download: http://irssi.org

[2] Temas de Irssi: http://irssi.org/themes

[3] Scripts de Irssi: http://irssi.org/scripts

[4] Script de la lista de nicks: http://

wouter.coekaerts.be/site/irssi/nicklist

[5] Mapeado del teclado de Irssi: http://

wouter.coekaerts.be/site/irssi/

keybindings

RECURSOS

Figura 3: Una lista de nicks ayuda a seguir la trayectoria de la sesión

de chat. (Ver la lista de nombres en la esquina superior derecha de la

pantalla). Para añadir la lista, se descarga y habilita el script de Perl.

Figura 4: Si se escribe /help en la ventana de estado se consigue ver

la lista de comandos (además existen un gran número de páginas de

ayuda en la web).

Wmii combina los atributos de desarro

llos tan venerables y populares como

Ratpoison [1], Ion [2] y Larswm [3]. Por

ejemplo, usa múltiples formatos y pes-

tañas. Aunque dispone de una caracterís-

tica nueva: Wmii puede ser controlado a

través de un sistema de ficheros virtual

basado en Sockets. El administrador de

ficheros tiene también una estructura

modular. Wmibar proporciona la barra de

estado y Wmimenu el menú. Wmikeys

maneja los atajos de teclado, Wmifs es

reponsable del sistema de ficheros y

Wmir administra la manipulación del sis-

tema de ficheros.

Instalación y ConfiguraciónPara la instalación se necesita el paquete

wmii-2.tar.bz2, que se encuentra

disponible en el área de descarga de la

página de inicio del proyecto Wmii [4].

Los usuarios pueden modificiar el sitio

basado en Wiki, que también ofrece una

gran variedad de paquetes para Debian,

Gentoo y Arch Linux. Para desempaque-

tar el sistema, se ejecuta el comando tar

xvzf wmii-2.tar.gz. Este paso crea un sub-

directorio wmii-2 que contiene el fichero

de configuración config.mk, que puede

ser modificado para que refleje las carac-

terísticas del entorno. Wmii prescinde

deliberadamente de un script configure,

aunque en la mayoría de los casos los va-

lores predefinidos funcionan bien.

Para compilar e instalar el programa se

escribe make y make install. Los únicos

requerimientos son el compilador de C,

GCC, y los ficheros de cabeceras de X (los

usuarios de Debian necesitarán el paque-

te libx11-dev, que Suse 9.3 denomina

xorg-x11-devel). Para arrancar el admi-

nistrador de ventanas, los usuarios de

Debian pueden crear en sus directorios de

inicio el fichero .xsession e introducir las

siguientes líneas:

#!/bin/sh

exec /usr/local/bin/wmii

72

LINUX USER • Desktopía: Wmii

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

WIMP (“Windows, Icons, Menus,

Pointing device”) es un para-

digma común de interacción

con GUIs. Incluye menús de control, ven-

tanas y coloridos botones que se señalan

y en los que se hace clic. Según Anselm

Garbe, el creador de Wmii (Window

Manager Improved 2), ese paradigma es

ineficiente y ha quedado obsoleto.

Wmii (Figura 1) es una completa

revisión del administrador de ventanas

Wmi. Wmii soporta controles de teclado

para todo, al igual que ocurriera con su

predecesor Wmi. Este extensivo sistema

de control desde el teclado hace que no

sea preciso el uso del ratón, aunque si se

desea puede usarse.

DiseñoLos administradores de ventana basados

en teclado existen desde hace años, y

Una mirada al Administrador de Ventana Wmii

SÓLO PARAEXPERTOSSi prefieres gobernar el escritorio desde el teclado, te aconsejamos

que le eches un vistazo del potente administrador de ventanas Wmii.

POR NICO GOLDE

73

Desktopía: Wmii • LINUX USER

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

Para añadir Wmii a la lista del admi-

nistrador de contraseñas estándar en Suse

9.3 se crea el fichero wmii.desktop en

/usr/share/xsessions, y se suman a ese

fichero las líneas siguientes:

[Desktop Entry]

Encoding=UTF-8

Type=XSession

Exec=wmii

TryExec=wmiiwm

Name=wmii

Comment=U

window manager improved 2

Puesta en MarchaCuando Wmii se arranca por primera

vez, aparece una ventana con un tutorial.

Se aconseja leerlo detenidamente antes

de comenzar a presionar teclas (Figura

2). [Alt]+[T] abre una ventana de termi-

nal y [Ctrl]+[Alt]+[Y] crea nuevos

escritorios (o “páginas”). Es posible

saltar entre escritorios pulsando

[Alt]+[H]. Con [Alt]+[Shift]+[P] nos

posicionamos en el modo paginador con

el que se obtendrá una perspectiva de los

escritorios activos y permitirá cambiar

directamente a un escritorio. Para cerrar

una ventana presionamos

[Ctrl]+[Alt]+[C].

El formato por defecto se denomina

“tiled” (puede verse en el cuadro adjunto

“Formatos”), y como es de esperar, las

ventanas comparten automáticamente el

espacio disponible en el escritorio.

Pulsando [Alt]+[Enter] se cambia la

ventana seleccionada que pasa de ser de

tamaño pequeño a grande, esto es lo que

Wmii llama “zooming”. Si se necesita

una visión a pantalla completa temporal,

puede presionarse

[Alt]+[M] para

maximixar la página. Cuando se desee

trabajar con iconos se procede de esta

misma manera. [Alt]+[Tab] mueve el

tema actual a la ventana siguiente.

La barra de estado ocupa la parte infe-

rior de la pantalla. Representa el número

del escritorio actual seguido de una letra

que es la abreviatura del formato y otra

letra para el modo de atajo actual (n para

“normal”, r para “resize” – redimensionar

– , m por “move” y b por “bare” – simple

--). Justo al lado se encuentra el botón

www que arranca un navegador cuando

se hace clic en él. Este botón es confi-

gurable sin restricciones, pero tiene un

atractivo truco: si se hace clic con el

botón derecho www abre una búsqueda

en Google basada en la selección de

cualquier programa. Si se hace clic con el

botón central del ratón, Wmii interpreta

el texto seleccionado como una URL. La

fecha y el sistema cargados se encuentran

a la derecha de la barra de estado.

También aquí es donde se presenta la sali-

da del programa, lo cual permite ver los

resultados de los scripts que se escriben.

Presionando [Ctrl]+[Alt]+[P] presenta

una línea de comandos en la barra de

estado, permitiendo la llamada a progra-

mas externos y proporcionando la rea-

lización del comando. Si se presiona

[Ctrl]+[Alt]+[A] se consigue una fun-

ción similar para los comandos de control

del administrador de ventana interno. En

Wmii los comandos direccionales usan

las teclas [H], [J], [K] y [L] (igual que en

Vi), donde [H] representa derecha, [J]

abajo, [K] para arriba y [L] para izquier-

da.

Puede usarse el teclado para expandir

las ventanas. Para ello, se pulsa

[Ctrl]+[Alt]+[R] y una de las teclas

direccionales. Para abandonar el modo

expandido pulsaremos [Esc] al estilo Vi.

Como se habrá podido comprobar hasta

ahora, Wmii posee un número de modos

que se parecen a los que presenta el

Wmii proporciona una gran variedad de

formatos de pantalla aplicables a un

escritorio virtual.

Formato Tiled

Este formato fue implementado original-

mente en Larswm. Ofrece una ventana

con una gran parte del espacio del

escritorio, y las otras ventanas com-

parten el espacio sobrante (Figura 3).

Puede habilitarse presionando

[Alt]+[Shift]+[T].

Formato Grid

Se obtiene pulsando [Alt]+[Shift]+[G].

Asigna cantidades de espacio iguales a

cada ventana y dispone las ventanas en

una malla (Figura 4).

Formato Maximizado

Para maximizar todas las ventanas en el

esritorio se pulsa [Alt]+[Shift]+[M], a

continuación con [Alt]+[Tab] es posible

navegar entre ventanas.

Formato Flotante

Este formato es uno de los favoritos de

los administradores de ventanas y de

entornos de escritorio. Permite a distin-

tas aplicaciones elegir su propio tamaño

de ventana. Este es el formato que se

necesita para programas de manipu-

lación de imágenes como Gimp.

Formatos

Figura 1: Wmii con un sistema de estadísticas y un bosque lúgubre. Figura 2: Wmii está preconfigurado cuando se arranca por primera

vez. Un tutorial te ayuda a comenzar con el administrador de ven-

tanas de Wmii controlado por teclado.

read y write leen y

escriben, mientras

que create permite

definir nuevas

entradas, como

ficheros y directo-

rios. De este

modo, wmir read/

mostrará el direc-

torio raíz del sis-

tema de ficheros.

VFS requiere de

algunos ajustes,

pero una vez

entendidos, es un

placer usarlo. Para

aplicar un color

diferente a un

marco de ventana

se escribe lo siguiente:

wmir write /wm/page/sel/mode/U

sel/sel-style/bg-color "#FF00FF"

El comando que sigue maximiza la ven-

tana actual:

wmir write /wm/page/sel/ctl U

"select zoomed"

Modos PestañaEl modo pestañas presenta distintas ven-

tanas (aplicaciones) en un único marco, y

permite navegar entre pestañas. Para usar

este modo se ha de abrir el marco actual

para permitirle contener distintas ven-

tanas. Para hacerlo, se presiona

[Alt]+[U].

Si a continuación se arranca el termi-

nal, con [Ctrl]+[T], la ventana de termi-

nal aparecerá en el mismo marco (para

reflejarlo se divide la barra de título del

marco). Para navegar entre las dos ven-

tanas se pulsa [Alt]+[Shift]+[Tab] en

lugar del atajo de teclado

normal. Como el solapamien-

to es un modo como

cualquier otro, la función

funcionará en combinación

con cualquier tipo de forma-

to. Con [Alt]+[Shift]+[U] se

cierra de nuevo el marco para

evitar que se abran nuevas

ventanas en el marco.

Configuración deUsuario EspecíficaLa instalación predetermina-

da sitúa los ficheros de con-

figuración en /usr/local/etc/wmii. Puede

iniciarse copiando el directorio completo

a ~/.wmii. Así se obtienen los ficheros

bar, keys, menu, rc.conf, status.sh, wm y

un directorio llamado action. Los

ficheros poseen scripts de shell nor-

males. El script bar se ocupa de la barra

de estado; keys maneja los atajos de

teclado, menu controla el menú de

comandos internos y externos, wm es el

administrador de ventanas mientras que

status.sh crea la salida de la barra de

estado. El fichero más importante para

nosotros es rc.conf (Listado 1): puede

usarse para modificar configuraciones

tales como el color de las ventanas y el

fondo de pantalla.

En el listado 1, las líneas 01 a la 18

modifican la apariencia del admi-

nistrador de ventanas mediante la con-

figuración de variables de la shell, las

cuales se encuentran referenciadas por

los scripts de la shell a los que se ha

hecho referencia previamente. Por ejem-

plo, para establecer el fondo de pantalla

se cambia el valor de la variable WALL-

PAPER en la línea 16 como sigue:

WALLPAPER=U

"Esetroot -scale -center U

/home/test/.wmii/wallpaper.png"

También pueden usarse estos ficheros

para modificar los atajos de teclado para

las teclas direccionales. MODKEY (Línea

19) define la tecla modificador que inicia

un comando. La configuración en el

Listado 1 usa mod1, la cual mapea la

tecla [Alt]. Si prefiere usarse una combi-

nación diferente será necesario modificar

el fichero de teclas.

Para realizar cambios temporales, se

ejecuta el comando wmir. Para que los

cambios sean permanentes hay que

Editor Vi. También dispone de un modo

que permite mover ventanas, para ello se

pulsa [Ctrl]+[Alt]+[M]. Nuevamente,

usando las teclas direccionales, podrá

indicarse al programa la dirección en la

que ha de moverlas.

Sistema de Fichero VirtualWmii tiene un sistema de fichero virtual

(VFS) que permite controlar el adminis-

trador de ventanas a través de comandos y

scripts, igual que Procfs en Linux. De

hecho, los atajos de teclado implementan

comandos que usan VFS bajo la capota.

Para leer el VFS y escribir en él será pre-

ciso wmir, que es parte de la distribución.

Los parámetros de la línea de comandos

LINUX USER • Desktopía: Wmii

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

Atajo Significado

[Alt]+[Y] Abre un nuevo

escritorio

[Alt]+[H],[L] Salta entre ventanas

[Alt]+[T] Arranca un terminal

[Strg]+[Alt]+[C] Cierra una ventana

[Strg]+[Alt]+[A] Modo de comando

interno

[Strg]+[Alt]+[P] Modo de comando

externo

[Strg]+[Alt]+[R] Cambia el tamaño de

la ventana

[Strg]+[Alt]+[M] Mueve una ventana

[Alt]+[D] Separa una ventana

[Alt]+[A] Adjunta una ventana

[Alt]+[Tab] Navega entre ven

tanas

[Strg]+[Alt]+[Q] Salir

Tabla 1: Importantes AtajosWmii

Figura 3: El formato tiled de Wmii, que se habilita presionando

[Alt]+[Shift]+[T]. El menú interno se muestra abajo del todo.

Figura 4: Una vista en mall asigna espacios iguales a cada

ventana y dispone las ventanas en una cuadrícula.

LINUX USER • Desktopía: Wmii

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

añadirlos a los ficheros de configu-

ración. Para aplicarlos en el momento,

simplemente se recargan los compo-

nentes individuales antes de rearrancar

el administrador de ventanas. El fichero

rc (de “run command”, o lo que es lo

mismo ejecutar comando) es un simple

script init que llama a los parámetros de

la línea de comandos típicos star, stop y

restart, y ayuda a rearrancar Wmii. Así

que, escribiendo el comando ./rc restart,

Wmii se reinicializará al momento.

El directorio action tiene un script de

la shell para cada opción. Siempre que

se presione [Ctrl]+[Alt]+[A] para cor-

rer un comando desde el menu action o

se pulsa una combinación de teclas, lo

que realmente se está haciendo es lan-

zando un script desde el directorio

action.

El fichero keys, por ejemplo, nos dice

el script que se está arrancando en ese

momento: si se presiona[Alt]+[T] corre

el script term. Si se prefiere usar aterm

en vez de xterm, simplemente se modifi-

ca el script term y se refleja lo que se

haya elegido. Para modificar los atajos

de teclado, sólo se modifica el fichero

keys. El contenido es lo suficientemente

auto-explicativo, aunque los cambios a

realizar requieren de una buena dosis de

paciencia. Los scripts usan principal-

mente el programa wmir, el cual permite

modificar el administrador de ventanas

para adaptarlo a las necesidades

propias. Por ejemplo, el comando sigu-

iente:

@LI wmir write ßß

\bar\default\70_status\ßß

label\text “¡WMII mola!”

mostrará en la barra de estado la cade-

na “¡WMII mola!” hasta que se actualice

el script status.sh. Esta útil característica

permite a los usuarios presentar la sali-

da de casi cualquier programa de la

línea de comandos en la barra de estado.

Más InformaciónAdemás de la documentación estándar,

wmirefcard abre un documento PDF con

los atajos de teclado más importantes.

La página de inicio del proyecto Wmii

[4] dispone de una gran cantidad de

información útil, incluyendo una intro-

ducción a Wmii para principiantes [5]

escrito por Steffen Liebergeld (actual-

mente se encuentra disponible en inglés,

alemán y español). Como el sitio está

basado en Wiki, se añaden nuevos ele-

mentos a diario y probablemente se des-

cubrirán varios temas Wmii, así como

programas adicionales escritos por

usuarios de Wmii. También existe un

canal activo #wmii en el servidor

irc.oftc.net.

El FuturoWmii-3 se publicó en noviembre de

2005 y parece que se van a introducir

algunos cambios interesantes. Hasta que

no se encuentre disponible la nueva ver-

sión, el proyecto publica instantáneas

del software a intervalos regulares. Las

características más importantes y nove-

dosas son la compatibilidad 9P2000 [6]

para el sistema de ficheros virtual y una

configuración dramáticamente simplifi-

cada gracias a la nueva shell (9rc).

Wmii-3 viene también con un nuevo

formato de “columna”, basado en el

entorno de programación de Rob Pikes

Acme [8] para Plan 9, que reemplaza e

integra formatos anteriores, tales como

“tiled”, “grid” y “maximized”.

Plan 9 es un sistema operativo al estilo

Unix desarrollado por los laboratorios Bell

Labs. Este sistema operativo se publicó en

el 2002 bajo una licencia libre. Trata todos

los recursos como ficheros (ordenadores,

usuarios, dispositivos, etc.) y usa un pro-

tocolo estándar, el 9P, para direccionarlos.

El sistema de fichero proc en Linux se

inspiró para esta propuesta y usa algo

parecido.

9p2000 es una versión revisada y exten-

samente mejorada del protocolo del Plan

9, 9P, que se publicó en el año 2002 con la

Cuarta Edición del Plan 9. La compatibili-

dad con 9P2000 soporta el montaje del

sistema de ficheros de Wmii sobre el sis-

tema de ficheros existente como kernel

2.6.14, y permite a los usuarios configurar

programas como cp, mv, echo o vi via

Wmii. Esto, a su vez, cambia la necesidad

de la herramienta wmir en Linux (aunque

wmir se conservara para evitar que se

estropee la compatibilidad hacia abajo

con sistemas BSD y otros sabores de

Unix). El kernel 2.6.14 es el primero en

soportar el protocolo 9P.

La dramática simplificación de la con-

figuración cuenta con el apoyo de un

porte a Unix de las podeross herramientas

de Plan 9, en particular de la shell Rc [8],

además de herramientas adicionales para

scripts de la shell que el proyecto Wmi

empaqueta para proporcionar compatibi-

lidad con 9rc. La ventaja de la nueva shell

de Plan 9 Rc es que está enlazada estáti-

camente y corre scripts de la shell mucho

más rápidamente que Bash. �

[1] Ratpoison: http://www.nongnu.org/

ratpoison

[2] Ion: http://modeemi.cs.tut.fi/~tuomov/

ion

[3] Larswm: http://home.earthlink.net/

~lab1701/larswm

[4] Homepage Oficial de Wmii: http://

wmii.de

[5] Introducción a Wmii: http://wmii.de/

index.php/WMII/BeginnersGuide

[6] Introducción a 9P: http://www.cs.

bell-labs.com/sys/man/5/INDEX.html

[7] Shell de Rc: http://www.star.le.ac.uk/

~tjg/rc/misc/td

[8] Entorno de programación Acme:

http://www.cs.bell-labs.com/sys/doc/

acme/acme.ps

RECURSOS

01 TAB_HEIGHT=16

02 BAR_HEIGHT=16

03 BORDER_WIDTH=3

04 SELECTED_BG_COLOR="#666699"

05 SELECTED_TEXT_SIZE=10

06 SELECTED_TEXT_ALIGN=center

07 SELECTED_TEXT_FONT="fixed"

08 SELECTED_FG_COLOR="#FFFFFF"

09 SELECTED_BORDER_COLOR="#9999CC"

10 NORMAL_BG_COLOR="#888888"

11 NORMAL_TEXT_ALIGN=center

12 NORMAL_TEXT_FONT= "fixed"

13 NORMAL_TEXT_SIZE=10

14 NORMAL_FG_COLOR="#FFFFFF"

15 NORMAL_BORDER_COLOR="#BBBBBB"

16 WALLPAPER="xsetroot -mod 2 2

-bg #666699 -fg #888888"

17 DEFAULT_LAYOUT=tiled # tiled,

max, grid o vsplit

18 TILE_WIDTH=60

19 MODKEY=mod1 # teclas de

modificación utilizado por el

enlace a teclas por defecto

20 NORTHKEY=k

21 SOUTHKEY=j

22 WESTKEY=h

23 EASTKEY=l

Listado 1: rc.conf

Aunque a Sony no le gusta admi-

tirlo, una de las razones del éxito

de la Playstation Portátil (PSP) es

que los usuarios más creativos pueden

enseñar nuevos trucos a su consola de jue-

gos. Uno de dichos trucos permite copiar

películas en la PSP y poderlas llevar

encima cuando se viaja. Esto es posible

gracias a otros productos de Sony, como la

“Memory Stick PRO”, que fue diseñada

para almacenar música e imágenes y que

también permite grabar películas.

Evidentemente Sony preferiría vender

los DVDs de las películas, pero unos cuan-

tos desarrolladores y programadores con

inventiva han descubierto cómo convertir

las películas a formato PSP. Los sticks con

dos o incluso cuatro GB de capacidad de

almacenamiento permiten disponer de

bastante espacio para almacenar una

película completa. Para hacerlo se necesita

el firmware “correcto” (esto es, la versión

antigua) además de la aplicación que per-

mita convertir las películas a formato PSP.

Jugando con el FirmwareRecientemente Sony ha introducido un

nuevo firmware para intentar evitar algu-

nas de las aplicaciones más creativas que

mencionábamos antes. Como reacción, los

usuarios han comenzado a cargar en sus

PSPs las antiguas versiones 1.0 y 1.5 para

continuar disfrutando de la posibilidad de

copiar películas en sus consolas. El

firmware se encuentra disponible desde los

sospechosos habituales en [1], y se pueden

encontrar los consejos y trucos para la

descarga e instalación en [2]. Pero hay que

tener cuidado con un malware muy mali-

cioso conocido como “Troyan.PSPBrick”, el

cual revienta los intentos de cargar un soft-

ware de versión más antigua por parte de

usuarios, destruyendo el firmware existente

antes de cargar la vieja versión, lo que hace

que la consola se vuelva completamente

inservible.

Sony ha puesto fin de manera temporal a

esta práctica con la introducción de la ver-

sión 2.01 de firmware: se trata de un

antivirus que trata todos los intentos de

instalar viejo firmware, como ataques y que

los bloquea. En el momento en el que se

escribe este artículo, sólo es posible volver

a cargar de la versión 2.0 a la 1.5 o a la 1.0,

pero es aconsejable asegurarse de compro-

bar el firmware con un antivirus actua-

lizado antes de comenzar la instalación.

Fotos y MúsicaSony permite que los usuarios transfieran

determinado tipo de contenidos a la PSP. El

manual explica cómo cargar fotos y musica

usando un stick de memoria. El stick

conecta al puerto USB integrado, el cual

proporciona a los usuarios de Linux una

puerta de entrada.

Se emplea un cable USB para conectar el

ordenador a la PSP, a continuación se abre

una ventana de consola y se entra como

superusuario. Se escribe tail -f/var/log/mes-

sages para descubrir el fichero de disposi-

tivo que usa Linux para montar la PSP en el

sistema. La primera vez que se intenta

posiblemente no se tenga éxito, ya que pre-

viamente se necesita habilitar el modo de

transferencia USB en la PSP. Para ello se

pulsa en la consola el botón HOME para

entrar en el menú principal. Se presiona el

cursor izquierdo para movernos al icono de

la maleta con la etiqueta Settings a la

izquierda del menú principal.

Las teclas cursores arriba y abajo nos

permiten navegar por el menú Settings

hasta que se vea el icono USB Connection.

Se pulsa la parte derecha (x) para habilitar

el modo USB para la consola.

77

Películas PSP • LINUX USER

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

Con Linux se pueden cargar películas en una consola de juegos

portátil Playstation (PSP). POR KRISTIAN KISSLING

Figura 1: Tras establecer la conexión USB

entre la PSP y Suse, Suse automáticamente

inicia una ventana mostrando los directorios

en la memoria.

pasos preparatorios. Otra vez los

directorios necesitan de conven-

ciones especiales: se crea primero

un directorio llamado MP_ROOT en

el directorio superusuario de la PSP,

y a continuación un subdirectorio

100MVN01. Este es el directorio

específico para las películas. Para

que éstas puedan correr en la con-

sola deberán poseer la resolución,

formato y el marco adecuados. Afor-

tunadamente, la herramienta Ffm-

peg dispone de una opción que per-

mite simplificar la conversión de

películas al formato PSP.

Se necesita una versión Ffmpeg

desde el CVS, que requiere una

instalación Faac. Se comienza descargando

faac-18102004.tar.gz del sitio web en [3] y a

continuación se instala el paquete.

Para desempaquetar el archivo se escribe

tar xvfz faac-18102004.tar.gz, mediante este

paso se cambia al subdirectorio creado,

luego con chmod u+x bootstrap se modifi-

can los permisos para el script bootstrap.

Cuando se escribe sh./bootstrap para correr

el script, dirá qué ficheros son necesarios

para la compilación, y después de suminis-

trar los ficheros perdidos, se crea un fichero

configure. A continuación puede seguirse el

procedimiento estándar para completar la

compilación e instalación: ./configure,

make, make install.

Con esto se finaliza la instalación de

Faac. Ahora puede descargarse Ffmpeg de

la CVS:

cvs -z9 -d:pserver:U

[email protected]:U

/cvsroot/ffmpeg co ffmpeg

Se necesitará instalar la herramienta cvs

usando el administrador de paquetes de la

distribución que se posea. Se cambia al

subdirectorio ffmpeg y se configura el pro-

grama introduciendo ./configure

--enable-shared --enable-faac. Para comple-

tar la instalación se corren make y make

install.

Ahora es el momento de tomar un

fichero AVI y convertirlo en una película

PSP. Se nombrará el fichero como test.avi,

que proporciona el siguiente comando Ffm-

peg:

ffmpeg -i test.avi -f U

psp -r 14.985 -s 320x240 -b U

768 -ar 24000 -ab 32 U

M4V00001.MP4

Este comando convierte el fichero AVI

a un fichero titulado M4V00001.MP4.

Los parámetros misteriosos especifican

que la PSP puede manejar resoluciones

(-s) de 320 por 240 pixels como má-

ximo y el rango de bit de video (-b) no

debe exceder los 768 kbps. Si se selec-

ciona un rango de marco (-r) diferente

de 14 985 se tendrán problemas. La fre-

cuencia sample de audio (-ar) ha de ser

de 24 000 Hz, y el rango de bit de

audio (-ab) de 32 kbps. Si Ffmpeg se

queja de librerías perdidas, hay que

situarse como superusuario, y luego se

añaden los paths /usr/lib y

/usr/local/lib al fichero /etc/ld.so.conf,

se guardan los resultados y se corre de

nuevo ldconfig.

El paso siguiente será copiar la

película a la PSP. Para ello se escribe cp

M4V00001.MP4

/mnt/psp/MP_ROOT/100MVN01. Es

estrictamente necesario asegurarse de

usar mayúsculas.

En la consola, se cambia a la entrada

Video en el menú principal, y para

arrancar la película se pulsa (x) dos

veces (Figura 2). �

Ahora se comprueba el diálogo tail en el

ordenador:

Nov 14 15:24:07 U

linux kernel: sda: sda1

Esta línea nos dice que Linux usa el fichero

de dispositivo /dev/sda1 para direccionar la

PSP. Suse arranca automáticamente una

ventana Konqueror presentando los

ficheros de la Playstation (Figura 1), con lo

que ya se puede trabajar con estos ficheros

como sobre cualquier stick USB. Los usua-

rios de Debian pueden montar la PSP ma-

nualmente escribiendo como superusuario

lo siguiente:

mkdir /mnt/psp

mount -t auto /dev/sda1 /mnt/psp

Probaremos nuestra conexión copiando

unas cuantas fotos al stick de memoria. La

PSP sólo reconoce imágenes si se encuen-

tran en el directorio apropiado. Puede

usarse Konqueror o una shell para crear

dicho directorio.

mkdir /mnt/psp/PSP

mkdir /mnt/psp/PSP/PHOTO

A continuación se mueven las fotos al

directorio PHOTO que se ha creado.

cp testfoto.jpg U

/mnt/psp/PSP/PHOTO

Es muy importante usar letras mayúsculas

para nombres de carpetas y ficheros, ya

que de lo contrario la consola no verá las

imágenes o películas. Desafortunadamente,

la PSP solamente presenta imágenes bajo

formato JPG, por lo que será im-

prescindible convertir primero cualquier

imagen PNG o GIF.

El procedimiento para copiar ficheros de

música con formato MP3 es similar, y nece-

sitaremos nuevamente un directorio

apropiadamente nombrado:

mkdir /mnt/psp/PSP

mkdir /mnt/psp/PSP/MUSIC

Podemos crear subdirectorios para álbumes

o géneros si los necesitamos, por ejemplo,

SALSA o JAZZ.

Y…¡Acción!Antes de comenzar a copiar la película a la

PSP es preciso completar unos cuantos

LINUX USER • Películas PSP

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

[1] Wiki en PSP: http://en.wikipedia.org/

wiki/PlayStation_Portable_homebrew

[2] “Downgrading” la PSP: http://www.

hackaday.com/entry/

1234000687060851/

[3] Web de FAAC: http://www.

audiocoding.com/modules/

mydownloads/

[4] Integración KDE: http://www.

kde-apps.org/content/show.

php?content=31679

RECURSOS

Figura 2: Los Simpsons muestran sus trucos en la

PSP. Hay que asegurarse de usar letras mayúsulas

para el nombre del fichero.

En el número anterior habíamos

empezado a examinar qué es

Squeak y las razones teóricas que

explican sus características. Squeak no es

ninguna anécdota elitista (ya veremos que

entre los lenguajes de programación tam-

bién hay guerras religiosas y la acusación

de elitismo se oye con frecuencia), no es

uno más de los cientos de proyectos que

nacen y mueren continuamente en el

mundo del software libre. La herramienta,

o entorno, o mundo o conjunto de mun-

dos, está aquí para quedarse: tiene detrás

al MIT, al parecer va a ir integrado (junto a

Scratch[1]) en los portátiles de a cien

dólares, lo tenemos de serie en las dis-

tribuciones educativas españolas, e insta-

lado en cientos de aulas con Linex, las

Guadalinex educativas, MAX… Y, por últi-

mo pero no menos importante, se está

invirtiendo con seriedad y coherencia en

el desarrollo de materiales para Squeak y

en la traducción de otros[2].

Sin embargo nos quedaba pendiente

responder a la pregunta clave: ¿cumple su

promesa, responde o se acerca a respon-

der a las ambiciosas expectativas que

despierta? Squeak pretende, no que los

alumnos aprendan a programar, sino que

los alumnos programen para aprender, ¿es

esto absurdo? ¿o implica un esfuerzo que

escapa a las posibilidades de nosotros los

profesores?

¿Clases poderosas?Comenzaremos nuestro estudio

examinando qué nos proporciona

Squeak; empezaremos por lo que hay

hecho, examinando actividades Squeak

correspondientes a distintas materias.

Recordemos el modo como Kim Rose y

B. J. Conn, en su Ideas poderosas en el

aula[3], interpretaban el valor pedagógi-

co del famoso ejemplo del coche contro-

lado por los alumnos. «El hecho de que

los niños se den cuenta de que la direc-

ción de su coche es un número es una

idea poderosa. Lo mismo que ver la

localización del coche en el mundo re-

presentada con números es muy signi-

ficativo. A través de la exploración y el

juego, comprobarán cómo cada valor

puede ser positivo, negativo o cero».

En el artículo «Una experiencia inter-

disciplinar en Educación Primaria me-

diante el uso de Squeak», Fernando

Fraga y Adriana Gewerc[4] nos relatan

sus experiencias con un grupo de Cuarto

de Primaria (nueve años). Los alumnos

deben dibujar la escena de un cuento

sobre un niño y un fantasma que acaban

79

Educación • LINUX USER

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

Squeak, la herramienta de los niños

ESTO ES LO QUE HAYSqueak, la herramienta de los niños

ESTO ES LO QUE HAY

Es el momento de preguntarnos si Squeak es la herramienta que facili-

tará un cambio copernicano en la escuela. Y de intentar responder a

una pregunta tan ambiciosa examinando primero actividades creadas

con Squeak. POR JUAN RAFAEL FERNÁNDEZ GARCÍA

Juan Rafael Fernández García es

socio de OFSET, profesor de

educación secundaria y tiene

una larga experiencia en la tra-

ducción y documentación del

software libre. Ha sido coordi-

nador de uno de los Centros que

participan en la experiencia

andaluza de integrar las TIC en la

educación y actualmente trabaja

como asesor de formación del

profesorado.

LAAUTORA

de leer, con dos

novedades

respecto al clási-

co dibujo en

papel: los dibujos

se compartirán en

un Swiki y se

intentará contro-

lar el movimiento

de los personajes.

El intento de

guiar al fantasma

reconduce el tra-

bajo hacia la

geometría (los

conceptos de

medición del

avance, de giro,

etc. se aprenden

primero de forma

intuitiva y se

comprueba que lo

que se ha apren-

dido memorística-

mente, como las

figuras geométri-

cas, está lejos de

haberse asimila-

do).

Ideas

poderosas, inter-

disciplinariedad,

conocimiento

activo e intuitivo

(¿no hablaba

Papert de

devolverle su cuerpo a las matemáti-

cas?). Sigamos, siempre con una mirada

pedagógica. Ejemplos de aplicaciones

matemáticas de Squeak tenemos bas-

tantes, como casi siempre (a los

matemáticos habitualmente les gustan

los ordenadores). Citemos Math et

Squeak[5]. También sabíamos, desde el

artículo sobre DrGeo, que Hilaire

Fernandes trabaja en una nueva versión

de DrGeo escrita en SmallTalk; en enero

envió un nuevo anticipo a la lista de

miembros de OFSET (figura 1). O

algunos de los proyectos recogidos en

Squeakpolis, con SIG.pr[6] (figura 2)

como muestra.

Pero voy a destacar otro proyecto sor-

prendente, que también viene de

Extremadura: el Libro interactivo de

álgebra y geometría en Bachillerato, de

Antonio Ullán, Pilar Ullán y José Luis

Redrejo (figura 3). ¿Cómo podemos

verlo? Deberemos haber descargado la

imagen algebra-squeak del repositorio de

Linex, y la seleccionaremos al lanzar

squeak. ¡Una imagen que puede conec-

tarse a un servidor WIMS, otro viejo

conocido de los lectores, y ejecutar pro-

gramas específicos externos como maxi-

ma, etc.! La figura 4 es sólo una ilus-

tración de lo que se puede hacer en este

libro. El usuario podrá ir cambiando de

página simplemente pulsando en los sig-

nos “<” (página anterior) y “>” (pági-

na siguiente). Pero es un libro vivo e

interactivo. Realmente el ratón Squeak

en España habla extremeño.

KedamaEl «sistema de partículas susceptible de

ser utilizado en guiones en mosaico

masivamente paralelos» de Yoshiki

Ohshima[7] permite crear varias clases

de simulaciones relacionadas con el

movimiento de partículas: desde el pro-

ceso de infección de una enfermedad,

hasta visualizar cómo un gas ocupa el

espacio de un tanque, la extensión de un

fuego en un bosque o el comportamiento

de un hormiguero ante un trozo de

chocolate; vamos a ejecutar este proyec-

to, otro clásico en las exposiciones de

Squeak.

Recordemos que disponemos de dos

formas de ejecutar no ya una imagen

completa, sino un proyecto indepen-

diente: directamente a través del nave-

gador si disponemos del plugin para

Squeak o descargándolo y ejecutándolo

LINUX USER • Educación

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

Figura 1: Adelanto de DrGeo II.

Figura 2: Proyecto GIS.

Figura 3: El libro de álgebra y geometría.

en local en el directorio de Squeaklets.

Haremos lo segundo, repasando breve-

mente lo que vimos en el primer artícu-

lo. Pulsamos en el menú «Proyecto»,

«Buscar un proyecto», y en la ventana

«Cargar un proyecto» seleccionaremos

ants2.pr que previamente habríamos

descargado. Se nos abre la aplicación

mostrada en la figura 5.

El proyecto simula el modo como las

hormigas usan los olores para comuni-

carse. Cuando una hormiga encuentra

comida deposita una

pista de señales de

olor que permitirá a

las demás seguirlo

hasta la comida. Poco

a poco la intensidad

de este camino se va

apagando, de modo

que cuando las hormi-

gas han recogido toda

la comida, el camino

también desaparece.

Es interesante refle-

xionar que la misma

estructura conceptual

matemática sirve para

comprender la exten-

sión de la gripe aviaria

o de un incendio en el

bosque. Esto es una

idea poderosa.

Otro sistema rela-

cionado con la física

digno de estudio es

ODEco, un conjunto

de herramientas (un

toolkit) fácil para la

realización de simula-

ciones dinámicas en

dos y tres dimensiones

basado en la bibliote-

ca libode. También

digno de consideración es SqueakBot,

de Serge Stinckwich, un proyecto

pedagógico de control de un robot en

un entorno Squeak. Y también tiene

que ver con la robótica BotsInc, de

Stephan Ducasse, un entorno para la

enseñanza de la programación de

robots[8].

Squeak y el artePierre-André Dreyfuss, profesor suizo

retirado de artes plásticas, ha escrito un

curso muy completo con este mismo

título: Art et Squeak (en francés)[9].

Explica con detalle cómo utilizar las

paletas y herramientas de dibujo (me

gustan especialmente las imagenes,

aunque los límites de espacio del

artículo nos permiten reproducir única-

mente la figura 6), las modificaciones y

transformaciones posibles con el halo y

todo el repertorio de animaciones y

simulaciones que permiten los guiones.

Comencemos por un ejemplo senci-

llo. La figura 6 es una demostración de

lo que se puede realizar con la he-

rramienta tampones, utilizando

grabación de imágenes y duplicaciones.

Se trata de una composición generada a

partir del dibujo de una casa, guardada

como imagen para el tampón y a la que

se le hacen diversas combinaciones;

ejemplifica también la utilización del

botón rojo para aumentar y disminuir

el tamaño. Las modificaciones no satis-

factorias pueden deshacerse cuantas

veces sean necesarias gracias a la posi-

bilidad de grabar los elementos, conser-

vados en los tampones.

A otro nivel ya,

abeilleFrelon_001.pr[10] es un proyec-

to creado a partir de una foto descar-

gada de internet y tratada para animar

las abejas con la danza con la se anun-

cian la presencia y dirección del ali-

mento. Muy interesante, tanto desde el

punto de vista de la técnica de ani-

mación como por su valor didáctico.

La foto de un grupo de abejas en un

panal de miel se disocia en sus objetos

(fondo, abejas, zánganos). ¿Cómo lo

ha hecho? Se seleccionan varias abejas

con la ayuda de la opción «seleccionar

una parte de la pantalla con un polí-

gono» de la herramienta Nuevo Morph.

Seguidamente hace desaparecer el

Educación • LINUX USER

Figura 4: Apuntes sobre el espacio euclideo.

Figura 5: Kedama, simulador de movimiento de partículas.

introduciéndolos en el mundo de la lite-

ratura inglesa»[11]. ¿Dónde podemos

encontrar el programa, y la imagen alge-

bra-squeak del ejemplo matemático que

citamos antes? Es evidente (¿se han fija-

do en los autores?): en el repositorio de

Linex

deb http://www.linex.org/U

sources/linex/debian/ sargeU

main contrib linex non-free

Bastará con instalar tusitala, que se

encargará de traer sus dependencias tusi-

tala-images y tusitala-squeak.

Tusitala (figura 7) es una de la imá-

genes de Squeak producidas en

Extremadura que aconsejamos instalar

en el primer artículo. La imagen está

compuesta por diez proyectos, co-

rrespondientes a diez obras de

Shakespeare. Cada uno de estos proyec-

tos contiene a su vez un proyecto de

Ejercicios, otro de Vocabulario y otro de

Teatro.

Cito del manual: «La aplicación

Tusitala nos permite realizar tres tipos

de ejercicios: relacionar parejas, re-

llenar huecos y preguntas de elección

múltiple. Sólo tenemos que introducir

los datos en las casillas que trae la apli-

cación y guardarlos. Habremos creado

entonces un archivo de datos. Este

archivo contiene los elementos (pa-

labras, textos, preguntas) que apare-

cerán en el ejercicio cuando éste se

genere. Podemos generar un ejercicio

cuantas veces queramos abriendo el

archivo de datos con la aplicación co-

rrespondiente (Matching Pairs, Filling

Gaps o Quiz) y haciendo click en

Generate». La creación de ejercicios

está descrita con detalle en la docu-

mentación y no vamos a reproducirla.

Los subproyectos vocabulario per-

miten crear libros (en el sentido de

Squeak) con los tan en boga bits de

vocabulario. Pulsando en el botón

«Start» se suceden los términos ingleses,

las imágenes correspondientes y las

palabras en castellano (por ejemplo

«king», el dibujo de un rey y la palabra

«rey»).

La estrella de tusitala es la herramien-

ta de composición de escenas, con un

resto de abejas cubriéndolas con zonas

del panal vacías y la imagen la trata

con un editor gráfico para cambiar los

colores. Finalmente crea el objeto

zángano, y programa el desplazamien-

to de las abejas y de los zánganos

sobre el fondo transformado.

TusitalaVamos a revelar descubrimientos. Por un

lado el nombre: storyteller, el contador

de historias, el apelativo que los aborí-

genes polinesios daban A Robert Louis

Stevenson. Por otro lado el proyecto, el

generador de historias en inglés de Félix

Martín, Pilar Reyes y José Luis Redrejo:

«El objetivo principal de este proyecto es

que los usuarios (alumnos de inglés de

3º y 4º cursos de la Educación

Secundaria Obligatoria, 15 y 16 años)

sean capaces de utilizar sus conocimien-

tos previos de inglés para crear una his-

toria de forma atractiva e interactiva y

motivadora dentro de un contexto comu-

nicativo real, fomentando así la lectura e

LINUX USER • Educación

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

Figura 6: Arte y Squeak, de Dreyfuss.

Figura 8: Hamlet en Tusitala.

Figura 8: Hamlet en Tusitala.Figura 7: El generador de historias Tusitala.

texto narrativo, fondos y personajes. A

cada personaje se le puede añadir

movimiento y diálogo. Los alumnos

pueden crear sus propios textos o utilizar

los proporcionados por los profesores, y

lo mismo ocurre con los elementos gráfi-

cos. A manera de ilustración en el

proyecto Hamlet se ha creado ya una

escena (figura 8): los personajes hablan

por turno y se mueven sobre los distintos

fondos. De nuevo la creación de escenas

está perfectamente documentada en el

manual, lo que hace innecesario que si-

gamos exponiéndola aquí.

Hay una entrada en el menú que

requiere comentario: vemos una entra-

da de menú Classroom (en otras oca-

siones, como en la imagen algebra-

squeak, está traducida como aula), con

las opciones «It’s a teacher» e «It’s a

student». Se trata del paquete aula, de

un desarrollo de José Luis Redrejo para

permitir la organización del trabajo en

un aula en red. El profesor entrará

como profesor y los alumnos se identi-

ficarán como alumnos (a esto se refe-

rían las opciones). A partir de ese

momento en la esquina superior

izquierda aparecerá la ip del ordenador

del profesor y la lista de los orde-

nadores de los alumnos que están en la

misma subred. Arrastrando un ejercicio

(o vocabulario o una escena) sobre esta

lista estaremos enviándoselo a los

alumnos. La instalación del paquete

está documentada en la bitácora de

José Luis Redrejo en una entrada del 18

de mayo de 2005[12]. Yo mismo lo he

instalado con éxito con SqueakMap y

tengo la nueva pestaña en mi imagen

personalizada (imagen 9).

Pero las posibilidades para la

explotación didáctica de Squeak no se

agotan aquí. A Tusitala podrían

añadírsele las capacidades multimedia

del sistema: los personajes pueden

hablar sus textos (hay un sintetizador

de voz integrado), o el recitado de los

alumnos puede grabarse como sonido o

como video… la imaginación es el

límite.

Y en el próximo número…Hemos visto ejemplos creo que muy

ilustrativos de lo que se puede hacer

con Squeak. Ahora bien, no debemos

escabullirnos y cerrar el estudio en

falso: nos falta examinar la creación de

recursos didácticos con eToys, la pro-

gramación de los guiones, la elabo-

ración de libros dinámicos ¿está fuera

del alcance de lo que se puede esperar

razonablemente de un profesor medio?

Y nos faltan los testigos de este juicio:

¿qué dicen los desarrolladores?, ¿qué

dicen los profesores?, ¿cómo lo usan? y

más importante aún, ¿qué dicen los

niños? �

Educación • LINUX USER

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

[1] Para leer sobre Scratch, http://weblogs.media.mit.edu/llk/scratch/index.html. El wiki de OLTP (http://wiki.laptop.org/wiki/

One_Laptop_per_Child) irá incluyendo información relevante sobre el proyecto.

[2] No siempre y no todos; no vamos a señalar, que está feo. Pero dejemos que el dedo de los hechos señale por nosotros. ¿Buscamos

hechos? http://www.juntaex.es/consejerias/idt/sg/contratacionag.html. O haber contratado a uno de los principales desarrolladores de

Squeak del mundo. O las traducciones de proyectos Squeak de la NASA. Y los fantásticos sitios y proyectos Squeak que presentamos

en este artículo.

[3] Ya vimos en el primer artículo que existe traducción castellana en http://swiki.agro.uba.ar/small_land/193. La cita es de la introducción

al proyecto 2. En el ejemplo del coche, frecuentemente utilizado como introducción a las capacidades de Squeak, los alumnos dibujan

un cochecito y aprenden primero a hacerlo avanzar mediante un guión, y después a controlar su dirección, velocidad… la tarea de

controlar el coche les enfrenta a la necesidad de resolver problemas matemáticos que de otra forma no se habrían planteado más que

de forma pasiva («hoy tocan los números negativos»).

[4] http://dewey.uab.es/pmarques/pdigital/simo/adriana.pdf. Artículo encontrado en la estupenda relación de Squeakpolis (http://squeak.

educarex.es/Squeakpolis/37).

[5] Math et Squeak está alojado en http://p7app.geneve.ch:8090/squeak/34.

[6] http://squeak.educarex.es/Squeakpolis/uploads/gissp.pr. Es uno de los proyectos traducidos de que hablábamos antes. Antonio

Moreno está haciendo un trabajo fantástico en Squeakpolis.

[7] El sitio original del mundo kedama es http://www.is.titech.ac.jp/~ohshima/squeak/kedama/ (en inglés). Kedama está incluido en las

imágenes Squeak desde la versión 3.8. Se encontrará documentación en http://www.squeakalpha.org/fun_projects/kedama/

kedma_welcome.htm. El ejemplo del hormiguero concretamente puede descargarse de http://www.is.titech.ac.jp/~ohshima/squeak/

kedama/ants2.pr.

[8] ODEco puede encontrarse en http://languagegame.org:8080/ggame/15. Para la biblioteca libode puede consultarse http://www.ode.

org (hay paquetes Debian y al menos un juego construido con la biblioteca, xmoto). Para SqueakBot, http://www.iutc3.unicaen.fr/

serge/SqueakBot. BotsInc está en http://community.ofset.org/wiki/BotsInc.

[9] http://p7app.geneve.ch:8090/squeak/7.

[10] http://p7app.geneve.ch:8090/squeak/uploads/59/abeilleFrelon_001.pr, en la página http://p7app.geneve.ch:8090/squeak/59.

[11] Manual de Tusitala, de Félix Martín, Pilar Reyes y José Luis Redrejo, página 3.

[12] Presentado en http://www.itais.net/index.php?title=mi_primer_paquete_para_squeak&more=1&c=1&tb=1&pb=1. Instalación detal-

lada en http://www.itais.net/index.php?title=classroom_en_espanol_y_su_instalacion&more=1&c=1&tb=1&pb=1.

NOTAS

Figura 9: Imagen personalizada con paquete

aula.

84

LINUX USER • Linea de Comandos: Cat

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

No siempre es necesario arrancar

un editor para visionar los

ficheros de texto en la consola.

Muy a menudo, un simple visor es

mucho más rápido. Además, los progra-

mas que vemos en el número de este

mes tienen mucho más que ofrecer. Si se

está buscando un método para concate-

nar múltiples ficheros en uno solo, cat

es la herramienta apropiada. Este artícu-

lo también examina cómo funcionan

para los paginadores more y less,

enseñando los métodos más conve-

nientes para el uso de estas herramien-

tas. Y si se está interesado en coger las

primeras o las últimas líneas de un

fichero, vemos cómo hacerlo con head y

tail.

El gato con botascat permite mostrar un fichero de texto

en la salida estándar:

cat fichero.txt

Podemos añadir números de línea a esta

salida, podemos escribir -n. Si se pre-

tende mostrar con cat un fichero binario

en lugar de uno de texto, la shell

mostrará todo tipo de extraños carac-

teres. Para resetear la pantalla se escribe

reset en la línea de comandos (puede

que tengas que hacerlo a ciegas).

Pero cat puede hacer mucho más. El

nombre del programa deriva del verbo

inglés “to concatenate” (es decir, con-

catenar), ya que cat realmente lo que

Examinando ficheros con cat, more, less, head y tail

LÉELO TODO

permite es pegar juntos dos o más

ficheros. Para concatenar dos ficheros de

texto en uno se usan cat y el operador

>:

cat fichero1 fichero2 > fichero3

Se aconseja ser prudente si ya existe el

fichero3, ya que cat lo reescribirá. Pero

puede usarse el operador >> para decirle

a cat que adjunten los dos primeros al ter-

cero, sin sobreescribir su contenido:

cat fichero1 fichero2 >> fichero3

Más o MenosSi necesitamos ver un fichero de texto en la

shell, pero permitiéndonos mover arriba y

abajo y buscar en el fichero, lo mejor es

usar un paginador como more o less. Para

ver el fichero página a página, se escribe:

more fichero

Se presiona la barra espaciadora para bajar

una línea y la tecla Enter para subir otra.

Una línea de estado en la parte inferior de

la página muestra la posición de la página

actual a modo de un porcentaje del fichero

completo. [B] (“back”) lleva a la página

anterior, [H] presenta la ayuda y [Q]

(“quit”) sale del programa. more sale

automáticamente cuando llega al final del

fichero.

Además, more posee unos cuantos atajos

de teclado más: si se está interesado en el

número de la línea actual, se pulsa la tecla

del signo igual (=), la combinación de

[Shift + ;] y [F] (:f) presenta el nombre del

fichero con el número de la línea. Para bus-

car en el fichero, se escribe el carácter barra

(/) y se introduce la clave de búsqueda.

Si fuera necesario, more puede presentar

múltiples ficheros de texto simultánea-

mente. Para hacerlo, simplemente es sufi-

ciente pasar todos los nombres de los

ficheros a la herramienta cuando ésta se

arranca. El paginador indica el nombre de

cada fichero:

::::::::::::::

wget.txt

::::::::::::::

Puede presionarse :n (“next”, es decir,

siguiente) o :p (“previous” o previo)

para saltar de un fichero a otro. El

comando :p lleva al comienzo del

fichero actual; si se presiona :p por

segunda vez, vuelve al fichero de texto

previo.

Para editar un fichero no es necesario

dejar more y arrancar tu editor favorito.

En lugar de eso, se presiona [V] mien-

tras se está viendo el fichero. Con ello

se arranca por defecto el editor vi,

pudiéndose entonces modificar el

fichero. Si se prefiere usar more para

invocar a un editor diferente hay que

modificar el valor de la variable de

entorno EDITOR, la cual es evaluada

por otros muchos programas. Por ejem-

plo, si se prefiere trabajar con el editor

Xemacs, puede definirse la variable con

el siguiente comando:

export EDITOR=xemacs

Herramientas prácticas como cat, less, y head son ideales para

visionar textos. POR HEIKE JURZIK

Cuando se sale del editor, se vuelve a more.

Para modificar permanentemente el valor

de la variable de entorno EDITOR, se añade

el comando export al fichero de configu-

ración bash, ~/.bashrc, y se reanaliza el

fichero como sigue:

source ~/.bashrc

Las opciones permiten influir en el modo

en el que reacciona more; éstas pueden ser

especificadas cuando se arranca la he-

rramienta. Por ejemplo, si se necesita editar

un fichero con muchas líneas vacías, puede

introducirse

more -s fichero

para decirle al paginador que reduzca

múltiples líneas vacías a una sola. Para

restringir la salida a 10 líneas en la ventana

actual, se añade -10 como una opción de

arranque, y para evitar que more se olvide

de esta configuración cuando se desplaza a

través del fichero se añade la opción -p.

Si se desea que more use los mismos

parámetros de la línea de comandos cada

vez que se corre la herramienta, puede

establecerse la variable de entorno MORE y

conservar mucho de lo escrito. Para hacerlo

se añade lo siguiente (o algo similar) al

fichero de configuración bash ~/.bashrc:

export MORE=" -10 -p -s"

seguidamente, para reanalizar el fichero se

corre el siguiente comando:

source ~/.bashrc

Menos es Másless es el sucesor de more: reconoce los

mismos atajos de teclado, aunque añade

unas cuantas funciones propias. Si no se

desea usar la barra espaciadora y [B] para

moverse, pueden emplearse los cursores en

su lugar. [G] salta al comienzo del fichero y

[Shift + G] al final. less no solamente

dispone de una búsqueda hacia adelante (/

), sino que con el interrogante (?) podemos

movernos hacia atrás.

A diferencia de more, este paginador no

sale automáticamente cuando se alcanza el

final del fichero, sino que es preciso salir

explícitamente del programa escribiendo

[Q]. Mientras que more no limpia la pre-

sentación cuando sale y presenta el último

trozo de texto en la pantalla, less la deja

limpia. Este compor-

tamiento puede cambiarse

si se desea, estableciendo

el parámetro -X en la línea

de comandos. Al igual que

en more, puede definirse

una variable de entorno

para less y así especificar

los parámetros por defecto.

Por ejemplo, para usar la

opción -X permanente-

mente hay que añadir la

siguiente línea a

~/.bashrc:

export LESS=" -X"

Como en more, less analiza la variable EDI-

TOR y arranca el editor de texto cuando se

pulsa [V]. Los atajos de teclado que se usan

para visionar múltiples ficheros son idénti-

cos. Si se pasan múltiples ficheros al pagi-

nador, puede presionarse :n para moverse

al fichero siguiente y -p para volver al ante-

rior. A diferencia de more, less recuerda la

posición en el fichero cuando se escribió el

comando.

Otra característica práctica del comando

less es que, si se está trabajando con múlti-

ples ficheros, muestra el nombre del fichero

siguiente en la línea de estado de la parte

inferior de la página:

textfiles.txt (file 1 of 2) U

(END) - Next: spellcheck.txt

Para evitar tener que presionar :p para cam-

biar al fichero previo, puede establecerse la

opción -e cuando se arranca less. Con esta

opción se le dice que cambie automática-

mente al fichero siguiente cuando llegue al

final del actual y se pulse la barra espa-

ciadora, [Cursor hacia abajo] o [Avance de

Página].

less dispone de una característica prácti-

ca para controlar los cambios de los

ficheros. Si se presiona [f], el paginador

muestra las líneas añadidas recientemente.

Esto resulta extremadamente práctico

mientras se usa less para ver ficheros log.

La línea de estado presenta Waiting for

data...(interrupt to abort) para mostrar que

less está esperando cambios (Figura 1).

[Ctrl + C] sale del modo “follow” y vuelve

a las funciones de paginador normal.

Paquetes EmpaquetadosLos comandos zless y zmore hacen posi-

ble que se vean los ficheros comprimidos

o zipeados. Las herramientas ofrecen los

mismos atajos de teclado que los pagi-

nadores de los que heredan. En lugar de

usar una secuencia de comandos compli-

cada como:

zcat Xinerama-HOWTO.gz | less

puede escribirse

zless Xinerama-HOWTO.gz

para leer el fichero comprimido en la pan-

talla.

De Cabo a RaboSi se está interesado en las primeras o

en las últimas líneas de un fichero de

texto, head y tail son la herramienta

que necesitas:

head <I>fichero.txt<I>

presenta las primeras diez líneas de un

fichero.

tail es el equivalente de head para el

final de fichero. Al igual que head,

puede manejar como entrada múlti-

ples nombres de ficheros.

tail posee muchos extras prácticos:

-f es con toda probabilidad el más

comunmente utilizado. Al igual que

ocurriera con el paginador less, esta

opción permite que se active el modo

“follow” y se registre cualquier cam-

bio. Esto es útil para controlar los

ficheros log. El comando siguiente:

tail -f /var/log/messages

envía a tail a un bucle infinito, donde

controla un fichero en busca de cam-

bios y presenta las últimas entradas.

Para abandonar el modo “follow” se

presiona [Ctrl + C]. �

Linea de Comandos: Cat • LINUX USER

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

Figura 1: Pulsa [F] para que less muestre nuevas líneas de un

fichero.

86

LINUX USER • Juegos

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

Wolfire [1], creadores de Black

Shades y Lightning’s Shadow,

ganadores del concurso de

videojuegos UDG 2002 y 2003 respectiva-

mente, han dado su primer paso en el

mundo de los videojuegos comerciales

con Lugaru[2]. Pero estos chicos crean

juegos sin centrarse en los gráficos,

destacando sobre todo lo demás la

jugabilidad y el amor por los detalles. Y

es que este juego rebosa eso: jugabilidad

y pequeños detalles.

El conejo vengadorEl juego nos pone en la piel de Turner,

un hábil conejo humanoide que, en un

ataque a su pueblo, pierde a toda su

familia. Sin nada que perder y con un

notable sentimiento de venganza se

dirige a por la cabeza del culpable de esa

matanza sin sentido. Pero no se

enfrentará a sus enemigos sólo con su

mala leche, ya que Turner domina las

artes marciales, en las que se basará

todo el juego.

Jiu-Jitsu y AikidoTurner es un experto en una mezcla de

Jiu-Jitsu y Aikido. Estas artes marciales

se basan en redirigir la energía del

ataque contra el atacante, no en dar

fuertes golpes como en el karate. Esta

Una de conejitos

LUGARU

pequeña aclaración es fundamental para

jugar, ya que si nos ponemos a luchar “a

las bravas”, esto es como en el resto de

los juegos, cuando lleguemos a los com-

bates más avanzados veremos que la

fuerza muscular de un conejo, por muy

fuerte que sea, no es comparable a la de

un lobo. Así que tendremos que asumir

que tenemos que redirigir los ataques de

los enemigos más fuertes contra ellos

mismos.

Paso a pasoEste cambio de rol en un juego de acción

nos obligará a practicar bastante hasta

acostumbrarnos. Afor-

tunadamente hay un

modo tutorial para

aprender a desenvolver-

nos con cierto éxito en

un combate.

Como norma, debe-

mos permanecer

esperando a nuestro

atacante, y justo

cuando lance el ataque

pulsaremos la tecla de

defensa (mayúsculas)

para realizar un

movimiento

automático. Turner

podrá golpearlo, blo-

quearlo, lanzarlo por los aires o incluso

desarmarlo quedándose con su arma.

Además, cuando bloqueamos un ataque,

el atacante suele quedarse desprotegido,

momento que aprovecharemos para con-

traatacar.

Turner además podrá usar tres tipos de

armas, que son cuchillos, espadas y

palos. Las técnicas de ataque y defensa

cambian según se use uno u otro tipo.

Aquí notamos uno de esos detalles de los

chicos de Wolfire: las heridas recibidas

tendrán su representación correcta en

nuestro modelo. Es decir, si nos

propinan un espadazo en el pecho, vere-

Contrastando con la inmejorable calidad gráfica que

mostramos el mes pasado con Quake 4, este mes os trae-

mos un título que precisamente no destaca por sus gráfi-

cos. Pero de vez en cuando conviene recordar que el

aspecto visual no lo es todo en un buen juego, y Lugaru

viene dispuesto a demostrarlo. POR VICENTE CARRO

Figura 1: Cuando estemos recibiendo golpes se activará un

efecto “doble” para marearnos.

mos el corte en el pecho. Si la herida es

profunda, la sangre salpicará en el suelo

dejando una visible mancha, y además

la espada quedará notablemente ensan-

grentada e incluso goteará durante un

tiempo dejando un rastro de gotas en el

suelo. También será posible rematar a

los enemigos caídos de diversas ma-

neras.

El palo de madera no provocará cortes

pero, cuando propinemos un golpe real-

mente demoledor, el rival saldrá volando

y nuestro palo se convertirá en astillas.

Junto a este estilo de juego también se

permite un estilo “sigilo”, acercándonos

silenciosamente y matándolos de un solo

golpe. Pero atención a la sangre en nues-

tras armas, ya que los enemigos la

olerán.

Modos de JuegoEn el menú principal tenemos 3 opciones

de juego: Challenge (desafío), Tutorial y

el modo historia.

Los desafíos consisten en 14 fases

independientes en las que sólo importa

lo rápido que podemos derrotar a los

enemigos. Además, dependiendo de

nuestra manera de jugar, podremos

recibir alguna mención especial como

Divide and conquer (divide y vencerás),

Take no prisoners (no hagas prisioneros)

o Aikido master entre otras.

En el breve modo tutorial se nos irán

explicando las bases del novedoso sis-

tema de combate que ya habíamos

comentado.

El modo historia no está reflejado

como tal, para acceder a él tendremos

que pulsar en los puntos rojos del mapa

principal del juego. A medida que

vayamos superando las

fases, nuevos puntos se

harán accesibles en el

mapa principal para

avanzar en la trama del

guión.

Gráficos muysimplesSin lugar a dudas la

primera impresión que

nos transmite lugaru no

es tan buena como

debería. Sus gráficos

son simples, al igual

que sus texturas y los

objetos del juego. Al

menos, los modelos de

los personajes tienen mejor aspecto. Lo

más parecido que veremos a edificios

serán cubos con texturas aceptables. La

razón de esto es que era necesario un

altísimo frameado (número de imágenes

por segundo), así como dejar el proce-

sador despejado para gestionar las ani-

maciones dinámicas (no son fijas-repeti-

tivas como en multitud de juegos).

El juego incluye un motor de física que

mejora el sistema de ragdoll (aclaramos

que ragdoll es el sistema que se usa para

que los personajes inconscientes caigan

volando de una manera más o menos

realista, en contraposición a sistemas en

los que los personajes caen siempre

igual).

¿Cómo gritan los conejos?El apartado sonoro tampoco brilla

demasiado. Es muy curioso escuchar

cómo chillan los personajes (conejos o

lobos). También podemos destacar efec-

tos como el sonido de dos espadas que

chocan entre sí, o el sonido del viento

cuando saltamos muy rápido. El resto

del audio se limita a cumplir lo mínimo.

Los temas musicales del juego son muy

correctos, de un estilo oriental, y apenas

nos daremos cuenta de que están ahí.

Modo ediciónAdemás del propio juego podemos

acceder al modo de edición. Para esto

tendremos que irnos a nuestra carpeta

de usuario y dentro de la carpeta oculta

.lugaru/Data/, editaremos el fichero con-

fig.txt. La edición es muy simple.

Buscaremos la linea “Debug:” y cam-

biaremos el 0 que tiene bajo ella por un

1, y guardamos el fichero. A partir de ese

momento el juego estará en modo edi-

ción.

Durante la partida, si pulsamos

mayúsculas+m se activará el modo

edición que nos permitirá una serie de

acciones que alargarán la vida del juego

durante mucho tiempo.

En primer lugar podemos crear nues-

tras propias fases, cambiarnos la vesti-

menta, explotar a los enemigos (

mayúsculas + i), volar (saltando), cam-

biar el tipo de terreno (j), cambiar

opciones del motor gráfico, y muchas

cosas más. Podéis encontrar una lista de

las teclas usadas en el editor en el

fichero /Data/Debug Readme de la car-

peta de instalación del juego. También

os avisamos que para usar la consola

tendréis que tener el teclado en inglés.

Nosotros lo hemos logrado escribiendo

setxkbmap us en una terminal y

después ejecutando el juego, pero hay

más maneras.

PruébaloAfortunadamente el juego puede ser

probado antes de comprarlo a través de

su demo, que podéis descargar desde

este enlace [3]. Hay que decir también

que lugaru, a pesar de sus gráficos, ha

resultado ser un éxito de ventas y ya

está en desarrollo una segunda parte

que también saldrá para linux, y esta

vez traducida al castellano, con un

novísimo motor gráfico que promete

dejar a estos violentos conejos con

mejor aspecto que nunca. Dadle una

oportunidad y no os defraudará. �

Juegos • LINUX USER

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

[1] Wolfire: http://www.wolfire.com

[2] Web de lugaru: http://www.wolfire.

com/lugaru.html

[3] Demo linux de lugaru: http://www.

wolfiles.com/lugaru-linux-x86-1.0.zip

RECURSOS

Lo mejor

• Divertido como pocos

• Nuevo estilo de combate

• Muchos detalles

Lo peor

• Gráficos demasiado simples

• Cuesta aprender a pelear

• No está traducido

7

Puntuación

Figura 1: A veces los enemigos acabarán literalmente estampa-

dos contra la pared.

suficientemente pequeño para caber en

un único disquete. Ahora tenemos que

usar el llamado “modo sin emulación”,

en el cual un bootloader (isolinux) carga

el kernel y el initrd directamente desde el

CD. Este modo de arranque no lo

soportan todos los ordenadores antiguos,

por lo que puede que a tu “viejo”

ordenador le ocurra otro tanto. Por cierto,

el ordenador más antiguo que tenemos

para probar Knoppix es un 486 con 100

MHz y 28MB de RAM. Y tengo que

arrancarlo con algunos trucos como los

que estoy describiendo.

Si intentamos arrancar en primer lugar

desde un disquete, para poder acceder al

CD y poder continuar el arranque desde

allí, tenemos que incluir en este disquete

todos los drivers necesarios para todos

los tipos de CD o DVD-ROM

(probablemente esto incluya tanto SCSI,

USB, Firewire o SATA). Esto es

ciertamente complicado.

La idea de “dividir” el DVD en varios

CD’s no es imposible, pero es bastante

difícil. Con Knoppix/unionfs se pueden

“unir” varios CD’s en un único sistema

de archivos. Pero necesitaríamos una

unidad de CD para cada disco, y además

tendríamos que modificar los scripts de

arranque para verificar la presencia de un

componente unionfs en cada unidad.

La manera más sencilla y mejor de

arrancar para ti, de momento, es crear un

CD arrancable con el kernel y el disco

RAM inicial, y (para mayor seguridad)

EXTRAER este CD de “sólo-arranque” de

nuestra unidad tan pronto como se hayan

cargado el kernel y el initrd. En este

punto, al menos para el caso de Knoppix,

se buscan los archivos necesarios para

continuar la configuración del equipo en

todas las unidades, incluida la del DVD.

Esos son los pasos necesarios para

crear un CD ejecutable con Knoppix, que

contiene sólo los archivos necesarios

para arrancar. (El DVD de Knoppix debe

estar montado en /mnt/dvd para este

ejemplo):

mkdir /tmp/bootcd

cp -a /mnt/dvd/boot /tmp/bootcd/

chmod -R u+w /tmp/bootcd/

mkisofs -input-charset U

ISO-8859-1 -pad -l -r -J U

-no-emul-boot -boot-load-size U

4 -boot-info-table -b U

boot/isolinux/isolinux.bin -c U

boot/isolinux/boot.cat U

-hide-rr-moved -o U

/tmp/bootcd.iso /tmp/bootcd

Ahora sólo tenemos que grabar

/tmp/bootcd.iso en un CD-R vacío con

nuestro programa de grabación preferido

que tenga soporte directo para grabar

imágenes iso (como cdrecord). No se

No Me Arranca el DVD

Tengo un “viejo” PC a 1 GHZ con un

lector de DVD y grabadora de CD, 512 MB

de RAM y dos discos de 80 MB.

Desafortunadamente, parece que la BIOS

no es capaz de arrancar desde el lector de

DVD.

Mi pregunta es: cada mes recibo un

valioso DVD de esta revista. ¿Cómo

podría convertir este DVD en varios CD’s

desde los que pueda arrancar?

He estado pensando bastante en

estos problemas últimamente. En

especial porque hay algunos ordenadores

viejos que ni siquiera arrancan desde la

unidad de CD-Rom de manera directa.

El verdadero problema es que, cuando

se arranca desde CD o DVD, no tenemos

sistema operativo funcionando aún, y

todos los pasos necesarios para cargar un

kernel y un disco RAM inicial desde el

CD o DVD los tiene que hacer la BIOS del

ordenador. El modo en el que esto trabaja

para CD’s y DVD’s se llama “el torito” , y

existen muchos modos posibles. La

manera en la que arrancan la mayoría de

las BIOS más viejas desde CD es

conmutando virtualmente la unidad de

CD-ROM con la disquetera y cargando

una imagen de un floppy desde CD.

Como esta imagen del floppy sólo

puede existir en ciertos tamaños, no es

fácil que quepa un kernel, un disco RAM

inicial, más todos los scripts de arranque

y los programas. Knoppix 3.x fue la

última versión con un kernel

COMUNIDAD · Konsultorio

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

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

cer mejor cómo funciona Linux, no dude en escribir sus preguntas a:

[email protected].

ELCONSULTORIODE KLAUS

sorprenda: este CD puede tener tan sólo

de 4 a 16 MB de tamaño.

Como la mayoría de los live CD tienen

que volver a verificar todas las unidades

tras cargar el kernel y el initrd, este truco

debería funcionar con la mayoría de los

Live DVD’s. Podríamos incluso crear un

CD multiarranque que permita arrancar

diferentes DVD’s con el mismo CD

inicial.

Opciones de Arranque

Existen muchísimas opciones de

arranque en Linux. Supongo que algunas

se usan más a menudo, mientras que

otras se usarán muy de vez en cuando.

¿Cuáles son las opciones de arranque

más importantes que deban conocerse, y

cómo se usan? ¿Cuál sería el “top ten” de

los parámetros de arranque

imprescindibles? ¿Tienes algún favorito

que encuentres de utilidad y que sea más

o menos desconocido?

En primer lugar tenemos que

distinguir entre opciones del kernel,

parámetros de los módulos y las opciones

“no oficiales” que no se usan nunca,

salvo que una distribución las evalúe

dentro de un script en un proceso

posterior al arranque (como hace

Knoppix). Cualquier cosa que tecleemos

(o indiquemos con un parámetro de LILO

o isolinux) después del nombre del

kernel, aparecerá en texto plano dentro

del archivo /proc/cmdline.

Las verdaderas opciones del kernel se

configuran en la parte estática de éste.

Por ejemplo: noapic o pci=bios. El

primer ejemplo deshabilita el

“controlador avanzado de

interrupciones”, que es un apaño para

algunos problemas observados con

frecuencia en las rutinas de

interrupción (o por hardware

defectuoso). El segundo ejemplo

indica al kernel que ciña la

distribución de interrupciones a la

fijada por la BIOS, en lugar de

intentar un método directo (como el

método “interrupción más

probable”).

Esto puede arreglar los problemas

en un punto muy temprano del

arranque. Desafortunadamente, no

hay manera de “deshacer” los

cambios con otra opción posterior,

por lo que, ponerlas en la línea de

opciones como “apéndice” en lilo.conf,

syslinux.cfg o isolinux.cfg sólo se

recomienda si estamos seguros de que no

vamos a necesitar apic o pci=direct al

arrancar en otro ordenador con el mismo

disco de arranque. Y luego están las

placas que insisten en tener soporte de

apic o acpi, sin los que no podremos

instalar Linux de ninguna manera.

Podemos encontrar una lista bastante

larga, pero incompleta, de opciones del

kernel en la documentación que

acompaña a cada lanzamiento del kernel

de Linux, en el archivo

Documentation/kernelparameters.txt

El segundo tipo de opciones, los

parámetros de módulo, son aquéllos que

se pasan a módulos específicos del kernel

que se compilan dentro del kernel. Estos

parámetros de módulo contienen a veces

el nombre del módulo en la primera

parte, y las opciones (o una lista de ellas)

a continuación, a modo de lista

(separada por comas, si hay más de una

opción). Algo como:

psmouse.psmouse_proto=imps

Este ejemplo le indicaría al módulo

psmouse (puerto de ratón ps/2, referido

a veces como /dev/psaux), que, en este

ejemplo, se compila directamente en el

kernel, para usar el protocolo imps con la

rueda de desplazamiento habilitada, en

lugar del protocolo ps/2 sencillo o la

autodetección. A veces esto es necesario

en portátiles cuando no se consigue que

funcionen correctamente partes del

touchpad o algunos botones (se usa

frecuentemente en touchpads Synaptics

que no responden al driver original de

Synaptics), o en casos en los que el ratón

efectúa saltos en pantalla sin razón

aparente.

El tercer tipo de opción tiene que ver

con los textos arbitrarios, separados por

espacios, que se ignoran sin más por el

kernel y por los módulos del kernel. Si

estas opciones tienen la forma

name=value, podemos evaluarlas

directamente como variables de shell

dentro de /linuxrc o en initrd (disco RAM

inicial), lo cual es ciertamente práctico

para configurar scripts que no

implementan su propio analizador

mejorado /proc/cmdline. Knoppix usa

esto para activar la DMA cuando el

usuario teclea knoppix dma en la línea de

comandos del arranque. dma no es una

opción del kernel (al menos, de

momento), pero se usa como condición

para la shell dentro de la parte de

detección de hardware de /linuxrc.

Esta es mi pequeña lista de parámetros

“favoritos” del kernel:

*acpi=off – Deshabilita la “interfaz

avanzada de configuración y

administración de energía”, que a veces

no funciona bien. Algunos ordenadores

no arrancarán sin la ACPI desconectada,

mientras que otros realmente necesitan

tenerla activada para poder distribuir

adecuadamente las interrupciones

correctamente. Si la ACPI funciona bien

en su ordenador, debería usarla

preferentemente a la más antigua APM.

ACPI nos permite controlar cosas como la

refrigeración del ventilador y los estados

de suspensión mejor que APM, que es

mucho más sencilla. Si sabemos que

nuestro ordenador necesita ACPI, pero

nuestro kernel lo desconecta por alguna

razón, a pesar de estar seguros de que lo

hemos compilado, podemos probar

acpi=force en su lugar.

• noapic – Se confunde frecuentemente

con ACPI (véase el punto anterior).

Es el “controlador programable

avanzado de interrupciones”, que

está parcialmente dentro de algunas

CPU’s y parcialmente en un chip de

la placa madre (especialmente para

controlar el I/O). La opción noapic

nos permite tener más de 15

interrupciones, que estarían muy

limitadas y preasignadas, de manera

que podamos controlar un gran

número de dispositivos. Pero a veces

no funciona (por ejemplo, algunos

componentes como tarjetas de red

aparentan estar “muertos”, en lugar

de detectarse adecuadamente).

noapic viene de “no APIC”. (Resulta

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

Konsultorio • COMUNIDAD

Figura 1: Pantalla de arranque de Knoppix 4.01.

mal asignadas. Si desconectamos el

“plug and play”, deshabilitamos la

configuración automática de tarjetas

antiguas. A menos que tengamos

todavía una tarjeta que requiera

realmente plug and play (algunas

tarjetas de sonido de este tipo se

usaron mucho en su momento), al

desconectarlo podemos solucionar

toda una categoría de problemas

potenciales.

Muchos de estos problemas con

interrupciones, direcciones I/O, buses,

etc., podrían haberse evitado, para

empezar, si el hardware de los PC no

hubiese nacido con un diseño arbitrario y

confuso, por no llamarlo chapucero

directamente, que ha ido perviviendo

progresivamente, pero que no llegó

nunca a reemplazarse.

La combinación de acpi=off noapic

pci=bios pnpbios=off es capaz de

solucionar la mayoría de los casos (al

menos según mi experiencia) en los que

Linux se cuelga durante el arranque sin

motivo aparente (en especial con los

kernels llenos de funcionalidades de los

live CD’s).

En la realidad, existe otro tipo de

opción de arranque que no es una opción

de arranque verdadera. Se usa por algún

bootloader específico para encontrar y

recolocar un disco RAM inicial, cambiar

la cantidad de mensajes de información

(verbosity level) o elegir la ubicación de

la imagen del kernel. En ocasiones estas

opciones (como initrd=..., que indica al

bootloader desde dónde tiene que leer el

disco RAM inicial ANTES de que se inicie

el kernel) se pasan también como si

fueran opciones del kernel reales.

Problemas con Sata

Acabo de comprarme un HP Pavilion

a1250n con un disco duro SATA. Uso

únicamente Linux desde 1997, y no me

considero precisamente un novato. Sin

embargo, me he encontrado con un

problema que no he podido resolver.

Parece que Linux no reconoce el disco

duro Sata instalado en el HP Pavilion. Se

cuelga justo después de la secuencia de

arranque mostrada en el Listado 1.

Llegados a este punto, el sistema no

carga el controlador del disco duro. He

probado a utilizar otros drivers SATA

pero ninguno de ellos ha funcionado.

Sin embargo, puedo arrancar Linux en

modo seguro. Le agradecería cualquier

ayuda que pueda ofrecerme, ya que HP

no ha podido ayudarme. ¡Quiero tener

mi Linux de nuevo!

Para darte una respuesta definitiva

a tu problema con el controlador tendría

que hacer algunas pruebas, pero puedo

darte algunas pistas acerca de problemas

generales con los controladores SATA.

En primer lugar, habría que ver si

cambian algo las cosas al usar mis

opciones “favoritas” comentadas en la

consulta anterior, o bien con alguna

combinación de ellas (como acpi=off

noapic pnpbios=off pci=bios), dado que

por lo general éstas no causan ninguna

pérdida de rendimiento.

Existen ciertos informes que afirman

que algunos controladores SIL también

funcionan con la opción del kernel

irqpoll, aunque esta solución no es del

todo recomendable, ya que puede causar

daños colaterales en otros dispositivos,

ralentizando el sistema.

Algunas combinaciones de acpi/apic/

bios parecen tener también influencia en

la manera en la que trabaja el

controlador SATA, y aún no se ha

conseguido la ingeniería inversa de las

especificaciones completas para poder

arreglar el driver. En tu caso, primero

deberías probar a arrancar con irqpoll .

La mejor recomendación para

controladores SATA que no funcionen

(puede que no te guste esta solución…)

es esperar al siguiente lanzamiento del

kernel, que puede que incluya el soporte

para controladores nuevos o soluciones

para los defectuosos.

En tu caso, si el controlador SATA

funciona en “modo seguro” (por

cierto, ¿tiene tu distro la opción de

arranque “modo seguro”?), podrías

verificar qué kernel se está ejecutando

en ese modo, y qué opciones se han

habilitado. Prueba con los comandos

uname -a ; cat /proc/cmdline, y puede

que encuentres una solución de

momento. �

algo extraño que unas veces se use

“… off” y otras “no…”, ¿no?). noapic

desconecta esta parte “avanzada” del

chipset y nos deja con el viejo pero

seguro método. Esto significa que es

más probable que encontremos

conflictos de interrupciones al usar

noapic, pero algunos dispositivos que

no estaban disponibles con apic, de

repente funcionarán cuando parecía

que estaban defectuosos.

•pci=bios – Por defecto, Linux intenta

asociar las interrupciones del sistema

con componentes del hardware con

un método “directo” basado en una

especie de asociaciones “más

probables”, pero sin intentar

comprobar las configuraciones de la

BIOS si no es absolutamente

necesario. “pci=bios” le indica al

kernel que use la configuración de la

BIOS definida por el usuario para la

distribución de interrupciones en

lugar de intentar su propio método.

En ocasiones tendremos que usar esta

opción cuando a una tarjeta se le

asigna una interrupción que ya estaba

reservada por otro dispositivo que

Linux no había detectado antes.

•pnpbios=off – ¿Quien no recuerda las

tarjetas “Plug and Play”? Este fue

probablemente el primer intento de

descargar al usuario de la tarea de

configurar los drivers de manera

manual y asignar las interrupciones a

los distintos dispositivos (la mayor

parte tarjetas tipo ISA). Como

alternativa se leían combinaciones de

direcciones I/O de interrupciones

permitidas de una tarjeta y se hacía

una configuración semiautomática. A

menudo esto no funcionaba y en su

lugar, el “plug and play” ponía a

prueba la paciencia del usuario, hasta

que abandonaba, desconectaba la

tarjeta y se compraba otra nueva. En

cualquier caso, la extensión Plug and

Play de la BIOS que está aún presente

en algunas placas antiguas puede

causar problemas con interrupciones

COMUNIDAD · Konsultorio

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

01 Lading sata_sil

02 Ata1: SATA max udma/100 cmd OxF880E080 ct1 OxF88oeo8a bmdma

oxF880E000 irq 11

03 Ata2: SATA max udma/100 cmd )xF880Eoco ct1 OxF88oEoca bmda OxF880E008

irq 11

04 Input: 1mEX ps/2 Logitecch explorer mouse on isa0060/serial01

05 Ata1: Dev o ata, max udma/100 488397168 sectors: lba48

Listado 1: Secuencia de Arranque Problemática

Las Juntas de Andalucía y Extremadura

han hecho una gran inversión que permi-

tió llevar a cabo la última Conferencia

Internacional de Software Libre en Málaga.

Dinero que hemos pagado todos, y cuyo

fruto vemos a diario cuando encendemos

nuestros ordenadores. ¿Es justo, entonces,

que una empresa extranjera venga a

aprovecharse de tal esfuerzo para promo-

cionar sus producto?. ¿Es justo que este

usuario que descubrió “Linux” durante la

Conferencia, vaya a buscar información en

Google y le acabe comprando un producto

a Microsoft? Pues no lo es, y personal-

mente este tema me ofende sobremanera.

Asimismo, hay muchas empresas, aso-

ciaciones y usuarios en España que se ven

afectados de la misma manera. Si bien

poco nos interesa lo que Microsoft haga o

deje de hacer con su producto, nos preocu-

pan mucho este tipo de agresiones que

directa y explícitamente violan la ley

Española para obtener beneficio

económico.

Afortunadamente la conciencia del soft-

ware libre está llegando cada vez a más

oídos en diversos ámbitos, a pesar del con-

tinuo esfuerzo que ciertas empresas

invierten en desacreditarla. Gracias a esto

contamos día a día con más gente que,

mediante el uso de la Ley como defensa,

nos ampara y permite que el software libre

siga siendo hoy una realidad. A todos ellos,

y aprovechando este medio, les doy infini-

tamente las gracias. �

91

Opinión • COMUNIDAD

Julian Coccia es el

fundador y presi-

dente de Linux

Español, una Aso-

ciación Española

sin ánimos de

lucro que cuenta

con una sub-licen-

cia de la marca Linux emitida por

Linus Torvalds en el territorio

español: http://linux.es. Julián lleva

años desarrollando aplicaciones,

escribiendo código y artículos para

ayudar en la difusión del software

libre entre sus semejantes.

EL A

UT

OR

Los sucios manejos por parte de ya-se-sabe-quién

GOLPES BAJOS

Como si no fuera suficiente el tener

que exprimir nuestra agenda diaria

para poder colaborar en este gran

proyecto llamado “Linux”, tenemos

además que aguantar los golpes bajos de

cierta gente, cuyos intereses económicos

se ven afectados por nuestra labor al-

truista.

Es así como muchos lo sentimos al

encontrarnos noticias como la campaña

publicitaria iniciada hace semanas por

Microsoft en la versión española de

Google (http://www.google.es). Mediante

el servicio Adwords, Microsoft paga para

que cada persona que busque la palabra

“Linux” en el buscador, se encuentre en

primer lugar con una publicidad de Win-

dows. La publicidad expone el caso de

éxito de una empresa que ha ganado mi-

llones al utilizar Windows en lugar de

Linux para su sitio de comercio elec-

trónico.

Curiosamente el sitio en cuestión (http://

www.tommy.com) es una implementación

de OpenCMS, un software de comercio

electrónico libre que según Netcraft está

corriendo sobre Apache

y Linux.

Pero no voy a tratar aquí cuestiones téc-

nicas ya que mi intención es hablar pura y

exclusivamente del perverso uso de la pal-

abra Linux por parte de Microsoft.

Desafortunadamente, no nos encon-

tramos ante el clásico “Coca cola Vs.

Pepsi” sino de una empresa multina-

cional, (tal vez la primera que nos viene a

la cabeza cuando se menciona la palabra

“monopolio”) perpetrando un acto per-

verso contra una comunidad mundial que

lucha por la libertad de expresión y del

conocimiento. Esto es muy fuerte y por

más que he tratado de encontrar un para-

lelismo, no me viene a la mente otro

movimiento que haya reunido a tanta

gente, ni que haya obtenido tanto para la

humanidad en tan poco tiempo como lo

ha hecho el software libre.

¿Cuál es el motivo de estos golpes bajos?

¿No tenemos acaso derecho de escribir

software y hacerlo libre cuando se nos dé

la gana? ¿A qué viene esto de desacreditar

nuestro trabajo y difamar nuestros esfuer-

zos? Por más que ciertos medios nos con-

sideren gente “rara” u “oscura”, o que

hasta el mismísimo diario El

País nos tilde de comunidad

“con grandes tabúes que no

se atreve a pronunciar el

nombre Bill Gates” (hay

que ver lo que es la

ignorancia), la realidad

es muy distinta. Nuestro

principal objetivo es

luchar por nuestro dere-

cho a escribir software y

compartirlo cómo y con

quien nos dé la gana. La verdad

es que este derecho de libertad

influye sobre los intereses co-

merciales y le toca las narices a

mucha gente.

Por fortuna seguimos avan-

zando a pesar de este tipo de

agresiones a las que estamos ya

acostumbrados, pero debemos

tomar conciencia y defender

nuestros derechos, nuestro

tiempo y nuestro dinero.

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

#06

#09

#12 #13 #14

#10 #11

#07 #08

a g o t a d o

¡Hazte con tus ejemplares

atrasados!

WWW.LINUX-MAGAZINE.ES/ATRASADOS

#15 #16

¡pídelos ya!

el REPOSITORIOde conocimientos

LINUXmás COMPLETO

¡No esperes aque se agoten!

WWW.LINUX-MAGAZINE.ES/ATRASADOS

94

EVENTOS

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

LinuxWorld Conf.& ExpoSingaporeFecha: 19 Julio 06

Ciudad: Singapore

Sitio Web:

www.linuxworldexpo.com

Debconf 6

Fecha: 14-22 Mayo 06

Ciudad:Oaxtepec,México

Sitio Web:

http://www.debconf.org

GUADEC 2006

Fecha: 24-30 Junio 06

Ciudad:Vilanova,España

Sitio Web:

http://2006.guadec.org

Información de Contacto

DirectorPaul C. Brown

CoolaboradoresPaul C. Brown, Jose Manuel González Vida, JuanRafael Fernández, Pedro Orantes, José María Ruíz,Alberto Planas, Jose A. García, Ana Mª Ferreiro

TraductoresPaqui Martín Vergara, Paul C. Brown, VíctorTienda, Oliver Kurz.

MaquetaciónFrancisco Fernández

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ónFrancisco Fernández

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

DallasCon 1-6 Mayo 06 Dallas,TX,EE.UU. www.dallascon.comLinuxTag 2006 3-6 Mayo 06 Wiesbaden,Alemania www.linuxtag.orgLinuxWorld Conference & Expo Italy 9-10 Mayo 06 Milan, Italia www.linuxworldexpo.itLinuxWorld Conference & Expo SA 16-19 Mayo 06 ohanesburgo,S.África www.linuxworldexpo.co.zaLinuxWorld Conference & Expo Brazil 23-25 Mayo 06 Sao Paulo,Brasil www.linuxworldexpo.comLinuxWorld Conference & Expo Japan 31 Mayo - 6 Junio 06 Tokio, Japón www.linuxworldexpo.comUSENIX ’06 30 Mayo - 3 Junio 06 Boston,MA,USA www.usenix.org/events/usenix066º Fórum Internacional Software Livre 4-6 Junio 06 Porto Alegre,Brazil http://fisl.softwarelivre.orgLinuxWorld Conference & Expo 5-6 Junio 06 Korea Seúl,Korea www.linuxworldkorea.comRobocup 14-20 Junio 06 Bremen,Alemania www.robocup2006.org/startGUADEC 2006 24-30 Junio 06 Vilanova,España http://2006.guadec.orgDIMVA 2006 13-14 Julio 06 Berlín,Alemania www.gi-ev.de/fachbereicheLinuxWorld Conference & Expo 19 Julio 06 Singapore www.linuxworldexpo.comLinux Symposium 19-22 Julio 06 Ottawa,Canada www.linuxsymposium.orgOSCON 2006 24-28 Julio 06 Portland,EE.UU. http://conferences.oreillynet.comBlack Hat USA 2006 29 Julio - 3 Agosto 06 Las Vegas,EE.UU. www.blackhat.comLinuxWorld Conference & Expo 14-17 Agosto 06 San Francisco,EE.UU. www.linuxworldexpo.comLinuxWorld Conference & Expo NL 11-12 Octubre 06 Utrecht,Holanda www.linuxworldexpo.nlLinuxWorld Conference & Expo UK 25-26 Octubre 06 Londres,R.U. www.linuxworldexpo.co.uk

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 17W W W . L I N U X - M A G A Z I N E . E S

Andalucía

Logo Empresa Correo-e Web 1 2 3 4 5 6 7 8

Gesinfo [email protected] www.gesinfoweb.com � � � � � �

BitRock [email protected] bitrock.com � �

Properly Software [email protected] www.properly.es/site � �

GuadaGames [email protected] www.guadagames.com �

Exprecom [email protected] www.exprecom.com � � � � � � �

LINUX LOCALLeyenda

1.- Hardware

2.- Software / Desarollo

3.- Formación

4.- Soporte / Consultoría

5.- Servidores

6.- Redes

7.- Migración

8.- Hospedaje

Cataluña

Logo Empresa Correo-e Web 1 2 3 4 5 6 7 8

IWS [email protected] www.iws.es � � � � � �

Madrid

Logo Empresa Correo-e Web 1 2 3 4 5 6 7 8

Mono::labs [email protected] www.monolabs.com � � � � � �

Datum [email protected] www.datum.ws � � � � � �

Linux Local es tu directorio de servicios y empresas de Linux cerca de ti.

¿Necesitas soporte, hardware, formación? Consulta Linux Local y encuen-

tra quién ofrece qué y dónde. El directorio se divide en regiones autóno-

mas para ayudarte a localizar las empresas que ofrecen servicios cerca de ti. Uti-

liza la leyenda de la derecha para encontrar la empresa que ofrece el servicio

que precises.

Linux Local es tu guía de servicios Linux.

¿Por qué no está su empresa eneste directorio?

LINUX MAGAZINE llega a miles de empresas, profesionales y usuarios cada mes.

Si tiene servicios o productos Linux que ofrecer ¡Llámenos!

Tlf.: +34 951 010 556

Fax: +34 951 010 516

[email protected]

98

PRÓXIMO NÚMERO

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

LINUX TUNINGEl Tuning no es sólo cosa de los apasiona-

dos de los coches.

En el próximo número de Linux Maga-

zine vemos cómo mejorar tu distro

Linux, acelerando discos duros, mejo-

rando el rendimiento para aplicaciones

multimedia y escogiendo el sistema de

ficheros idóneo para cada caso. Primero

examinamos cómo conseguir el máximo

rendimiento de un disco duro utilizando

DMA. Con una simple instrucción las caí-

das de velocidad de aplicaciones por

culpa de las lecturas y escrituras al disco

serán cosa del pasado.

A continuación enseñamos a opti-

mizar un sistema para aplicaciones mul-

timedia que requieren ejecución en

tiempo real. Con unos pocos ajustes al

kernel, comprobamos cómo realtime pri-

ority puede aumentar la velocidad de

reproducción de programas de audio y

vídeo.

Finalmente ayudamos a los lectores a

decidir qué sistema de ficheros es el ideal

para cada ocasión. Examinamos las

opciones existentes y las comparamos

en función de su velocidad, fiabilidad y

rendimiento.

Si quieres tener un sistema que fun-

cione de manera fiable y como un rayo,

no te pierdas el próximo número de

Linux Magazine.

MESSENGER BAJO LINUX

Todos tus contactos utilizan Windows y no sabes exactamente

cómo ponerte en contacto con ellos con mensajería instantánea

utilizando Linux. Si esto es un problema, te mostramos las distintas

soluciones y cómo empezar a utilizar las herramientas que Linux te

proporciona.PostgreSQL.

ANIMACIÓN 3D

No hay que hacer una gran inversión en software de diseño 3D

para crear películas animadas al estilo de Shrek o Madagascar. De

hecho, lo único que hace falta es Blender. En el número 18 de

Linux Magazine comenzamos un tutorial que sacará a flote el

artista que todos llevamos dentro.

¡PÍDELO EN TU QUIOSCO!

Número 18

PRÓXIMO NÚMERO