Linux Magazine - Edición en Castellano, Nº 17
-
Upload
linux-new-media-spain-sl -
Category
Documents
-
view
314 -
download
7
description
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
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:
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
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
/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:
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
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