GIMP LINUX MAGAZINE
Edición gráfica avanzada
Perl
Parseadores XML
Edición en Castellano
Versión 2006 Free
NÚMERO 11
2 Gb de software Fácil instalación
NÚMERO 11 • P.V.P 5,95 €
Conecta Linux con todo
Mundo Móvil
GPRS
MUNDO MÓVIL
Gammu y Wammu
GPRS: acceso móvil a Internet permanente p14 Administración de móviles con Gammu y Wammu p17 Configuración flexible con SCPM p21 Conexión a redes inalámbricas con Güifi p24
Güifi
Beagle
GIT El motor tras el desarrollo del Kernel de Linux p43
Gentoo
KMobile
KMobile El administrador de SMSs de KDE p51
GIT
Winetools
Gentoo Una distro potente, eficiente y a medida p38
Celestia
Dr. Geo
Celestia
X11
Viaja por el cosmos desde tu escritorio p82
WWW.LINUX- MAGAZINE.ES
Winetools Simplifica la instalación de aplicaciones Windows bajo Linux p47
Secuestro TCP ¿Está tu red segura? p71
EDITORIAL
EL QUE NO LLORA… Estimado Lector de Linux Magazine n barrapunto, a diferencia de en el espacio, todo el mundo te puede oír gritar. Los flames, los trolls y las quejas son frecuentes. De los dos primeros, mejor pasar, que, en la mayoría de los casos, lo único que persiguen sus autores es una efímera notoriedad. Pero de las últimas, a veces, merece reseñarse alguna cosa. Es el caso que hoy nos atañe. El día 15 de septiembre, los moderadores de barrapunto pasaron a portada un artículo de un pobrecito hablador (usuario anónimo, vaya) titulado Me equivoqué al estudiar Ingeniería Informática. Los que leen habitualmente esta sección, saben que mi actitud hacia los programadores, desarrolladores y administradores de sistemas es de franca simpatía, pero no por ello no me voy a permitir echar una jarra de agua fría sobre todos aquellos que asintieron con la cabeza y murmuraron “¡Cuánta razón tiene!” al leer el mencionado artículo. Aparte de deplorar la falta de mujeres en la carrera (queja baladí donde las haya: me parece de una superficialidad inexcusable matricularse en una carrera con la idea de poder ligar), el autor arremete contra todo lo arremetible, haciendo especial hincapié en las condiciones de trabajo, los compañeros y los jefes. De las condiciones laborales, destaca el mal salario y los contratos basura, de los compañeros denosta a los arribistas y pelotas; y de los jefes, su falta de conocimientos y escrúpulos que hacen que el desarrollo de las funciones del programador sea un infierno. Por supuesto que, si este escrito cayese en manos de un contable, profesor de academia privada, tornero o cualquiera que trabajase por cuenta ajena, la reacción inmediata sería el de “¿y qué? Si todos estamos igual” y no le faltaría razón. La sola idea de que por
E
Nos sentimos orgullosos de nuestros orígenes como publicación, que se remonta a los primero días de la revolución Linux. Nuestra revista hermana, la publicación alemana Linux Magazin, fundada en 1994, fue la primera revista dedicada a Linux en Europa. Desde aquellas tempranas fechas hasta hoy, nuestra red y experiencia han crecido y se han expandido a la par que la comunidad Linux a lo ancho y largo del mundo. Como lector de Linux Magazine, te unes a una red de información dedicada a la distribución del conocimiento y experiencia técnica. No nos limitamos a informar sobre el movimiento Linux y de Software Libre, sino que somos parte integral de él.
ser informático y haber estudiado una carrera hace uno merecedor de mejores condiciones de trabajo que el resto de la población, incluyendo a todos los demás trabajadores que hayan estudiado otras carreras, es poco realista y, lo que es peor, pretencioso. Hay una estadística por ahí que dice que hoy en día una carrera no mejora las posibilidades de encontrar trabajo. Ahí es nada. ¿Tendrá, pues, un licenciado en informática más derecho al trabajo o a mejores condiciones que uno de filología, física o veterinaria? ¿Tendrá derecho a no trabajar con gente que le desagrada? ¿Tendrá derecho a que no le cambien las directrices de un proyecto empezado? ¡Anda! ¿Y eso dónde se ha escrito? Pero lo peor de la diatriba es cuando se pone personal y reniega de las implicaciones emocionales del ejercicio de la programación. Aislamiento y la falta de reconocimiento son las principales causas de la desdicha del autor. Pues mira por donde, Van Gogh murió sólo y pobre como una rata. Miguel Ángel nunca pasó de ser una “funcionario” a sueldo del papa. Edgar Allan Poe acabó sus días confuso y olvidado por familia y amigos en un hospital de Baltimore. Sí, es duro programar, sí, nadie parece darse cuenta del esfuerzo que entraña. Valiente novedad. Mi padre era pintor y me acuerdo que en la serie “Verano Azul” había un personaje que era pintora (que me aspen si me acuerdo de como se llamaba y que me aspen dos veces si voy a perder el tiempo buscándolo en Google) y en un capítulos andaba deprimídisima la mujer. Tenía un cuadro a medio pintar de la cara de un payaso (!) al cual le faltaba la boca (!!). En eso que entra Chanquete y para tratar de animarla dice que se va a llevar el cuadro, supongo que para venderla. Ella dice: “¡Pero si le falta la boca!” y él dice “Pues se la pin-
WWW.LINUX- MAGAZINE.ES
tas en un momento y ya está”. Mi padre se cubrió la cara con las manos. No sé si queda claro el símil. ¿Te sientes aislado? Pues en el mundo del software libre tenemos una cosa llamada comunidad que suele arrimar el hombro en proyectos que merecen la pena. ¿Crees que no se valora tu trabajo? Pues también tenemos una cosa llamada “meritocracia” que significa que se te valora por lo que haces, no por lo que tienes. Tal vez el autor debería considerar contribuir a alguna causa de este mundo, si no lo hace ya. Así que, no lloremos, sigamos trabajando, que si hacemos algo que valga la pena, tarde o temprano se nos reconocerá… aunque sea después de muertos.
Paul C. Brown Director
Número 11
3
CONTENIDOS • Linux Magazine nº 11
PORTADA 14 GPRS El acceso permanente a Internet através del móvil puede sonar a pesadilla para algunos, pero para otros es un sueño hecho realidad. Todo lo que necesitamos es Linux y un móvil.
PRÁCTICO 24 Güifi Apenas instalada cualquier distribución en un nuevo ordenador, nos muestra el adaptador wifi activo y listo para ser configurado. Es exactamente aquí donde comienza el problema.
38 Gentoo Gentoo es una potente y flexible distribución de Linux que podemos configurar para que se ajuste perfectamente a nuestro entorno.
43 Winetools
PRÁCTICO 31 Beagle Si queremos tener la posibilidad de encontrar archivos, música, correo y fotos en una única búsqueda, tenemos que probar con esta herramienta.
WineTools es un programa que ayuda a los usuarios a instalar software de Windows en Linux sin perder tiempo con experimentos.
17 Gammu y Wammu La herramienta en línea de comandos Gammu lee y modifica nuestra agenda de teléfonos, calendario o configuraciones del teléfono. La interfaz gráfica Wammu ofrece al usuario front-end para las funciones más importantes.
DESARROLLO 21 SCPM 48 Perl
SCPM nos permite modificar la configu ración de la red cuando nuestro portátil cambia a una red diferente.
33 GIMP
LINUX MAGAZINE 3 6 8 10 12 29 93 94 94 95 98
4
Editorial DVD Linux Magazine Inseguridades Productos Negocios Libros Linux Local Eventos Información de Contacto Suscripciones Próximo Número
Número 11
Este tutorial nos ofrece una introducción de primera mano a herramientas avanzadas de este magnifico editor de bitmaps.
En el artículo de Perl de este mes discutimos los pros y contras de los módulos XML más populares para ayudar a elegir la mejor herramienta para nuestro trabajo.
53 Matplotlib Matplotlib es una biblioteca escrita principalmente en phyton que supone una alternativa gratuita, sencilla y de calidad a Mathlab.
WWW.LINUX- MAGAZINE.ES
DESARROLLO 57 GIT GIT es, desde hace poco, el programa encargado de permitir a los desarrolla dores del kernel de Linux tener el con trol sobre cada línea de código.
61 Python ¿Te acuerdas de cuando cambiaste la versión de Firefox por última vez? ¿ y de por qué instalaste ese programa tan raro que parece no servir para nada ? Yo tengo mala memoria, así que uso un cuaderno de bitácora.
ADMINISTRACIÓN 67 La Columna de Charly 68 XWindows Si se quieren aprovechar al máximo las excelentes características de red de X11 y afinar su configuración, será conve niente tener algún conocimiento de cómo funciona.
71 TCPHijacking Describimos cómo puede ocurrir un ataque TCP y mostraremos algunas técnicas simples para proteger nuestra red.
LINUX USER 78 KTools Componer mensajes de texto en un teléfono móvil no es fácil. Una aplicación denominada KMobileTools nos ayuda a manejar las llamadas y mensajes SMS.
2006 Free ■
DVD de arranque de fácil instalación
■
Un amplio abanico de aplicaciones, para oficina, servidores, Internet, etc...
■
Incluye KDE 3.4, GNOME 2.10, OpenOffice.org 1.1.5
■
Kernel 2.6.12
■
GCC 4.0
80 Desktopía Tablaunch es un atractivo y flexible programa de acceso rápido para el escritorio de Linux.
82 Celestia Si un viaje a la Luna no está al alcance de tu bolsillo, ¿por qué no probar con Celestia, el programa libre que te trae la galaxia hasta la comodidad de tu casa?
Más información en la página 6.
86 Educación Dr. Geo es un programa de geometría euclídea interactiva, intuitivo y perfectamente usable en clases de primaria, pero con interesantes funcionalidades de programación, macros, uso de scripts y de figuras Scheme.
90 Línea de Comandos Las venerables herramientas Unix de calendario y fecha ayudan a los usuarios a mantenerse al tanto de la hora y de la fecha.
WWW.LINUX- MAGAZINE.ES
Número 11
5
DVD LINUX MAGAZINE
2006 Free
M
andriva siempre se ha destacado por ofrecer a los usuarios una instalación sencilla, junto con toda la potencia demandada por los usuarios de Linux más exigentes. Mandriva 2006 Free no es una excepción. Junto con lo último de KDE 3.4 y Gnome 2.10, la versión más reciente de la distribución franco-brasileña, nos trae lo más novedoso en lo que se refiere a herramientas para la administración y desarrollo en nuestro equipo. Por ejemplo, se incorpora la versión más reciente del compilador gcc (la 4.0) y un nuevo buscador de medios: Kat.
con un mínimo de problemas. El instalador identifica el hardware y propone una configuración. Se puede aceptar la configuración por defecto o adaptarla a las necesidades de cada cual. Seleccionaremos paquetes, redimensionaremos particiones e incluso podremos configurar el cortafuegos desde el instalador. La detección de hardware es excelente y la selección de drivers excepcional. Normalmente, sólo tendremos que pulsar las opciones que se nos presentan por defecto para tener en poco más de 30 minutos un poderoso sistema Linux funcionando en nuestra máquina.
La versión de OpenOffice elegido es el 1.1.5, la última estable antes de que se libere el versión 2 de la suite ofimática.
Figura 3: EL primer arranque de Mandriva 2006.
Panel de control
Instalación
Desde el panel de control(accesible desde el menú Sistema > Configuración > <Configuración del Ordenador>) se nos permite configurar de manera sencilla y rápida dispositivos (impresoras, escáneres, tarjetas de red, etc.), puntos de montaje, acceso a servidores, opciones de arranque, seguridad y, en general, todo lo necesario para tener un sistema ajustado a nuestro gusto. Mención especial merece Urpmi (accesible desde la pestaña Administración se Software) que nos facilitará enormemente la instalación de nuevos paquetes, al resolver automáticamente dependencias y configuraciones (ver cuadro Más allá del Figura 1: El proceso de instalación gráfico permite conDVD para más información figurar todo el sistema. sobre paquetes y repositorios). Inserta tu DVD de Mandriva Linux 2006 Free de Linux Magazine en tu lector de DVDs y rearranca tu máquina. El instalador basado en GUI configurará tu sistema
Figura 4: La instalación de paquetes se realiza a través del centro de control de Mandriva.
Requisitos del Sistema Procesador: Memoria: Disco Duro:
Destacamos
El Escritorio
Figura 2: El sistema de detección de hardware simplifica la configuración de los dispositivos.
6
Número 11
En Mandriva Linux 2006 Free, encontraremos una colección muy rica de aplicaciones multimedia. Incluido en el DVD, tenemos reproductores de medios como Kaffeine y kdetv para la televisión y el reproductor de música SoundJuicer. También encontrarás reproductores de CDs, herramienta para la edición de audio y el tostador de CDs y DVDs, K3b.
WWW.LINUX- MAGAZINE.ES
Pentium 1-4 o equivalen te. Mínimo 128 Mbs; 256 Mbs recomendado. Al menos 500 Mbs para un sistema mínimo; 2,5 Gbs recomendado para un sistema estándar.
• Kernel Linux 2.6.12 • gcc 4.0 • glibc 2.3.5 • X.org 6.9 • KDE 3.4 • GNOME 2.10 • OpenOffice.org 1.1.5 • Kolab2 • Akregator • KAT (Buscador de documentos)
DVD LINUX MAGAZINE
Para la administración de información personal, contamos con Kontact, y su alternativa, Evolution, que contienen herramientas para administrar el correo electrónico, el calendario y libreta de direcciones. Podremos navegar por la web con Firefox y Konqueror o acceder a
mensajería instantánea con Gaim y Kopete. Para los diseñadores, contamos con GIMP 2.2 para le edición de bitmaps. Mandriva 2006 también incluye la última versión de Scribus (1.3.0) para el maquetado profesional de documentos.
Más allá del DVD Los DVDs de Linux vienen a tope de paquetes y aplicaciones, pero es común que en los DVDs oficiales de algunas distribuciones comerciales, como la de Mandriva, no se incluyan algunos paquetes, o bien restricciones legales, o bien por que infringen patentes en terceros países. Es el caso de codecs para vídeo, programas clientes P2P o drivers y plugins con licencias propietarias. También ocurre que no todos lo paquetes de una distribución caben en un sólo DVD. En estos casos, si contamos con una conexión rápida a Internet, podemos aprovecharnos de los repositorios, oficiales y oficiosos, de donde bajarnos e instalarnos automáticamente software extra. Siguiendo unos sencillos pasos, podemos integrar estos repositorios en el archivo de configuración de urpmi (el asistente RPM de Mandriva que administra la instalación y las dependencias de los paquetes) y disfrutar de mucho más software del que viene en el disco. Para España, los repositorios principales de Mandriva se hallan ubicados en dos servidores FTP: el servidor de la Red Iris, perteneciente a la red universitaria y en Cica, servidor que se encuentra en Sevilla. La URL de la Red Iris es [1] para máquinas de 32 bits y [2] para máquinas de 64 bits. Los repositorios correspondientes para Cica están [3] y [4] respectivamente. En cada uno de estos repositorios encontraremos tres carpetas contrib, jpackage y main que contienen los RPMs y una cuarta, media_info, que contiene metainformación sobre los repositorios. Después tenemos los repositorios “no oficiales”, donde podemos encontrar lo que la empresa productora de la distro no puede o no quiere incluir. En el caso de Mandriva, el repositorio renegado más famoso es el de la Penguin Liberation Front, que dispone de un mirror en Cica en [5] y [6] que contienen los RPMs para cada una de las arquitecturas soportadas por Mandriva. Para añadir estos repositorios a URPMI, utilizaremos el administrador gráfico,
pulsando en Configuración del Ordenador (del menú Sistema > Configuración), introduciendo la contraseña de root y escogiendo la pestaña Administración de Software. Nos dirigimos a Administrador de Medios y podemos introducir las direcciones de los repositorios en un formulario que aparece al pulsar en el botón Añadir a medida. Escogemos las opción Servidor FTP, ponemos un nombre a gusto de cada cual y copiamos la dirección URL de la carpeta donde se hallan los RPMs en el servidor FTP dentro del cuadro URL.
Conclusión Mandriva Linux 2006 Free es un sistema ideal tanto para el usuario final como el administrador curtido y la variedad de software disponible lo convierten en una de las alternativas Linux más populares. ¡Instálalo ya!
■
Figura 5: Mandriva 2006 cuenta con todas las aplicaciones para una estación de trabajo dedicada a la productividad.
Por ejemplo, para añadir el repositorio Main del repositorio oficial de Mandriva a nuestra lista de repositorios en una máquina de 32 bits, pondríamos ftp://ftp.cica.es/U Mandrakelinux/official/U 2006/i586/media/main en el cuadro correspondiente. Para el repositorio free de la PLF, pondremos ftp://ftp.cica.es/U mirrors/Linux/plf/U mandriva/free/2006.0/U
Figura 6: Síguele la pista a tus citas con el administrador de información personal Kontact.
i586 Si bien el resto de los campos son opcionales, puede ser motivo de error el no rellenar el campo Ruta relativa a hdlist. Hay que buscar en los directorios del FTP que estemos utilizando un fichero llamado hdlist.cz para cada uno de los directorios que contiene RPMs. En los repositorios oficiales, estos ficheros suelen hallarse en el mismo directorio de los RPMs, por tanto con poner un punto (.) bastará. En el repositorio de PLF, este archivo se encuentra fuera, en el directorio inmediatamente superior. En este caso, pondremos dos puntos (..). Podemos simplificar todo el proceso, dirigiéndonos a la página EasyUrpmi (ver [7]), donde, siguiendo los pasos que nos indican, podremos actualizar nuestro listado de repositorios de una vez y disfrutar de todo el software que esta estupenda distribución tiene en su haber.
WWW.LINUX- MAGAZINE.ES
RECURSOS [1] Repositorios “mirror” de la Red Iris 32 bits: ftp://ftp.rediris.es/mirror/ mandriva/2006/i586/media [2] Repositorios Red Iris 64 bits: ftp://ftp. rediris.es/mirror/mandriva/2005/ x86_64/media [3] Repositorios Cica 32 bits: ftp://ftp.cica. es/Mandrakelinux/official/2005/i586/ media [4] Repositorios Cica 64 bits: ftp://ftp.cica. es/Mandrakelinux/official/2005/ x86_64/media [5] Repositorio Cica de software libre de la PLF: ftp://ftp.cica.es/mirrors/Linux/ plf/mandriva/free/2006.0/ [6] Repositorio Cica de software no-libre de la PLF: ftp://ftp.cica.es/mirrors/ Linux/plf/mandriva/non-free/2006.0 [7] Easy Urpmi: http://easyurpmi.zarb. org/
Número 11
7
LINUX USER INSEGURIDADES Schlagwort sollte hier stehen
INSEGURIDADES ■ KERNEL LINUX El Kernel de Linux maneja funciones básicas del sistema operativo. Se ha descubierto un error en la función fib_seq_start. Un usuario local podría usar este error para provocar una denegación de servicio (el sistema se cuelga) a través de /proc/net/route. (CAN-20051041) Se descubrió un error en el sistema de ficheros tmpfs. Un usuario local podría usar este error para causar una denegación de servicio(el sistema se cuelga). (CAN-2005-0977) Se encontró un error de desbordamiento de búfer de enteros cuando se
escribe a un fichero sysfs. Un usuario local podría usar este error para sobreescribir la memoria kernel, causando una denegación de servicio (el sistema se cuelga) o la ejecución de código arbitrario. (CAN-2005-0867) Keith Owens informó de un error en la función Itanium unw_unwind_ to_use_function. Un usuario local podría usar este error para causar una denegación de servicio (el sistema se cuelga) sobre arquitecturas Itanium (CAN_2005-0135). Se descubrió un error en el cliente NFS en la manipulación de errores de O_DIRECT. Un usuario local podría usar este error para
POLITICAS DE SEGURIDAD DE LAS DISTRIBUCIONES MAYORITARIAS Distribuidor
Fuente Seguridad
Debian
Info:http://www.debian.org/security/ Lista:http://www.debian.org/debian-security-announce/ Referencia:DSA-…1)
Gentoo
Mandrake
Red Hat
Slackware
Suse
Comentario
Los avisos de seguridad actuales se incluyen en la página de inicio. Los avisos se proveen como páginas HTML con enlaces a los parches. Los avisos también incluyen una referencia a la lista de correo. 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. 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. 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. 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. 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.
8
Número 11
WWW.LINUX- MAGAZINE.ES
hacer que el sistema se colgase. (CAN_2005_0207) Se descubrió una pequeña fuga de memoria cuando se defragmentan paquetes locales, lo que afectaba al subsistema de filtro de red del Kernel Linux 2.6. Un usuario local podría enviar un gran número de fragmentos cuidadosamente manipulados, lo que conduciría a un agotamiento de la memoria (CAN2005-0210). Se descubrió un error en el driver PPP de Linux. Sobre sistemas que permiten a usuarios remotos conectarse a un servidor usando PPP, un cliente remoto podría hacer que el sistema se colgase (CAN-2005-0384). Se descubrió un error en el código de sistema de ficheros ext2. Cuando se crea un nuevo directorio, el bloque ext2 escrito en el disco no se inicializa, lo cual podría conducir a una pérdida de información si una imagen de disco está disponible a usuarios sin privilegios. (CAN-2005_0400) Se descubrió un error en el encolado de fragmentos que afectaba al subsistema de filtro de red del Kernel Linux. En sistemas configurados para filtrar o en procesos de paquetes de red (por ejemplo, con cortafuegos), un atacante remoto podría enviar un juego de paquetes fragmentados cuidadosamente manipulados a una máquina y causar una denegación de servicio (el sistema se cuelga). Con objeto de explotar este error exitosamente, el atacante necesitaría conocer o adivinar algunos aspectos del juego de reglas del cortafuegos sobre el sistema objetivo (CAN-2005-0449). Un número de errores fueron encontrados en el Kernel Linux 2.6. Un usuario local podría usar estos errores para leer la memoria del Kernel o causar una denegación de servicio (colgarse). (CAN-2005_0529, CAN-2005-0530, CAN-2005-0531) Un desbordamiento de búfer de enteros en sys-epoll_wait fue descubierto en eventpoll.c. Un usuario local podría usar este error para sobreescribir en la memoria baja del kernel. Esta memoria no se usa habitualmente, por lo que no tiene
INSEGURIDADES
ninguna consecuencia desde el punto de vista de la seguridad. (CAN-2005-0736) Se descubrió un error cuando se liberaba un puntero en load_elf_library. Un usuario local podría usar potencialmente este error para provocar una denegación de servicio (cuelgue del sistema). (CAN2005-0749) Se descubrió un error en el sistema de drivers bluetooth. En sistemas en los que se cargan los módulos bluetooth, un usuario local podría usar este error para obtener privilegios elevados (de root). (CAN-2005-0750). Se descubrió una condición de carrera que afectaba al driver Radeon DRI. Un usuario local que tenga privilegios DRI en una tarjeta gráfica Radeon puede obtener privilegios de root usando dicho error. (CAN-2005-0767) Se descubrieron múltiples errores de chequeo de rangos en el handler de sistemas de ficheros ISO9660. Un atacante podría crear una imagen maliciosa del fichero, la cual podría causar una denegación del servicio (colgarlo) o ejecutar código arbitrario potencialmente, si es montado. (CAN-2005-0815)
Se descubrió un error en tty serial al establecer una disciplina de línea. Un usuario local podría usar este error para inyectar movimientos de ratón o tecleos cuando otro usuario está identificándose. ■ (CAN-2005-0839) -Referencia Red Hat: RHSA-2005:366-21 -Referencia Suse: SUSE-SA:2005:044
■ GAIM Gaim es un cliente de mensajería de Internet. Se descubrió un problema en el desbordamiento de búfer basado en pila en el modo en el que Gaim procesaba los mensajes. Un atacante remoto podría enviar un mensaje especialmente manipulado a un usuario de Gaim registrado en AIM o ICQ que podría producir una ejecución de código arbitrario. El Proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE – http://cve.mitre.org) ha asignado a este problema el nombre CAN-2005-2103. Daniel Atallah descubrió un problema de denegación de servicio en Gaim. Un atacante remoto podría intentar subir un fiche-
WWW.LINUX- MAGAZINE.ES
ro a un usuario registrado en AIM o ICQ con un nombre especialmente manipulado, haciendo que Gaim se colgara. El proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE – http:// cve.mitre.org) ha asignado el nombre CAN-2005-2101 a este problema. Se encontró un fallo de denegación de servicio en el agente del protocolo de Gadu Gadu de Gaim. Un atacante remoto podría enviar un mensaje especialmente manipulado a un usuario de Gaim registrado en Gadu Gadu, haciendo que Gaim se colgase. Hay que hacer notar que este problema solamente afecta a sistemas PPC (Power PC) y IBM s/390 que ejecuten el programa Gaim. El proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE – http:// cve.mitre.org) ha asignado el nombre CAN-2005-2370 a ■ este problema. -Referencia Debian: DSA-769 -Referencia Gentoo: GLSA 200508-06 -Referencia Red Hat: RHSA-2005:627-11 -Referencia SuSe: SUSE-SR:2005:017
Número 11
9
LINUX USER PRODUCTOS
Schlagwort sollte hier stehen
PRODUCTOS ERP+CRM=SL La empresa Inforhouse lanza la nueva versión 1.9.a del software ERP/CRM OpenXpertya. Según la web del proyecto, OpenXpertya “pretende ser una solución integral para la empresa que engloba ERP y CRM, con integración de servicios en línea de B2B o B2C”. Financiado en parte por el gobierno autonómico del Principado de Asturias, el software sirve para “la planificación global de todos los recursos” de una empresa mediana o grande. En la página de “Qué es” del proyecto se explica que este producto es el “único ERP global de software libre y muy amplia funcionalidad que claramente cumple todos los requisitos legales necesarios para su utilización en nuestro mundo empresarial. Está personalizado para nuestro mercado”.
El tipo de licencia de OpenXpertya es similar al CDDL de Sun, lo que per-
mite tener cualquier tipo de código (con licencias abiertas o privativas)
dentro de de la misma solución. Otra característica de la licencia adoptada por OpenXpertya es que no es viral, es decir, al igual que las licencias BSD, permite el desarrollo de software privativo a partir de su código base. El sitio web requiere registrarse para descargar el software, pero es muy poco exigente con los datos de los visitantes. A cambio del registro y, aparte de poder descargar OpenXpertya, se obtiene acceso a los foros de soporte donde realizar consultas e informar de errores. De momento el software, escrito en Java, sólo funciona con Oracle, pero esperan ofrecer soporte para base de datos de código abierto (empezando por PostgreSQL) en breve. ■ http://www.openxpertya.org/
GIMP 2.4 - LANZAMIENTO LISTO Gimp.org anuncia que la nueva versión del GNU Image Manipulation Program (GIMP),el programa libre de edición y retoque de bitmaps por excelencia, estará disponible en el mes de octubre del 2005 a más tardar. Según tanto los desarrolladores como los Beta-testers, la innovaciones integradas en Gimp 2.4 superan en número y en calidad las incorporadas en el último salto desde la versión 2.0 ha la 2.2. Las nuevas características incluyen nuevas herramientas que facilitarán el manipulado de imágenes, como el “Simple rectangle selection, que permitirá seleccionar una área rectangular y ajustar la zona antes de atrapar la selección en sí, permitiendo mayor flexibilidad al grafista. Otra novedad es la incorporación del algoritmo SIOX que
10
Número 11
permite una selección inteligente de elementos de perfil irregular integradas en la imagen. Esto permite, por ejemplo,
extraer una figura humana de una foto y colocarla en otra imagen sin casi ningún esfuerzo.
WWW.LINUX- MAGAZINE.ES
Se ha corregido el bug que impedía el borrado de la sección actual (un bug, por cierto, no del Gimp propiamente dicho, sino de GTK) y se ha pulido el interfaz, reorganizando los menús haciendo más accesibles opciones de uso freceunte, mejorando la usabilidad y aplicando las directrices establecidas por el GNOME Human Interface Guidelines y los estándares de Freedesktop.org. Gimp 2.4 también incluirá administración de color de manera nativa, aunque seguirá sin disponer de un soporte nativo para espacio de color CMYK, una cosa que obstaculiza su adopción generalizada entre grafistas cuyo trabajo va destinado a imprenta. http://software.newsforge. com/software/05/09/28/ 1345228. shtml?tid=75&tid=132 ■ http://gimp.org/
LINUX USER NEGOCIOS
Schlagwort sollte hier stehen
NEGOCIOS DVDS - OTRA GUERRA SUCIA Recientemente hemos vivido, como en un déjà vu, la vuelta (¿o acaso nunca lo abandonaron?) a la probada estrategia de Microsoft de mezclar churras con merinas (o, en este caso, medias verdades con mentiras) para intentar influenciar a los medios especializados y al público en general sobre lo que la empresa considera que debería ser el estándar en lo que se refiere a la próxima generación de DVDs. Por un lado tenemos a SONY, con su Blu-Ray Disc (BD, para los amigos) y por otro tenemos a Toshiba con su HD DVD. Microsoft (e Intel) apoyan el formato de Toshiba. Y los acuerdos de colaboración conjuntos firmados en abril entre los de Redmond y la empresa nipona no tienen nada que ver con este apoyo, noooo. De hecho, Microsoft publica en su página web una serie de razones “objetivas” que explican el porqué de su apoyo al formato HD DVD, entre las que podemos leer que …
“Los discos HD DVD ofrecerán discos de doble capa de 30 GBs […] comparados con los discos BD-ROM que estarán limitados a 25 GBs.”
Motivo de peso donde las haya. Claro que El estudio “objetivo” convenientemente olvida mencionar que los BDDVDs de doble capa (con los que irá equipada la PlayStation3) alcanzan los 54 GBs de capacidad. Es decir, Microsoft está comparando los HD DVDs de más alta gama con los BD DVDs de más baja. A ver si esto se va a convertir en un nuevo caso como el vivido con VHS contra Beta, donde los consumidores salieron perdiendo al estandarizarse el producto de menor calidad. Como si lo viera. http://www.microsoft.com/ presspass/press/2005/sep05/ 09-26HDDVDPromotionGroupPR. mspx http://www.us.playstation.com/ ■ PressReleases.aspx?id=279
DELL LOVES LINUX (UN POQUITO) Así que tu quieres un ordenador sin sistema operativo para meterle el último DVD de Linux Magazine. Piensas que así te ahorrarás un poco de pasta al no tener que pagar la licencias propietarias. Pues piénsalo dos veces. Resulta que buceando en lo más recóndito de la web de Dell, una empresa con fuertes enlaces comerciales con cierto proveedor de software con base en Redmond, podemos encontrar una serie compuesta por dos ordenadores de sobremesa dirigidas al usuario final interesado en el Software Libre. Bueno, en realidad sólo hay dos diferencias entre un sistema de la línea de Open Source de Dell y una de sus máquinas “estándar” (con
12
Número 11
Windows pre-instalado). Una es que la línea E510 no viene con ningún sistema operativo instalado, ni propietario, ni
Como si fuese muy tedioso formatear un disco duro. La segunda diferencia es el precio. Comprar un Dell sin
Kai-Fu Lee
libre, lo que, según Dell, dota “a los clientes de la flexibilidad de instalar un sistema operativo alternativo (tal como una versión de Linux)”.
sistema operativo sale por 55 dólares más que uno con Windows preinstalado. Sí, has leído bien: $55 MÁS. El Dell E510 pelado cuesta 774
WWW.LINUX- MAGAZINE.ES
dólares, mientras que el E510, con exactamente la misma configuración de hardware y Windows XP Media Center sale por 719 dólares. Lo que no se especifica es que si el incremento del coste es debido a algún acuerdo establecido con ya-sabesquién, o por que estás pagando las horas de trabajo de un técnico que tiene que perder la mañana expurgando la rémora de la máquina. Eso sí, el cartelito de “Dell Recomienda Windows XP(R) Professional” sigue colgando de la página. http://www.theregister.co. uk/2005/10/06/dell_open_pc/ http://www1.us.dell.com/ content/topics/segtopic.aspx/ e510_nseries?c=us&cs=19&l ■ =en&s=dhs
Mundo Móvil • PORTADA
Herramientas útiles para el viajero
¡MOVILÍZATE! a industria de las telecomunicaciones ha invertido miles de millones a lo largo de los últimos años en redes de telefonía móvil, un espectacular despliegue tecnológico que sería incluso la envidia de muchas civilizaciones extraterrestres. Pero el auténtico reto no se presenta en erigir torretas y repetidores, sino en conseguir la integración de las tecnologías inalámbricas a la vida cotidiana. ¿Lograremos ir más allá del simple paradigma de usar el teléfono móvil como usamos el teléfono de la salita? La siempre activa y creativa comunidad Linux, por supuesto, siempre ha sido dada a ir más allá de los paradigmas simples. Y esto se puede comprobar con facilidad con la gran cantidad de aplicaciones útiles para el mundo de los móviles. Como tema de portada de este mes, os ofrecemos herramientas Linux para las comunicaciones móviles. En nuestro primer artículo, os mostramos GPRS Easy Connect, una herramienta que permite acceder con nuestro dispositivo Linux a la Global Packet Radio Service (GRPS). GRPS es un protocolo de comunicaciones ofrecido por la mayoría
L
de las operadoras de móviles que posibilita transferencias de datos similares a Internet sobre las redes de telefonía móvil. GPRS permite acceso al correo electrónico y navegación web de manera rápida y segura, desde cualquier punto de la red. Easy Connect es la herramienta libre que lleva la tecnología GRPS a Linux. En el siguiente artículo, mostramos Gammu, una herramienta de la línea de comandos para la administración de agendas y calendarios, y Wammu, una interfaz gráfica para Gammu que proporciona otro nivel de comodidad para usuarios muy atareados. El artículo final de la serie se centra en el System Configuration Profile Manager (SCPM), una herramienta que permite
la configuración de perfiles de ordenadores portátiles. Y si buscamos aún más dentro del fascinante mundo de las comunicaciones móviles, abordamos en la sección KTools de este mes un examen a KMobileTools, una útil aplicación para la administración de mensajería para móviles en KDE. Ya sea como usuario de móvil, de ordenador portátil bajo Linux o simple lector interesado en aplicaciones de la era espacial, encontraremos algo digno de tener en cuenta en el tema de portada de este mes: comunicaciones móviles. ■
TEMA DE PORTADA GPRS en Linux…......…......... 14 Gammu y Wammu……........ 17 SCPM……………......…......... 21 Güifi……………......…......….. 24
WWW.LINUX- MAGAZINE.ES
Número 11
13
PORTADA • GPRS en Linux
G
eneral Packet Radio Service (GPRS) es un estándar de comunicaciones para redes de telefonía móvil diseñado para la transferencia optimizada de datos. GRPS generalmente tiene mayor tasa de transferencia que las viejas conexiones telefónicas cableadas, y no está diseñado para la comunicación de voz, sino para servicios como email y navegación web. Una característica importante de GRPS es que tiene la cualidad de estar “siempre disponible”. No tenemos que marcar ningún número para acceder a los servicios GRPS. La mayoría de redes de telefonía ofrecen el servicio GRPS a sus usuarios. La herramienta que nos ocupa GPRS Easy Connect nos acerca este servicio al
Internet Móvil con GPRS
EN CUALQUIER SITIO, EN CUALQUIER LUGAR El acceso permanente a Internet vía móvil puede sonar a pesadilla para algunos, pero para otros es un sueño hecho realidad. Todo lo que necesitamos es Linux y un móvil no demasiado antiguo. POR MARCEL HILZINGER
14
Número 11
WWW.LINUX-MAGAZINE.ES
GPRS en Linux • PORTADA
Figura 1: Tendremos que configurar el teléfono móvil antes de iniciar Easy Connect.
mundo de Linux. Con Linux y GPRS Easy Connect estamos sólo a un clic del universo Internet. La versión actual de este programa, escrito en Perl, soporta cerca de 300 modelos de terminal y unos 200 fabricantes. Encontraremos una detallada lista de modelos y fabricantes en [1]. En estos momentos, los desarrolladores, Péter Simon, Gábor Pintér y Andrea Bravetti, están trabajando en la versión 3.00, basada en GTK2 y que soporta UMTS y EDGE además de GPRS.
Nos Viene de Perlas… La instalación de Easy Connect debería muy ser sencilla si trabajamos bajo cualquiera de las distribuciones actuales. Todo lo que necesitamos es Perl y los módulos perl-Tk, perl-libwww-perl, y perl-URI. Al menos el DVD de Suse Linux incluye estos paquetes. En otras distros puede que tengamos que descargar alguno de estos tres paquetes de Internet. Descomprimimos el paquete GPRS_Easy_Connect_253_Install.tar.gz en un directorio de nuestra elección y tecleamos su para operar como administrador (los usuarios de Suse Linux 9.2 o anterior pueden teclear sux). Nos movemos al directorio GPRSEC_Easy_Connect_253_Install y comenzamos la instalación tecleando sh NSTALL. Pulsamos en Next y confirmamos los términos de la GNU Public License antes de seguir con la instalación. La siguiente ventana muestra una lista de componentes software que el programa ha detectado. Si alguno de estos componentes están etiquetados con Error, tendremos que instalar los programas en cuestión. Para conocer más detalles de las dependencias, podemos usar el comando sh INSTALL -c al ejecutar el instalador.
Figura 2: Para configurar la conexión, Easy detalles del teléfono, operadora e interfaz.
Después de cumplir con las dependencias, pulsamos en Next y el instalador copiará los componentes requeridos a sus destinos finales. Podemos ahora seleccionar Finish para completar la instalación.
Configuración Para ejecutar el programa por primera vez, presionamos [Alt]+[F2] y tecleamos gprsec en la consola. Aparecerá la ventana principal de Easy Connect (véase Figura 1). Pulsamos sobre Setup GPRS Easy Connect para configurar el teléfono móvil, proveedor y tipo de conexión (véase Figura 2). Seleccionamos nuestro terminal en la lista de la parte superior y el proveedor en Choose your provider. Easy Connect muestra una imagen del teléfono seleccionado, lo que supone una gran ayuda si no estamos del todo seguros de nuestra elección. Una vez seleccionado el proveedor, el programa rellena automáticamente datos de la cuenta, como la APN, nombre de usuario y contraseña. Estos detalles también están disponibles en la página web en [2] o directamente de nuestro proveedor. Desde la opción Select the port seleccionamos la interfaz para el acceso a Internet. Esto depende de nuestro tipo de conexión. Para dispositivos Bluetooth, necesitaremos generalmente /dev/rfcomm0 (véase el cuadro titulado “Conexión del teléfono vía Bluetooth”). Para conexiones USB seleccionamos /dev/ttyACM0. Si usamos una conexión serie entre el teléfono y el PC, el dispositivo es /dev/ttyS0. Por último, en caso de que estemos usando un puerto infrarro-
WWW.LINUX-MAGAZINE.ES
jos, /dev/ircomm0. Para más información relativa a configuración de conexiones por infrarrojos, podemos acudir al artículo de este número titulado “Servicios de directorio: Administrar nuestro teléfono móvil con Gammu y Wammu”. Si nuestro tipo de conexión no está en la lista, podemos acudir Connect necesita a Expert port scan y seleccionar los datos adecuados. Podemos recurrir a Select your language para cambiar el idioma de la interfaz. Ahora pulsamos en OK/Save Data para volver a la ventana principal de Easy Connect. La ventana tiene un botón para conectar: Connect. Una vez pulsado, Easy Connect nos muestra nuestra dirección IP y estadísticas de tasa de transferencia de datos una vez la conexión se haya establecido.
Usos y Costumbres En las pruebas iniciales, deberíamos ejecutar Easy Connect como root. Así tendremos acceso tanto a /etc/resolv.conf (necesario para resolver los nombres de los servidores en Internet) como al demonio PPP (scripts de conexión). En nuestro laboratorio encontramos problemas frecuentes con la conexión Bluetooth de nuestro teléfono, a pesar de que la conexión estaba activa. Puede resultar un problema caro de resolver si tenemos en cuenta los precios de los servicios de Internet vía móvil. Para ahorrarnos desagradables sorpresas, es recomendable verificar la pantalla de nuestro móvil antes de pulsar Connect: la mayoría de los teléfonos indican si se ha establecido una conexión. Para las conexiones Bluetooth en las que nuestro móvil no esté conectado a nuestro PC, incluso puede que tengamos que confirmarla. El comando /sbin/ifconfig nos muestra una lista de dispositivos en red activos. Como GPRS usa una conexión PPP, deberíamos ver una entrada para el dispositivo ppp0 si la conexión está establecida. Si la encontramos, podemos teclear ping www.kde.org para ver si puede conectar con el servidor del proyecto KDE. A una velocidad GPRS media de 5-
Número 11
15
PORTADA • GPRS en Linux
10 kbps, puede tardar un par de segundos en recibir la primera respuesta. Si el comando ping devuelve un mensaje de
error tal que unknown host, puede que la configuración con los nombres de servidor sea incorrecta. Probamos en este
caso a hacer un ping al servidor de KDE usando la dirección IP: ping 80.232.38.131
Conectar el teléfono vía Bluetooth Las distros actuales no deberían tener ningún problema en configurar la conexión Bluetooth: simplemente conectamos el adaptador USB y ejecutamos el sistema Bluetooth tecleando /etc/init.d/bluetooth start (Suse y Fedora) o /etc/init.d/bluez-utils (Ubuntu). Suse Linux 9.3 habilita el servicio Bluetooth automáticamente tan pronto como se conecta el adaptador. Si tecleamos hcitool dev podremos saber si Linux ha detectado correctamente nuestro adaptador. La salida del siguiente comando debería mostrarnos el dispositivo conectado y su dirección Bluetooth: marcel@kim:~> hcitool dev Devices: hci0 00:10:C6:29:2E:15 Podemos ahora teclear hcitool scan para verificar nuestro teléfono móvil. Nótese que sólo con activar el Bluetooth en el móvil no iremos muy lejos. El teléfono ha de estar en modo visible. El siguiente ejemplo muestra que el programa ha detectado tanto el teléfono (Z1010) como el PC (ubuntu-0): marcel@kim:~> hcitool scan Scanning ... 00:0E:07:BF:B4:C4 Z1010 00:04:61:81:5C:6B ubuntu-0 El último paso es configurar una conexión serie con el móvil. Necesitamos permisos de root para ello. Ejecutamos de nuevo hcitool scan. Podremos apreciar la dirección Bluetooth del teléfono (atención al extra entre bind y la dirección): rfcomm bind 0 00:0E:07:BF:B4:C4 Si este comando devuelve Connection refused, probablemente tendremos que emparejar el teléfono con el PC. Para ello, introducimos un código PIN en cuatro (o más) dígitos en /etc/bluetooth/pin. Debemos asegurarnos de que el archivo contiene únicamente el código PIN. Reiniciamos el servicio Bluetooth y ejecutamos el modo de búsqueda de dispositivos. Si el teléfono nos pregunta por el código PIN, introducimos el del archivo /etc/bluetooth/pin. Para verificar la conexión, pasamos a root y tecleamos minicom -s. Seleccionamos como puerto /dev/rfcomm0 y fijamos la velocidad a 115200 baudios. Ahora utilizamos el comando AT ATI para mostrar el nombre de nuestro móvil.
16
Número 11
El comando rfcomm muestra las conexiones activas. Para cerrar la conexión con el PC, de nuevo como root tecleamos rfcomm release 0. Permisos de acceso: En principio tenemos que ser root para abrir una conexión con rfcomm. Pero por supuesto, vamos a necesitar acceso al puerto serie Bluetooth desde una cuenta normal de usuario. Para ello, en primer lugar modificamos los permisos de /dev/rfcomm0. En distribuciones antiguas de Linux que no usan archivos de dipositivo dinámicos, teclearemos chmod 666 /dev/rfcomm0 en su lugar. Las distros más recientes crean un archivo de dispositivo al vuelo cuando conectamos el adaptador Bluetooth. En este caso, podemos bien volver a fijar los permisos cada vez que conectemos el dispositivo Bluetooth, o bien cambiar la configuración Udev para el dispositivo. Para ello, abrimos el archivo /etc/udev/rules.d/50-udev.rules con nuestro editor y añadimos la siguiente línea (Suse Linux 9.3): KERNEL="rfcomm*", NAME="%k" U GROUP="uucp" MODE="0660" U OPTIONS="resmgr" Para Suse Linux 9.2, abrimos /etc/udev/permissions.d/udev.permissions con el editor y añadimos la siguiente línea: rfcomm*:root:users:0666 Ubuntu ya tiene una línea que comienza por rfcomm[0-9]*. En este caso, podemos simplemente fijar los permisos a 0006. Los usuarios con Fedora Core 3 no necesitan hacer ningún cambio, ya que /dev/rfcomm0 automáticamente pertenece al usuario que ha iniciado sesión en este caso. Conexiones automáticas: Para eliminar la necesidad de teclear el comando bind de manera manual, podemos indicarle al sistema Bluetooth que lo haga de manera automática. Para ello, editamos el archivo /etc/bluetooth/rfcomm.conf. Cambiamos la línea bind no a bind yes, y editamos la dirección Bluetooth de device nuestro teléfono en 11:22:33:44:55:66. Por ejemplo: device 00:0E:07:BF:B4:C4; Tendremos que borrar la cifra de hash del comienzo de la línea, en su caso.
WWW.LINUX-MAGAZINE.ES
Si ha funcionado con la dirección IP, tendremos que usar el siguiente formato nameserver IP address
para añadir al menos un servidor de nombres al archivo /etc/resolv.conf. Podemos verificar en [2] los detalles del servidor de nombres de nuestra operadora. Una vez que hayamos establecido la conexión con éxito como root, podemos repetir el experimento con una cuenta de usuario normal. La cuenta que usemos necesitará permisos de ejecución para /usr/sbin/pppd. El administrador de sistema puede concederlos usando la siguiente orden: chmod +s /usr/sbin/pppd
En algunos casos, pueden resolverse algunos problemas puntuales con el viejo truco de apagar el teléfono y volverlo a encender.
Sorpresas Desagradables Con Easy Connect es un juego de niños configurar una conexión a Internet vía teléfono móvil. Sin embargo, tenemos que vigilar que nuestra conexión a Internet no nos provoque un agujero económico. Algunas operadoras cargan una tarifa básica por el uso de GPRS o UMTS, independientemente de que queramos hacer un simple ping o descargar 1MB de datos. Existen diversos planes escalonados para volúmenes mayores de tráfico que pueden llegar hasta unos 100 euros por mes. El tráfico GPRS puede llegar a costar hasta 20 euros por MB si no nos acogemos a un bono. Comparativamente, UMTS es más barato. Puede rondar los 2 euros por MB, dependiendo del contrato. Ojo también a los contratos de permanencia al suscribir los planes: ¡pueden llegar ■ hasta los dos años!
RECURSOS [1] Página del proyecto: http://gprsec. linuxforum.hu [2] Datos para el acceso GPRS: http:// www.taniwha.org.uk/gprs.html
Gammu y Wammu • PORTADA
Administrar nuestro teléfono móvil con Gammu y Wammu
SERVICIOS DE DIRECTORIO La herramienta en línea de comandos Gammu lee y modifica nuestra agenda de teléfonos, calendario o configuraciones del teléfono. La interfaz gráfica Wammu ofrece al usuario un adecuado front-end para las funciones más importantes. POR CARSTEN SCHNOBER
WWW.LINUX-MAGAZINE.ES
Número 11
17
PORTADA • Gammu y Wammu
E
n esta “Era de la Movilidad” en la que vivimos, el teléfono móvil se ha convertido en una importante fuente de información. Los terminales de hoy en día guardan información de direcciones y citas, y es habitual sincronizarlos con nuestro ordenador. La herramienta en línea de comandos Gammu [1] nos permite administrar los
Listado 1: Gammu en Modo Monitor 01 02 03 04 05
$ <b>gammu --monitor<b> Press Ctrl+C to break... Entering monitor mode... Enabling info about incoming SMS : Enabling info about incoming SMS : %s
06 07 Enabling info about incoming CB : Enabling info about incoming CB : %s\n 08 Enabling info about calls : Enabling info about calls : %s\n 09 Enabling info about USSD : Enabling info about USSD : %s\n\n 10 11 SIM phonebook : Used 017, Free 233 12 Dialled numbers : Used 020, Free -08 13 Received numbers : Used 010, Free 002 14 Missed numbers : Used 266, Free -254 15 Own numbers : Used 000, Free 005 16 Phone phonebook : Used 109, Free 191 17 ToDos : Used 2 18 Calendar : Used 47 19 Battery status : 100 percent 20 Network level : 100 percent 21 SIM SMS Status : 8 used, 0 unread, 40 locations 22 Phone SMS status : 15 used, 0 unread, 150 locations, 20 templates 23 Network reception: Home network 24 Network : 262 07 (Network : %s(%s", Germany), LAC C75F, CID 7563 25 Name in phone : "o2 - de"
18
Número 11
datos de una extensa selección de teléfonos móviles, sin importar si usamos un cable de datos, conexión por infrarrojos o Bluetooth. Wammu [2] proporciona una interfaz intuitiva que hace el trabajo sucio a la hora de usar Gammu.
Instalación Suse incluye tanto Gammu como su front-end Wammu. Los usuarios de Suse pueden ejecutar Yast para instalar ambos paquetes. Los usuarios de otras distribuciones pueden verificar las fuentes en Internet habituales, donde encontraremos el código fuente, así como paquetes RPM y Debian. Comenzamos descargando el paquete Gammu desde su página web, y luego tecleamos rpm -Uvh gammu-1.01.11-1.te.i386.rpm o dpkg -i libgammu0_1.01.11-0_i386.deb gammu_1.01.11-0_i386 en el caso de Debian. Necesitaremos bien las librerías bluezlib (RPM), o bien libbluetooth1 (caso de Debian) para dar soporte Buetooth para ambos paquetes. Wammu requiere también python-gammu [3]. Ejecutamos -xjf python-gammu-0.8.tar.bz2 para descomprimir el archivo en el disco duro y nos situamos en el directorio python-gammu-0.8. Tecleamos las siguientes órdenes para instalar el paquete: python setup.py build y python setup.py install. Después de completar este paso, continuamos con Wammu cuyo procedimiento es completamente similar.
Wammu Podemos ahora teclear wammu para lanzar la interfaz gráfica. La primera vez que se ejecuta no tenemos un archivo de configuración personal de Wammu en nuestro directorio de usuario. Esto hace aparecer un cuadro de diálogo. Si tenemos un archivo /.gammurc, Wammu obtendrá los valores por defecto desde ese archivo. En caso contrario preguntará si deseamos ejecutar la autodetección. Si Wammu no es capaz de autodetectar nuestro teléfono, tendremos que añadir estos datos de manera manual en Wammu | Settings (véase Figura 1). Debemos rellenar el cuadro Device con el nombre de la interfaz, que será /dev/ircomm0 para infrarrojos, /dev/ircomm0 para Bluetooth y /dev/ttyS1 si se trata de un cable de
WWW.LINUX-MAGAZINE.ES
datos USB. En función de cómo administre la configuración nuestra distro, estas rutas pueden variar ligeramente. Para más información referente a la interfaz infrarrojos, véase el cuadro titulado “Teléfono Móvil con Interfaz de Infrarrojos”. El artículo titulado “En cualquier sitio, en cualquier lugar: Internet móvil con GPRS” (en este mismo número) tiene un cuadro relativo a configurar la interfaz Bluetooth. Seguidamente definimos el protocolo en Connection. Existe una lista de teléfonos y tipos de conexión soportados por Gammu en [4]. Seleccionamos Phone | Connect para indicarle a Wammu que se conecte al terminal. La barra de estado en la parte inferior de la ventana muestra el estado de la batería, hora del sistema y potencia de la señal. El menú Retrieve sirve para descargar datos del teléfono. No todos los teléfonos soportan todas las funciones. De nuevo, nos remitimos a la base de datos en [4] para más información. El menú Info muestra los detalles del teléfono, como el número de serie, modelo y versión del firmware. En Contacts tendremos acceso a los contactos de nuestra agenda, que pueden organizarse en dos grupos: contactos en la tarjeta SIM y contactos en la memoria del teléfono. Si seleccionamos Calls veremos las llamadas entrantes y salientes, Messages para los mensajes SMS, Todos para la lista de tareas y Calendar para los datos del calendario. Las funciones para subir datos no están completamente soportadas en todos los teléfonos en la versión Wammu 0.8. En nuestro laboratorio fuimos incapaces de crear nuevos contactos o citas del calendario. Las tareas nuevas provocaban un mensaje de error, lo cual no impedía que se guardasen en la memoria del teléfono. Lo mismo ocurría con el editor de SMS mostrado en la Figura 2. A pesar del mensaje de error, el SMS realmente llegaba a destino.
Copia de Seguridad Una adecuada copia de seguridad del teléfono puede salvarnos de perder toda la información en caso de pérdida o robo del aparato . El menú Backup nos ayuda a salvar todo o una selección de los datos del teléfono. Seleccionamos Backup | Save para abrir un explorador donde podemos especificar el formato a
Gammu y Wammu • PORTADA
mos gunzip gammurc.gz para descomprimirlo y renombramos el archivo con mv gammurc.gammurc. Para usar nuestro teléfono, podemos bien entrar como root y editar el archivo de configuración global, o bien editar sólo nuestra configuración personal. Los apartados port y connection en la sección [gammu] son importantes. Una Figura 1: La interfaz gráfica Wammu ofrece al usuario acceso a almohadilla (#) indica los datos de contactos y citas guardados en el teléfono. a Gammu que ignore la línea. Podemos exportar en la parte inferior de la lista. introducir los mismos datos que en la Podemos bien seleccionar Gammu sección Wammu anteriormente vista, o backup [all data] para guardar toda la usar los datos de [4], esto es, /dev/ttyS1 información en formato Gammu, o bien para port, /dev/rfcomm0 para una conepodemos almacenar un subconjunto de xión Bluetooth o >/dev/ttyACM0 para los datos en los formatos extendidos un cable de datos. Asimismo copiamos LDIF o VCF. Prácticamente cualquier la entrada connection desde Wammu. aplicación de agenda tiene soporte para La herramienta gammu --help muestra al menos uno de estos formatos. Para los una enorme lista de opciones Gammu, terminales Nokia, podemos incluso usar algunas de las cuales son especificas el formato de contactos propietario de dependiendo del dispositivo. Para una Nokia. Wammu procesa también la información más detallada de los puntos información del calendario para poder importantes podemos teclear algo como usarla con otros programas, guardando gammu --help filesystem, por ejemplo. El los archivos en formato iCal de Apple o parámetro identify nos indica si Gammu en el formato vCal estándar. soporta nuestro terminal.
Gammu Wammu no soporta todas las funcionalidades del teléfono móvil, pero la herramienta en línea de comandos Gammu viene a rellenar este hueco. Gammu permite al usuario acceder al sistema de archivos del teléfono móvil y a las funcionalidades especiales de control, como radios o cámaras integradas. Podemos incluso ejecutar tests para verificar la alarma vibratoria y la luz del teclado o la pantalla. Gammu se configura editando el archivo .gammurc de nuestro directorio de usuario, o bien en /etc/gammurc para todos los usuarios. Si hemos instalado el RPM Gammu la configuración global estará localizada bajo /etc/. El paquete Debian tiene un archivo de ejemplo comprimido en /usr/share/doc/gammu/examples/config/gammurc.gz. Copiamos este archivo a nuestro directorio de usuario, ejecuta-
$ gammu --identify Manuf. : Nokia Model : 6610 (NHL-4U) Firmware : 4.74 C (14-04-03) Hardware : 0640
Gammu nos ofrece todas las funcionalidades de Wammu y muchas más. gammu --getallcalendar lee las anotaciones del calendario y las muestra como texto. El resultado que obtenemos de la agenda depende de las funcionalidades que soporte nuestro teléfono: algunos teléfonos envían la agenda completa cuando tecleamos gammu --getallcategory PHONEBOOK y el primer contacto al ordenarle gammu --getcategory PHONEBOOK 1. Con otros teléfonos es necesario especificar --getmemory, además de un especificador del tipo de memoria: ME hace referencia a la agenda interna del terminal y SM a la tarjeta SIM. Podemos tam-
WWW.LINUX-MAGAZINE.ES
bién referir un contacto especificando su número. Por ejemplo, la orden siguiente captura los contactos de la agenda del 1 al 100: gammu --getmemory ME 1 100
gammu --getmemory DC 1 - 10 usa una técnica similar para acceder a las llamadas realizadas, desde la posición 1 a la 10. Si especificamos MC en lugar de DC, obtendremos las llamadas perdidas, mientras que con RC accedemos a las llamadas recibidas. gammu --getmemory
Cuadro 1:Móviles con Interfaz Infrarrojos Muchos portátiles tienen un puerto de infrarrojos, y existen adaptadores infrarrojos para el puerto USB. En contraste con un cable específico de datos, un adaptador por infrarrojos tiene la ventaja de servirnos para múltiples dispositivos. (Existen aún muchos teléfonos y ordenadores que no tienen soporte para Bluetooth, que es la otra gran alternativa al puerto de infrarrojos). Comenzamos por instalar el paquete irda. Algunas distribuciones llaman a este paquete irda-utils. Si tenemos que conectar un adaptador USB, no debemos olvidar reiniciar el sistema de infrarrojos tecleando /etc/init.d/irda restart. Tendremos que hacer esto último como root. La mayoría de las distros denominan por defecto a la interfaz infrarroja como /dev/ttyS1 por defecto. Si disponemos de un adaptador FIR (“Fast Infrared”) con soporte para Linux, tendremos que cambiar en el archivo de configuración /dev/ttyS1 por el nombre del dispositivo, que podría ser algo como stir4200, por ejemplo. El archivo de Suse que administra toda esta configuración se denomina /etc/sysconfig/irda. Pero otras denominaciones como etc/irda o /etc/default/irda-utils (Debian) son bastante comunes. El siguiente paso es introducir el puerto especificado en nuestra configuración de infrarrojos como Port en la configuración de Gammu y Wammu, es decir, /dev/ttyS1 o el nombre del dispositivo que hayamos configurado. Añadimos, por último, una entrada para la conexión al teléfono en Connection. Generalmente es irdaphonet, aunque podría ser también algo como infrared, fbusirda o irdaat.
Número 11
19
PORTADA • Gammu y Wammu
ON 1 muestra nuestro propio número y VM lista los mensajes enviados desde nuestra bandeja de salida. Para todas estas funciones, obviamente, necesitamos un terminal que soporte el tipo de memoria al que queremos acceder. Podemos hacer una búsqueda en el sistema de archivos del teléfono tecleando gammu --getfilesystem. Con esto mostramos todos los archivos guardados en el teléfono ordenados por directorio. Podemos ahora transferir una archivo al disco duro especificando su número: gammu --getfiles 63
gammu --help nokia y gammu --help siemens, por ejemplo, nos muestra más detalles de los terminales de estos dos fabricantes. Una vez más: no todos los terminales soportan todos los comandos. Por ejemplo, cuando intentamos leer el código de seguridad tecleando gammu -nokiasecuritycode, obtuvimos 12345 en varias ocasiones. Si estamos interesados en cargar o descargar tonos desde o hacia el terminal, deberíamos echarle un vistazo a gammu --help ringtone para comprobar los parámetros adecuados de Gammu. Si tecleamos gammu --getringtoneslist obtendremos una lista completa de los tonos almacenados en el teléfono. Con gammu --getringtone 51 ringtone, por ejemplo, transferimos el tono almacenado en la posición 51 a un archivo llamado ringtone en nuestro disco duro. El formato dependerá de nuestro terminal.
SMS entrantes. El comando gammu -monitor muestra una lista de eventos a intervalos regulares, como se muestra en el Listado 1. En caso de que llegue un mensaje o entre una llamada, el monitor muestra el número del emisor o llamante. Podemos escribir un script Bash para leer los datos, convertirlos en un archivo log y evaluar el resultado si tenemos unos ligeros conocimientos de programación. Los desarrolladores de Wammu o los desarrolladores de cualquier otro front-end
Figura 2: Podemos usar el Editor de SMS para componer mensajes cortos sin tener que usar el teclado del móvil.
El comando nokia --nokiamakecamerashoot dispara la cámara digital de nuestro móvil Nokia, obviamente suponiendo que el teléfono tiene cámara integrada, y con gammu --nokiatuneradio activamos la radio. El programa parece funcionar mejor con los móviles Nokia. Esto puede deberse al hecho de que el proyecto predecesor, Gnokii, estaba centrado en los terminales Nokia. De momento, la herramienta en línea de comandos carece de un front-end adecuado a su enorme abanico de funcionalidades. El uso de la herramienta requiere conocimientos más que básicos, en según qué ocasiones, por parte del usuario. Aunque Wammu cubre la mayor pare del las funcionalidades comunes, otras no están convenientemente soportadas. Dicho esto, merece la pena dedicarle un rato a probar ambas herramientas. Si no desistimos, Gammu puede ayudarnos a acceder prácticamente a cualquier cosa que almacene■ mos en nuestro teléfono móvil.
Monitorizar Llamadas Entrantes Gammu nos permite monitorizar las llamadas y mensajes
20
Número 11
que surja, podrían usar este tipo de script en el futuro para mejorar la interfaz gráfica de usuario. En función del tipo de teléfono (y de accesorios que tengamos), Gammu tiene un amplio abanico de funciones adicionales.
WWW.LINUX-MAGAZINE.ES
RECURSOS [1] Gammu: http://www.gammu.net [2] Wammu: http://www.cihar.com/ gammu/wammu [3] Python Gammu: http://www.cihar. com/gammu/python [4] Base de datos de terminales para Gammu: http://www.cihar.com/ gammu/phonedb
SCPM • PORTADA
Gestionar Configuraciones de Red con SCPM de Suse
RED FLEXIBLE SCPM le permite modificar la configuración de su red cuando su portátil cambia a una red diferente. Siga leyendo para aprender más sobre el gestor de perfiles SCPM de Suse Linux. POR RICHARD BARABAN
E
l Gestor de Perfiles para la Configuración del Sistema (SCPM) es una herramienta para usuarios móviles. SCPM almacena una variedad de perfiles de configuración del sistema y cambia los perfiles mediante un comando o con un clic de ratón. Vamos a suponer que Sra. M. utiliza su portátil tanto en la oficina como en casa y necesita diferentes configuraciones de red para acceder de forma segura a Internet desde los dos lugares. En el trabajo, utiliza una tarjeta Ethernet conectada a la red local, con DHCP para más detalle. El acceso a Internet se realiza mediante un servidor Proxy. En casa, utiliza una WLAN para navegar por la red y NFS para comunicarse con el equipo de sobremesa. Ahora vamos a suponer que la Sra. M. quiere almacenar datos de la empresa en su portátil y usar su PC de sobremesa de casa basado en Linux para procesar esos datos. Vamos a complicarlo… Los servidores de la compañía utilizan Windows, así que la Sra. M. necesita tener dos configuraciones de red diferentes:
•
Una configuración para la tarjeta Ethernet en el trabajo, que le proporciona la capacidad de acceder a los recursos compartidos de Windows. • Una configuración para conexión encriptada mediante WLAN en casa, para permitirle el acceso a su equipo de sobremesa utilizando NFS. Como la Sra. M. es una mujer de hoy en día que a menudo está en la carretera, necesita un tercer perfil para los viajes de negocios; este perfil tiene deshabilitado todos los servicios de red.
Juego de Niños con SCPM Si utiliza Suse Linux y trabaja en un entorno similar al de la Sra. M., le recomiendo el módulo SCMP de YaST. Para lanzar el módulo, presione [Alt] + [F2] y teclee kdesu yast2 para abrir la herramienta de configuración de Suse Linux. A continuación, seleccione Profile Manager bajo System. La primera vez que arranca el módulo en Suse Linux 9.3 aparece una ventana con una pequeña introducción a SCPM. Si cierra la ventana por error, puede hacer
WWW.LINUX-MAGAZINE.ES
clic en Show Introduction para regresar a la introducción. Por supuesto, la excelente ayuda online de YaST y la URL info:scpm en Konqueror, le proporcionará más información detallada. YaST almacena la configuración de usuario en los llamados perfiles. Antes de que comience a añadir perfiles, primero necesita habilitar el gestor de perfiles mediante Options. Para hacerlo, haga clic en el botón Enabled, luego en OK y YaST creará el perfil default. Este perfil contiene su configuración actual y es una plantilla muy útil para cualquier configuración de red. Para cambiar el nombre del perfil, haga clic en Edit en la ventana System configuration profile management. Hay dos formas de modificar perfiles: • Puede cambiar la configuración del sistema y almacenar la nueva configuración en un perfil. • YaST cambia/almacena su perfil automáticamente al arrancar o al cambiar. Deberá decidir que forma es más práctica para usted. Lo anterior incluye decidir la configuración que necesita para su sistema y almacenarla en un perfil. Por defecto, SCPM utiliza la segunda
Número 11
21
PORTADA • SCPM
opción. Cuando cambia de perfil o apaga el ordenador, YaST almacena cualquier cambio que se haya producido en la configuración. Para prevenir esto, debería habilitar Drop changes para ambos modos Switch mode y Boot mode bajo Options. Puede intercambiar perfiles en YaST mediante el icono SCPM en la barra de inicio rápido y tecleando un comando. El comando profile_chooser lanza el panel. Diríjase a la Tabla 1 para ver más detalles de las opciones de la línea de comandos. Para definir configuraciones para un perfil, primero necesita cambiarse a este perfil. Haciendo clic en el panel se mostrará qué perfil está utilizando actualmente. Cuando escoja su perfil, el applet mostrará una ventana con los ficheros y los servicios afectados por el cambio (Figura 1). Para seleccionar un perfil al arrancar, necesitará presionar F3 en el gestor de arranque mientras su máquina se está iniciando. Esto puede ahorrarle el tiempo de intercambiar el perfil tras hacer login. Si prefiere utilizar el mismo perfil cada vez que inicie el sistema, añada el perfil a la configuración de su gestor de arranque. Para hacerlo, añada la siguiente entrada a la línea del kernel en /boot/grub/menu.lst: showopts PROFILE=Profilename (ver Listado 1). El fichero de configuración de SCPM se almacena en /etc/scpm.conf y proporciona la ruta a todo el sistema de ficheros de SCPM. En /var/log/scpm se encuentran los ficheros de registro del gestor de perfiles. Los perfiles por sí mismos se almacenan bajo /var/lib/scpm/profiles/ donde el nombre del fichero refleja el nombre del perfil. SCPM también tiene una base de datos donde almacena la ruta a los ficheros modificados, bajo /lib/scpm/resource_sets/. Para más detalles de SCPM vaya a
Listado1: menu.lst 01 ###Don't change this comment YaST2 identifier: Original name: linux### 02 title SUSE LINUX 9.3 03 kernel (hd0,2)/boot/ 04 vmlinuz root=/dev/hda3 05 vga=0x317 splash=silent 06 showopts PROFILE=enruta 07 initrd (hd0,2)/boot/initrd
22
Número 11
/usr/share/doc/packages/scpm/. Novell tiene el código fuente en [1].
Recursos En la terminología SCPM los recursos son elementos que cumplen con el rol de configuración del sistema. La versión actual distingue el file (ficheros de configuración) y service (tipos de recursos). YaST tiene un gran número de recursos preconfigurados y por defecto SCPM utiliza una cuarta parte de ellos. Si sus cambios afectan a un fichero o a un servicio que el grupo de recurFigura 1: Cuando se utilice el panel de applet sos actuales no tiene, puede usar para cambiar el perfil, Suse Linux muestra los YaST para crear un nuevo grupo. Los ficheros afectados. ficheros y los recursos se pueden asignar al grupo. Por supuesto, las entradas Estos scripts deben ser ejecutados por de configuración y los servicios deberían root para permitir a SCPM ejecutarlos. organizarse en grupos de recursos. Puede hacer esto simplemente introduciendo chmod 700 nombre_script. Scripts YaST también tiene en cuenta los perEn el caso que un problema no pueda misos cuando va a añadir los scripts. resolverse utilizando los recursos, SCPM El Perfil “EnCasa” puede llamar a un script cuando un usuario cambie de perfil, añadiendo la El gestor de perfiles almacena las confihabilidad de introducir configuraciones guraciones de la red en el recurso netdefinidas por el usuario. SCPM ofrece work, que por defecto está habilitado. En cuatro opciones para cuando ejecute el otras palabras, solo necesita configurar script: la tarjeta WLAN y guardar los cambios. • prestop: antes de detener los Puede continuar los procedimientos norservicios cuando abandona el males para configurar la tarjeta en YaST. perfil. Para hacerlo, seleccione YaST | Network • poststop: después de detener devices | Network card. Puede especificar los servicios cuando abandona si la tarjeta de red utilizará DHCP para el perfil. asignarle una dirección de red o si se va • prestart: antes de arrancar los a configurar con una IP estática. Si utiservicios cuando se habilita el liza la opción DHCP, necesita asegurarse perfil. de que el sistema tenga acceso a un • poststart: después de arrancar servidor DHCP. En casa, el router de la los servicios cuando se habilita WLAN normalmente toma el papel del el perfil. servidor. La Figura 2 muestra la configu-
Tabla 1: SCPM desde la línea de comandos Comando scpm scpm enable scpm disable scpm list scpm active scpm switch Profilename scpm add Profilename
scpm copy source target
scpm rename OldName NewName scpm delete Profilename
WWW.LINUX-MAGAZINE.ES
Descripción Muestra todas las opciones del comando. Habilita SCPM, si no lo está. Deshabilita SCPM. Lista todos los perfiles disponibles Muestra el perfil activo. Cambia al perfil especificado. Crea un perfil nuevo basado en la configuración actual del sistema. Copia un perfil a un nuevo perfil. Esto es útil si quiere usar el perfil original como una plantilla para el nuevo perfil. Renombra un perfil. Borra un perfil.
SCPM • PORTADA
Figura 2: Configuración de la red en una tarjeta WLAN en YaST.
ración para conexiones WLAN. También necesita modificar el nombre de la red y la clave para adaptarse al punto de acceso. Además puede usar YaST para configurar el cliente NFS. Para hacerlo, lance el módulo Network services | NFS Client . Para almacenar la configuración NFS en su perfil, también necesita habilitar el recurso NFS en YaST. El recurso anota cualquier cambio en el fichero /etc/fstab y en el servicio NFS. Según el tipo de conexión a Internet que tenga, YaST puede lanzar el cortafuegos Suse de forma automática en la configuración de la red de casa. Necesitará habilitar el recurso SuSEfirewall2 para permitirle al perfil “recordar” la configuración del cortafuegos. Tras configurar la WLAN y el NFS, lance el gestor de perfiles y permítale a YaST generar un perfil titulado EnCasa con la configuración actual. Para evitar que YaST sobrescriba el perfil, seleccione Drop changes para Switch mode y Boot mode.
Figura 3: Configuración de nuevos recursos de grupo.
/etc/sysconfig/Proxy, pero por defecto no permite esta configuración. Para cambiarla, vaya a Options | Configure resources, seleccione el grupo network y habilite el fichero haciendo doble clic en la entrada. Usted probablemente no necesite un cortafuegos para la red interna de la oficina. Trabajando como root, deshabilite el cortafuegos tecleando insserv-r rcSuSEfirewall2. Finalmente, configure el cliente de Samba para el acceso a su servidor de ficheros Windows. Para hacerlo, añada los datos requeridos al archivo /etc/samba/smbfstab. Suse Linux 9.3 tiene una plantilla útil para ayudarle con esto. Cuando finalice, guarde el perfil bajo un nombre intuitivo.
Samba Se habrá dado cuenta que YaST carece de Samba, esto quiere decir que YaST no notará los cambios en su fichero
El Perfil “EnRuta”
El Perfil “Trabajo” Para impedir que su equipo busque el punto de acceso de la WLAN y el servidor NFS en la oficina al día siguiente, querrá deshacer los cambios para utilizar los módulos apropiados de YaST. No se preocupe a la hora de guardar los cambios; el cambio al perfil EnCasa le dará los ajustes necesarios para la red de su casa cuando lo necesite. En la oficina, configure la tarjeta Ethernet y la configuración del servidor proxy. Otra vez tendrá que modificar la configuración del gestor de perfiles. El recurso network muestra el fichero
/etc/samba/smbfstab cuando cambie a su perfil de casa. Dependiendo de la configuración de red de casa, su ordenador podría perder mucho tiempo buscando servidores Samba cuando se lance; de hecho, podría bloquearse. En otras palabras, necesita establecer un grupo de recursos para su configuración Samba. Cambie al perfil EnCasa y seleccione Options | Configure resources en el gestor de perfiles. Haga clic en Add para añadir un recurso de grupo, como se muestra en las Figuras 3 y 4. Si su cliente es miembro de un dominio Samba, también necesitará añadir los ficheros bajo /etc/samba/ a su grupo de recurso. Ahora tiene dos archivos diferentes smbfstab que pueden ser analizados por los perfiles como apropiados. Usando el perfil EnCasa, Suse no montará ninguno de los directorios que se han comentado, mientras que el perfil de Trabajo usará el archivo original smbfstab.
El perfil EnRuta tiene menos trabajo que los otros. Tan sólo cree un nuevo perfil en YaST y cámbiese a este nuevo perfil para evitar cualquier cambio en su perfil normal. Entonces lance YaST y deshaga los cambios que ha hecho hasta ahora. Cuando haya terminado, regrese al perfil “EnCasa” y YaST automáticamente guardará los cambios del perfil EnRuta.■
RECURSOS Figura 4: Aquí es donde puede configurar los ficheros para los recursos SMBFS
WWW.LINUX-MAGAZINE.ES
[1] Página web del proyecto: http://forge. novell.com/modules/xfmod/project/ ?scpm
Número 11
23
PORTADA • Güifi
Una aplicación Perl a medida para redes WiFi
GESTOR GÜIFI El soporte de redes inalámbricas está incluido en la mayoría de las distribuciones de Linux desde hace tiempo. Apenas instalada cualquier distribución en un nuevo ordenador, nos muestra el adaptador wifi activo y listo para ser configurado. Es exactamente aquí donde comienza la polémica. POR JULIAN COCCIA
24
Número 11
WWW.LINUX-MAGAZINE.ES
Güifi • PORTADA
M
i problema (y el de quien viaje con su portátil con frecuencia) está en la cantidad de pasos que implica configurar una nueva red WI-FI. Hace unos días vi en un aeropuerto cómo un hombre luchaba con su XP tratando de conectarse al punto de acceso. Después de perder unos cuantos minutos presionando el botón derecho y abriendo ventanas, logró su cometido. Fue mi primer encuentro (por suerte desde lejos) con el gestor WI-FI de XP, el cual me pareció patético. “¿Será que esta gente nunca se mueve en la misma red?”, me pregunta-
ba a mí mismo. ”¿Y qué es lo que busco?”, os preguntaréis. Pues lo que busco es simplemente saber qué redes me rodean con un simple clic. Y quiero además poder conectarme a cualquiera de ellas con un segundo clic. ¿Seré tan complicado? Pues estuve buscando y probando muchas aplicaciones de gestión WI-FI para Linux, pero ninguna supo satisfacer mi necesidad. Las herramientas de consola proporcionadas por wireless-tools son muy poderosas y es muy fácil obtener, por ejemplo, una lista de puntos de acceso disponibles con iwlist (ver Figura 1). Pero esta herramienta está lejos del alcance del usuario principiante.
Listado 2: Lista de Puntos de Acceso
Figura 1: El comando iwlist es muy poderoso, pero requiere conocimientos avanzados.
Si yo fuese el hombre del “XP” en el aeropuerto, me resignaría (la resignación es práctica común para quien usa ese sistema operativo) a seguir perdiendo tiempo cada vez que preciso conectarme. Pero de ninguna manera me podría
resignar a perder el tiempo contando con la libertad de opciones que Linux me ofrece. Wireless-tools hace todo lo que necesito y es sólo cuestión de automatizarlo mediante una interfaz gráfica. Existen muchas herramientas para tal fin, así que se me ocurrió probar libgtk2-perl ya que el aspecto de GTK2 me resulta atractivo. GTK2 (Gimp Toolkit Library versión 2.x) es una librería multiplataforma para
Listado 1: Ventana Principal 01 02 03 04 05 06 07
my $win = Gtk2::Window->new; $win->set_title ('Gestor Güífi'); $win->set_border_width (6); $win->set_default_size (600, 500); $win->signal_connect (delete_event => sub { Gtk2->main_quit; }); $win->show_all; Gtk2->main;
WWW.LINUX-MAGAZINE.ES
01 my $box1 = Gtk2::VBox->new (0,3); 02 $win->add ($box1); 03 04 my $scwin = Gtk2::ScrolledWindow->new; 05 $box1->pack_start ($scwin, 1, 1, 0); 06 $scwin->set_policy (qw/automatic automatic/); 07 08 my $slist = Gtk2::SimpleList->new ( 09 'Nro' => 'text', 10 'Nombre' => 'text', 11 'Cifrado' => 'text', 12 'Canal' => 'text', 13 'Señal' => 'text', 14 'Calidad' => 'text', 15 'Protocolo'=> 'text', 16 'Dirección'=> 'text', 17 ); 18 $scwin->add ($slist); 19 20 my $box2 = Gtk2::HBox->new (0, 6); 21 $box1->pack_start($box2, 0, 1, 0);
Listado 3: Creación de Botones 01 my $btn; 02 foreach (['Buscar'],['Conectar'],['Des conectar']) 03 { 04 $btn = Gtk2::Button->new ($_->[0]); 05 $btn->signal_connect (clicked => \&boton_presionado, $_->[0]); 06 $box2->pack_start($btn, 0, 1, 0); 07 } 08 09 $btn = Gtk2::Button->new_from_stock ('gtk-quit'); 10 $btn->signal_connect (clicked => sub { Gtk2->main_quit; }); 11 $box2->pack_end($btn, 0, 1, 0);
Número 11
25
PORTADA • Güifi
Listado 4: Función “boton_presionado” 01 sub boton_presionado 02 { 03 my ($button, $op) = @_; 04 my $indice; 05 my $iface; 06 if( $op eq 'Buscar' ) 07 { 08 guifi_scan; 09 } 10 elsif( $op eq 'Desconectar' ) 11 { 12 $iface = guifi_interface(); 13 `iwconfig $iface essid off/any`; 14 `killall -9 dhclient`;
la creación de interfaces gráficas. Y libgtk2-perl es la interfaz para Perl de dicha librería. Como lo que quiero es eje-
15 16 17 18 19 20 21
22 23 24 25
`ifconfig $iface down`; } elsif( $op eq 'Conectar' ) { $iface = guifi_interface(); $indice=join(", ", $slist->get_selected_indices); my $ap=$slist->{data}[$indice][1]; `iwconfig $iface essid $ap`; } 1; }
cutar y leer la salida de comandos de consola, me pareció que ésta sería una solución rápida a mi problema.
Listado 5: Función “guifi_scan” 01 sub guifi_scan { 02 my ($cell, $mac, $essid, $linea, $key, $channel, $quality, $signal, $protocol); 03 my $iface = guifi_interface(); 04 05 @{$slist->{data}} = (); 06 $command="iwlist $iface scan"; 07 08 $cell=""; 09 $essid=""; 10 foreach (`$command`) { 11 $linea=$_; 12 if ($linea =~ /Cell\ / && $essid) { 13 push(@{$slist->{data}}, [$cell, $essid, $key, $channel, $signal, $quality, $protocol, $mac]); 14 if (!$cfg->{"$mac"}) { $cfg->set("$mac.essid",$essid) ; } 15 $cell=""; 16 $mac=""; 17 $essid=""; 18 $key=""; 19 $channel=""; 20 $quality=""; 21 $signal=""; 22 $protocol=""; 23 $numredes++; 24 }
26
Número 11
25 26 27 28 29 30 31 32 33 34 35 36 37 38
39 40 41 42 43 44 45 46 47 48 49
if ($linea =~ /^.*Cell\ (.*)\ -\ Address: (.*)/) { $cell = $1; $mac = $2; } if ($linea =~ /^.*ESSID\:"(.*)"/) { $essid = $1; } if ($linea =~ /^.*on\ key\:(.*)/) { $key = $1; } if ($linea =~ /^.*Protocol:(.*)/) { $protocol = $1; } if ($linea =~ /^.*Quality:(.*).*Signal\ level\:(.*)\ N/) { $quality = $1; $signal = $2; } if ($linea =~ /^.*Channel:(.*)/) { $channel = $1; } if ($linea =~ /^.*Bit\ Rate:(.*)/) { $quality = $1; } } }
WWW.LINUX-MAGAZINE.ES
Figura 2: La interfaz nos permite acceder y leer la salida de iwlist de forma sencilla.
Después de unos minutos escribiendo con mi editor de texto pude contar con mi herramienta básica de gestión WI-FI, a quien bauticé “Gestor Güífi”. A continuación vamos a ver el código en detalle.
Instalación Para los impacientes, el Gestor Güífi está disponible en [1]. Se requieren los paquetes libgtk2-perl y wireless-tools que, por lo general, se incluyen en cualquier distribución actual de Linux. De lo contrario, se pueden instalar fácilmente en Debian (o derivados) ejecutando: apt-get installU libgtk2-perl wireless-tools
Para más información sobre GTK2, el sitio oficial está disponible en [2].
El código El primer paso es declarar la ubicación del perl y el uso de Gtk2: #!/usr/bin/perl -w
Listado 6: Función “guifi_interface” 01 sub guifi_interface { 02 my $iface; 03 foreach (`cat /proc/net/wireless`) { 04 if (/\ (.*):/) { 05 $iface=$1; 06 } 07 } 08 $adaptador->set_text($iface); 09 return $iface; 10 }
Güifi • PORTADA
Listado 7: Cuadro de Configuración 01 my $redes = Gtk2::HBox->new(1,6); 02 $box1->pack_start($redes, 0, 1, 0); 03 04 my $frame3 = Gtk2::Frame->new("Modificar configuración "); 05 $redes->pack_start($frame3, 0, 0, 10); 06 07 $vbox2 = Gtk2::VBox->new(1); 08 $frame3->add($vbox2); 09
use Gtk2 -init; use Gtk2::SimpleList;
A continuación, creamos la ventana principal (ver Listado 1). Seguidamente creamos una tabla que contendrá la lista de puntos de acceso disponibles (ver Listado 2). La tabla se sitúa antes de la instrucción $win->show_all, que debe permanecer siempre al pie.
10 my $manual_ip = input_data($vbox2,"Dirección IP:"); 11 my $manual_subnet = input_data($vbox2,"Mascara subred:"); 12 my $manual_gw = input_data($vbox2,"Puerta de enlace:"); 13 my $manual_dns = input_data($vbox2,"DNS:"); 14 15 $hbox = Gtk2::HBox->new(0, 3); 16 $vbox2->pack_start($hbox, 0,1,
Lo siguiente es crear algunos botones que nos permitirán buscar redes, conectarnos a una red, desconectarnos, y abandonar el aplicativo (ver Listado 3). Los botones se ven sin duda muy bonitos, pero salvo el botón para cerrar la aplicación, los demás aún no funcionan ya que nos está faltando la función boton_presionado (ver Listado 4). Esta función se llama al presionar cualquiera de los tres botones.
0); 17 $btn = Gtk2::Button->new ('Aplicar'); 18 $btn->signal_connect (clicked => \&apply_config); 19 $hbox->pack_end($btn, 0, 1, 0); 20 21 $btn = Gtk2::Button->new ('Solicitar IP vía DHCP'); 22 $btn->signal_connect (clicked => \&dhcp_client); 23 $hbox->pack_end($btn, 0, 1, 0);
Al presionar el botón “Buscar”, se llama a la función guifi_scan (ver Listado 5) que se detalla a continuación. Esta función ejecuta el comando iwlist scan y completa la tabla con los valores obtenidos. Como podemos ver en el Listado 5, simplemente se invoca iwlist scan y se procesa la salida, identificando los valores que nos interesan mediante la utilización de expresiones regulares.
PORTADA • Güifi
Listado 8: Función “input_data” 01 sub input_data { 02 my ($donde, $texto) = @_; 03 my $tmpbox = Gtk2::HBox->new(0, 3); 04 $donde->pack_start($tmpbox, 0,1, 0); 05 $tmpbox->pack_start(Gtk2::Labe l->new($texto),0,1, 0); 06 my $tmpvar = Gtk2::Entry->new; 07 $tmpbox->pack_start ($tmpvar, TRUE, TRUE, 0); 08 return $tmpvar; 09 }
28
Número 11
configuración. Esto último nos permite guardar datos predeterminados para cada punto de acceso y de esta manera memori-
Listado 9: Activando cambios 01 sub dhcp_client { 02 my $iface = guifi_interface(); 03 `dhclient $iface`; 04 } 05 06 sub apply_config { 07 my $iface = guifi_interface(); 08 if ($manual_ip->get_text) { 09 $command = "ifconfig $iface ".$manual_ip->get_text." netmask ".$manual_subnet->get_text; 10 `$command`; 11 12 $command = "route del -net default"; 13 `$command`; 14 15 $command = "route add -net default gw ".$manual_gw->get_text; 16 `$command`; 17 18 $command = "echo nameserver ".$manual_dns->get_text." > /etc/resolv.conf"; 19 `$command`; 20 } 21 }
WWW.LINUX-MAGAZINE.ES
zar direcciones de IP, claves WEP u otros parámetros para cada punto de acceso. Si bien el Gestor Güífi es un guión muy simple, hay muchos usuarios que ya lo han adoptado e inclusive forma parte de la última versión de LinEspa [3]. Es necesario advertir que este guión necesita ser ejecutado como root (o mediante sudo) para contar con los permisos necesarios para realizar cambios en la configuración de red. Como toda tarea a ser ejecutada como root, es necesario tomar las debidas medidas de seguridad ■ para evitar comprometer el sistema.
RECURSOS [1] Código del programa explicado en este artículo: http://julian.coccia.com/ guifi [2] Sitio oficial de GTK2: http://www.gtk. org/ [3] LinEspa (Linux Español): http://www. linespa.com/
EL AUTOR
El adaptador de red se identifica automáticamente mediante la función guifi_interface (ver Listado 6). Esta función obtiene el nombre del adaptador WI-FI en /proc/net/wireless: Llegados a este punto, con tan pocas líneas de código, ya contamos con una interfaz gráfica que nos muestra las redes disponibles y nos permite conectarnos o desconectarnos con un simple clic. Esto nos ahorra valiosos minutos cuando nos movemos de un sitio a otro, evitándonos usar la consola de texto. Pero hay más. Lo siguiente sería contar con una ventana que nos permita configurar la dirección IP o solicitar una dirección automáticamente vía DHCP. Para esto creamos un marco que contendrá todos los valores que deseamos configurar, junto con un botón para aplicar los cambios y otro para solicitar una dirección automática. Para simplificar el código, creamos una función llamada input_data (ver Listado 8) para los campos de entrada de datos. Por último, necesitamos dos funciones más. La primera se llamará apply_config y se encargará de aplicar los parámetros de red especificados. La segunda función se llamará dhcp_client y justamente invocará el cliente de DHCP para obtener una dirección IP automática (ver Listado 9). Hemos así explicado el concepto básico del Gestor Güífi. La versión actual incluye más funciones, como un monitor de estado del adaptador de red, configuración WEP y la memorización de los parámetros de los puntos de acceso mediante un fichero de
Julian Coccia es el fundador de la Asociación Linux Español y colabora con la comunidad del software libre mediante diversos proyectos, entre ellos el foro de ayuda www.linuxespanol.com y la distribución LinEspa www.linespa.com.
Squeak: Un mundo para aprender • EVALUACIÓN
Squeak: Un Mundo para aprender
LIBROS
L
a introducción de Linux en las escuelas es la punta de lanza a través de la cual las administraciones autonómicas pretenden empezar a liberar sus diversos departamentos de la dependencia del software propietario. Sin embargo, muchos profesionales de la enseñanza se quejan de que la migración a sistemas Linux se ha realizado sin la inversión necesaria en formación para poder explotar debidamente los nuevos sistemas. Por eso es tan importante el libro que nos ocupa. Los formadores interesados en la enseñanza asistida por ordenador están siempre a la búsqueda de la herramienta definitiva que les permita abarcar todas las disciplinas y todas las asignaturas desde un mismo entorno coherente y homogéneo. En este sentido, Squeak ofrece un entorno casi perfecto, donde tanto un profesor de matemáticas o de física, como uno de lengua española o de música, puede desarrollar proyectos y juegos que pueden convertir temas, en principio áridos para el alumno, en divertidos e interactivos. Por supuesto que la curva de aprendizaje de Squeak puede ser un poco empinada debido a la gran variedad de opcio-
nes y la potencia que ofrece. Pero la filosofía de Squeak es precisamente descargar al profesor a medio y largo plazo de la tarea de “preparar” proyectos, permitiendo delegar en los alumnos la creación de material, lo que permite a su vez al profesor tomar el rol de “guía” que supervisa el autoaprendizaje de los estudiantes. Al igual que el cambio del paradigma de “profesor como dispensador de conocimientos” a “profesor como guía” es difícil de asumir por el profesional de la enseñanza que lleva toda la vida encasillado en la primera, el cambio de la metodología de enseñanza basada en “herramientas pasivas” (libros, vídeos, etc.) por la enseñanza basada en “herramientas interactivas”, sobre todo cuando se tratan de aplicaciones con tantas prestaciones como Squeak, es igualmente dificultoso. El primer obstáculo, el del cambio de paradigma del profesor es bastante difícil de superar, pero el segundo se puede paliar con títulos como el que presentamos este mes.
Para Formadores Squeak: Un mundo para aprender (Ana Pizarro Galán y otros, Editorial Editlin,
WWW.LINUX- MAGAZINE.ES
2005) es claramente un intento por parte del equipo al cargo de la implantación del uso de software libre en las escuelas por paliar la falta de documentación del que adolece la enseñanza. De hecho, el volumen viene prologado por Luis Millán Vázque de Miguel, Consejero de Infraestructuras y Desarrollo Tecnológico de la Junta de Extremadura y principal impulsor detrás del proyecto Linex, y avalada por Diego Gómez Deck, Director del proyecto Squeak de la misma institución. Aunque no hay ningún sitio en el libro donde se diga de manera explícita, el enfoque parece más orientado a apoyar a formadores que a alumnos. Esto, a mi parecer, es lógico, puesto que suple precisamente esa falta que antes mencionaba. El hecho es que el libro empieza presentando los conceptos subyacentes de Squeak, su filosofía y su historia (esperemos que a ningún profesor se le ocurra basar en un examen en este capítulo, que los hay retorcidos y mucho), para proseguir en el segundo capítulo con una guía de instalación y primeros pasos. Obviamente, toda esta información es de
Número 11
29
EVALUACIÓN • Squeak: Un mundo para aprender
más utilidad a un profesional que piensa utilizar el entorno en clase, que a un alumno. Los siguientes capítulos, hasta el capítulos 7, recorren la infraestructura de Squeak, analizando capítulo a capítulo los elementos básicos del entorno, abarcando pestañas, proyectos, catálogos de objetos, halos, etc. A continuación se nos explica la utilización de varias “aplicaciones” (como el pintor y el libro), para continuar con una introducción a guiones. Por fin, a partir del capítulo 12, se proponen guiones prácticos, a guión por capítulo, con los que se puede empezar a trabajar con los alumnos.
Insuficiente Al que suscribe, le parece una lástima que sólo se le dediquen poco más de 50 páginas a los guiones, que, a mi entender, son lo más interesante de Squeak. pero comprendo que mi opinión no puede ser objetiva: yo ya he trabajado bastante con Squeak y las 200 páginas precedentes “me las sé”. Por supuesto que puedo entender que a un profesor nuevo en el entorno le haga falta entrar
30
Número 11
en detalle en muchos de los aspectos del mismo. Sin embargo, a veces el tono didáctico del libro “se pasa” y los autores se meten en camisas de once varas en su afán de explicar. Leemos, por ejemplo, en el capítulo 2 que… “Los objetos que pueblan el Mundo reaccionan a los mensajes contenidos en los guiones que les dan vida. Un guión es una secuencia de acciones que regulan el comportamiento del objeto propietario o de otros objetos a los que alude” Bueno, vamos a ver, yo seré un poco espeso, pero llevo desde los doce años trabajando con ordenadores y programando y, aún así, tuve que leer el párrafo anterior tres veces antes de entender lo que se pretendía explicar. Más aún, este tipo de explicaciones son innecesarias: el concepto que intenta transmitir se hace evidente con el uso del interfaz. Otra “pega”: Al igual que el interfaz de Linex puede resultar confuso por qué la Junta de Extremadura ha escogido cambiar el nombre y el aspecto de las aplicaciones incluidas con su distribución, el que el libro decida utilizar exclusivamente el interfaz de la barra de herramientas de la versión de Linex, me parece un error. Squeak (y por ende, otros entornos Smalltalk) se caracterizan por disponer de un interfaz que utiliza consis-
WWW.LINUX- MAGAZINE.ES
tentemente los tres botones del ratón (o combinaciones de pulsaciones de teclados con clics de ratón) a lo largo y ancho de todas las versiones en todas las plataformas. Al documentar exclusivamente el uso del interfaz particular de la versión distribuida con Linex, se vicia al formador, creando una dependencia de este interfaz que no va a encontrar en otras implementaciones de Squeak. A mí personalmente me resultó molesto intentar seguir algunos ejemplos y encontrar que el texto se refería una y otra vez a un elemento que no aparecía en mi entorno… y yo tengo instalada la última versión oficial del programa. Sin embargo, tal y como yo lo entiendo, los errores de este libro son sólo atribuibles al hecho de que es el primero de su especie. No hay nada en este volumen que una buena re-edición no pueda solucionar.
Conclusión A pesar de algunos fallos de concepto, me parece este un libro imprescindible. Imprescindible para ayudar a abrir las puertas de las aulas a Squeak definitivamente. Imprescindible para inaugurar una nueva línea de material escolar que permita que el profesional de la enseñanza pueda explotar de manera adecuada las poderosas herramientas que se han puesto a su alcance. Y, lo más importante, imprescindible para ayudar a fomentar la creatividad y el espíritu colaborativo entre nuestros hijos. Lo anterior no quita que pueda exigir a los autores que se pongan las pilas y nos ofrezcan una segunda parte con guiones, ■ muchos guiones.
Beagle • PRÁCTICO
El buscador buscador de de escritorio escritorio Beagle Beagle El
OLFATO CANINO Si queremos tener la posibilidad de encontrar archivos, música, correo y fotos en una única búsqueda, tenemos que probar con esta herramienta que posee la misma potencia que el motor de búsqueda de un buscador de Internet. POR TIM SCHÜRMANN
L
os motores de búsqueda peinan continuamente la red para crear un catálogo de documentos. Cuando un navegante introduce una clave de búsqueda, el motor del buscador verifica su índice y muestra una lista de resultados. Se ha realizado un gran progreso en el mapeado de las tenebrosas profundidades de Internet, pero las herramientas de búsqueda de escritorio son aún muy primitivas en comparación. Hoy en día los discos duros están repletos de la más variada información en forma de cartas, correo, música y fotografías, a menudo almacenados en directorios de manera confusa y contraintuitiva. Cualquiera que haya buscado en esta jungla algún documento perdido en el olvido se alegrará de saber que la búsqueda de escritorio ya no se limita a buscar por nombre o fecha. Los desarrolladores de Beagle [1] decidieron cubrir esta carencia en los buscadores utilizando como base las funciones de búsqueda de MacOS X de Apple. El objetivo de aquéllos es tener un acceso rápido y simple a cualquier tipo de información. Sin embargo, el desarrollo está aún en proceso y la versión actual todavía es experimental. Habiendo dicho esto, hemos encontrado una herramienta muy estable y hemos quedado gratamen-
te sorprendidos por los resultados. De hecho, la única cosa que puede impedir que instalemos Beagle es algún sistema de ficheros no soportado. Beagle no soporta discos duros con Reiser4 en el momento de escribir estas líneas.
Puesta en Marcha Beagle en sí mismo está formado por tres componentes. El demonio Beagle proporciona la funcionalidad de buscador. Rastrea nuestro disco duro en segundo plano buscando todos los documentos de tipo conocido. Internamente, el demonio usa el probado motor de búsqueda Lucene del proyecto Apache [2]. El demonio analiza la información almacenada y registra sus hallazgos en su propia base de datos, el llamado índice,
Figura 1: El programa de búsqueda Best muestra los resultados para la consulta “Gnome”.
WWW.LINUX- MAGAZINE.ES
para una veloz recuperación de los datos. Después de crear el índice, queda en espera de las peticiones de búsqueda. Las peticiones vienen del segundo componente, que proporciona al usuario una adecuada interfaz para la búsqueda y presentación de los resultados. Esta aplicación se conoce como el cliente Beagle. Los desarrolladores han elegido deliberadamente este diseño en dos partes, para permitir a otras aplicaciones acceder al servicio de búsqueda de Beagle. Por ejemplo, además del sencillo buscador Best (Figura 1), existe una extensión para el popular navegador Firefox. Para permitir al cliente Beagle pasar una petición al demonio, las versiones antiguas de Beagle (como la versión que acompaña a Suse 9.3) necesitan otro programa. Es el llamado D-Bus, que proporciona una infraestructura de comunicación global entre varios componentes en un sistema Linux [3]. Por lo tanto, tenemos tres pasos para poder configurar y ejecutar Beagle: 1. Ejecutar D-Bus. 2. Ejecutar el demonio Beagle. 3. Ejecutar un cliente Beagle adecuado y usar el cliente para enviar una petición al demonio Beagle. Desde la versión 0.0.10 (y posteriores) sólo se especifica D-Bus como un com-
Número 11
31
PRÁCTICO • Beagle
Cuadro 1: Compilar Beagle Si nuestra distribución no incluye un paquete Beagle, tendremos que compilarlo desde su código fuente e instalar la aplicación de manera manual. Esto no es una tarea trivial debido a que existen numerosas dependencias, pero el siguiente resumen nos ayudará a sortear los escollos. Beagle necesita ciertos paquetes: el entorno Mono, gtk-sharp, gecko-sharp, gmime, la base de datos SQLite y libexif. Además necesitaremos versiones específicas de estos paquetes en función de la versión de Beagle. Tenemos que compilar los componentes en el mismo orden en el que ejecutaríamos las aplicaciones. En primer lugar el paquete D-Bus (para las versiones anteriores a la 0.0.10), luego el demonio Beagle y por último un cliente Beagle. Los tres se compilan e instalan con los tres comandos usuales. Best y los clientes beagle-query son producto del demonio beagle: ./configure make su -c "make install" Al hacer el configure frl paquete D-Bus tendremos que especificar el parámetro --enable-mono. Tras instalar D-Bus, debemos asegurarnos de que nuestro kernel tiene la funcionalidad inotify habilitada. Nótese que esta funcionalidad no está disponible en algunos sistemas de archivo.
ponente extra, ya que el servidor y el cliente usan métodos de comunicación distintos.
Esperando el Bus Si tenemos una distribución reciente (como Fedora Core 3, Ubuntu o Suse 9.3), el D-Bus ya debería estar funcionando en nuestro sistema. Suse Linux 9.3 incluye la versión completa de Beagle 0.0.8 e inicia el D-Bus automáticamente si hicimos uso de Yast para la instalación. Los programadores han elegido C# como su lenguaje de programación preferido (haciendo causa con Microsoft), y usan el entorno Mono. Los programas desarrollados con estas herramientas se ejecutan con un intérprete que es parte del paquete Mono. Los usuarios de Suse Linux 9.3 tendrán que seleccionar el paquete mono-data. En nuestro labora-
32
Número 11
torio, Yast se olvidó de instalar este componente crítico. Para verificar si el DBus está ya funcionando en nuestro sistema, tecleamos la siguiente orden en un terminal:
los ficheros que Beagle haya añadido al índice hasta ese momento.
¡Ve a por el palo!
Como hemos comentado, necesitamos un clienFigura 2: El cliente de búste Beagle para pasar una queda Best, como icono en la petición. El paquete ps x | grep dbus barra de KDE. Como se apreBeagle incluye el cliente cia, se realizaron previamenBest. Los usuarios de La salida debería incluir te las búsquedas para Suse 9.3 encontrarán una línea con la cadena “Gnome” y “Linux”. este cliente en el menú dbus-daemon-1. Si necede inicio. Como alternatisitamos iniciar el D-Bus de manera va, también podemos ejecutar best en manual, habrá que teclear: línea de comandos. Pulsando con el botón derecho en el eval `dbus-launch` icono de Best veremos una lista de peticiones previas. Si elegimos una de ellas veremos los resultados en la ventana. Desatar el Beagle Con el botón izquierdo abriremos una Lo siguiente que haremos es iniciar el ventana como la mostrada en la Figura demonio Beagle. Para ello, abrimos un 1. La interfaz de búsqueda usa un senciterminal y tecleamos llo método similar al de Google: simplemente introducimos una clave de búsbeagled --fg --debug queda, seleccionamos un categoría de documento en la parte derecha de la El parámetro --fg le indica a beagled que ventana y pulsamos Search. Best pasa la se ejecute en primer plano, y con --debug petición al demonio Beagle, el cual busca podremos obsevar el log. Si preferimos en el índice los documentos coincidentes tener un demonio menos parlanchín ejey los devuelve a Best. Pulsando sobre cutándose en segundo plano, simplecualquiera de los documentos obtenidos mente teclearemos beagled. como resultado ejecutaremos el prograLa salida que se muestra permite ma adecuado para abrirlo. monitorizar el progreso del rastreo. Conclusiones Beagle peinará todas las rutas de nuestro directorio de usuario, ignorando los Si necesitamos llevar la cuenta de nuesenlaces simbólicos. De momento, tendrítros documentos, o si acabamos siempre amos que modificar el código fuente haciendo malabarismos para encontrar para añadir más rutas. algún archivo, puede que merezca la Como regla general, Beagle añade todo pena echar un rato para probar Beagle. documento existente al índice. Para eviUna vez nos acostumbremos a usar este tar esto, podemos colocar un archivo de programa de búsqueda, no podremos ■ texto .noindex para excluir un directorio vivir sin él. y los subdirectorios que cuelguen de él desde el buscador de Beagle. Un método RECURSOS más preciso es incluir en el archivo [1] Página del proyecto Beagle: http:// .noindex los nombres de los ficheros que www.gnome.org/projects/beagle/ queremos excluir. Beagle admite comodi[2] Motor de búsqueda Apache Lucene: nes como ? o *. .neverindex incluye una http://lucene.apache.org/java/docs/ lista de archivos que Beagle ignorará index.html siempre. [3] “Hot Wired”, un artículo que trata la En función del número de archivos en conexión en caliente bajo Linux: Linux nuestro directorio de usuario, la búsqueMagazine Nº 6, pg. 32. Copia en línea: da puede llevar un buen rato. Si introduhttp://www.linux-magazine.es/issue/ cimos una petición mientras que Beagle 06 está indexando, veremos una respuesta a [4] Gnome Dashboard: http://www.nat. la petición, pero hemos de tener en org/dashboard cuenta que los resultados sólo recogen
WWW.LINUX- MAGAZINE.ES
GIMP • PRÁCTICO
Encajar imágenes sin fisuras con GIMP
PINTOR QUE PINTAS CON AMOR Los diseñadores gráficos encuentran a menudo el problema de convertir una fotografía en una imagen que luego se repetirá para cubrir una
problema práctico: convertir una simple fotografía en una imagen adecuada para embaldosar una superficie.
superficie mayor. Esta tarea no es tan sencilla como parece, pero si
De Foto a Tesela
estamos preparados para el reto, este tutorial nos ofrece una introducción de primera mano a herramientas avanzadas de la magnifica herramienta The Gimp. POR GAURAV NAWANI
L
a mayoría de los artículos en revistas dedicados a GIMP (GNU Image Manipulation Program) empiezan en lo básico y no consiguen
llegar mucho más lejos. En este artículo, pasaremos por alto los primeros pasos y mostraremos directamente cómo los expertos usan GIMP para solucionar un
WWW.LINUX- MAGAZINE.ES
Una de los defectos más comunes en las fotografías es la presencia de zonas con brillo poco parejo. En la Figura 1, por ejemplo, la parte derecha de la imagen tiene más brillo, mientras que la parte izquierda es más oscura. Si usamos la imagen de la Figura 1 para cubrir una superficie, pronto apreciaremos saltos indeseados debidos al brillo desigual. Para comprobar este problema hemos cambiado el offset de la imagen. Los bordes anteriores (izquierdo y derecho) están ahora pegados en el
Número 11
33
PRÁCTICO • GIMP
que solucionar la diferencia de brillo y los parches que surjan durante el “remiendo”
Brillo
Figura 1: Imagen de la superficie de una madera.
Para poder simplificar todo este proceso, en primer lugar tendremos que verificar si la imagen está libre de defectos de brillo. Si reducimos estos defectos a límites controlables, disminuiremos el trabajo manual posterior, ya que es más fácil crear un bloque libre de costuras desde una imagen ecualizada. Para ecualizar los puntos de luz, usaremos la técnica de filtro paso alto en la imagen. (Véase el cuadro titulado “Filtro Paso Alto”). Desafortunadamente, GIMP carece de un filtro integrado o plug-in externo para el filtrado paso alto. Sin embargo, puede conseguirse el mismo efecto de una manera manual y relativamente sencilla con unos simples pasos.
Proceso Filtro Paso Alto Figura 2: Al desplazar la imagen haciendo wrapping observamos una notable diferencia de brillo en los extremos de la imagen original.
centro de la imagen (Figura 2). La diferencia de brillo es claramente visible. Si usáramos esta imagen directamente como textura, se producirían discontinuidades que llamarían la atención al observador. Aunque podemos sentirnos tentados de ponernos a solucionarlo directamente en las “costuras”, esto no es buena idea. A pesar de que modifiquemos la imagen, todavía tendremos
Filtro Paso Alto La idea que subyace tras nuestro improvisado filtro “paso alto” es sencilla. La imagen contiene información que puede utilizarse para extraer tanto la información de zonas de alto brillo (claras) como de las zonas de bajo brillo (oscuras). Usando esta información podemos reducir la diferencia entre los dos extremos, aplicando la información de la zona con alto brillo, invertida, sobre la imagen original. Con esto conseguiremos que se cancelen en buena medida las zonas sobreiluminadas, y la imagen resultante tendrá una reducción en las zonas previamente brillantes así como una incremento en las zonas oscuras. Este proceso se denomina ecualización del brillo.
34
Número 11
Abrimos la imagen que queremos convertir en textura. Duplicamos la capa base pulsando Layer | Duplicate Layer. Seleccionamos la nueva capa duplicada en el cuadro Layer y pulsamos a continuación Filters | Blur | Gaussian Blur. Ahora podemos copiar los valores mostrados en la Figura 3, o bien, en función del tamaño de la imagen y de los puntos de luz, modificar el radio de desenfoque de manera que los bordes de los puntos de luz se suavicen. Nótese que este desenfoque no provocará una pérdida de definición en la imagen final. Ahora invertimos el color de la capa duplicada. En pocas palabras, invertir el color de la capa es algo parecido a sacar el negativo de la imagen. Para hacer esto, pulsamos en Layers | Color | Invert. Como podemos comprobar (Figura 4), al invertir el color también invertimos los puntos de luz de la imagen. Usaremos esa información para ecualizarlos en la imagen original. Hemos de advertir que la capa invertida aún mantiene la información del color. No vamos a necesitar la información del color en la capa, por lo que ejecutamos Desaturate. Para ello pulsamos sobre Layers | Color | Desaturate. Tras esto, la imagen resultante se encuentra en tonos blancos y negros, o bien es una imagen en escala de grises (Figura 5). Esta escala de colores es suficiente para mantener la información del brillo que
WWW.LINUX- MAGAZINE.ES
Figura 3: Aplicamos el filtro de suavizado gausiano.
necesitamos. La eliminación del color es igualmente necesaria para asegurarnos que no tenemos ningún color sangrando en el momento de usar la capa en el siguiente paso. Nótese que estos pasos no tienen por qué ser realizados secuencialmente. El paso final en el proceso filtro paso alto es cambiar el modo de capas a Overlay. (Véase el cuadro titulado “Capas y Modos de Capas”). Puede que aquí tengamos que ajustar la opacidad de la capa cubierta si la imagen
Capas y Modos de Capa Casi todas las aplicaciones gráficas nos permiten trabajar sobre las imágenes con múltiples capas, y GIMP no es una excepción. Una capa es como una lamina de papel en una pila. Las láminas pueden ser transparentes, opacas o incluso semitransparentes. Podemos controlar esta configuración a nuestro antojo. El cuadro de control Layer en GIMP nos muestra una vista previa de las capas existentes en la imagen. El modo de capa es otra característica de las capas de GIMP que nos permiten cambiar el modo en el cual la capa actual afecta a la que tiene bajo ella. Pongamos por caso que cambiamos el modo de la capa superior a Divide. Esto le indica a GIMP que divida los valores de color para cada píxel de la capa actual entre los valores de los píxeles de la capa de abajo. Los diferentes modos de capa producen interesantes resultados. Existen en torno a 23 modos diferentes de capa disponibles para GIMP. Remitimos al lector a la documentación de GIMP donde hallará mas información al respecto.
GIMP • PRÁCTICO
Figura 4: La imagen tras aplicar la inversión.
Figura 5: La imagen tras aplicar la desaturación.
resultante está demasiado desvanecida. Ya hemos aplicado el filtro paso alto sobre la imagen con efectividad. Al comparar la imagen filtrada (Figura 6) con la original (Figura 2), se aprecia claramente la diferencia que es capaz de efectuar el filtro paso alto sobre los saltos de brillo. La idea es usar el filtro paso alto para librarse de los extremos en el brillo de manera que la textura tenga un nivel de brillo nivelado. Si no estamos satisfechos con las diferencias de brillo, podemos repetir el proceso de filtro paso alto. Pero debemos advertir que repetir el proceso
XFC: el Formato de Imagen de GIMP Si queremos guardar las capas de la imagen, sólo podremos hacerlo si guardamos la imagen en formato nativo de GIMP. Este formato nativo (con la extensión XFC) también guarda gran cantidad de información, como capas de texto, rutas, modos de capa y mucho más. Bajo GNU/Linux podemos utilizar la extensión .xcf con .gz, como por ejemplo nombrefichero.xfc.gz. Esto comprime automáticamente la imagen con una compresión estándar gzip. De igual manera, podemos usar la extensión .bz2.
un número excesivo de veces dará lugar a la pérdida de mucha información útil. La textura de ejemplo tras aplicarle el filtro paso alto parece un poco desprovista de color. Esta reducción de color es un efecto secundario del filtro paso alto, aunque en Figura 6: a)La textura tras aplicar el filtro paso alto. b)El cuaeste caso, la reducción de dro de capas. color ha sido mínima. Pero este efecto puede ser más problemático o evidente en imágenes más coloridas. Podemos probar el filtro paso alto en una imagen muy colorida para ver el efecto. Aunque esto suena mal, no es difícil rescatar la mayor parte de la información Figura 7: a)La textura tras el incremento de color. b)El cuadro del color hasta un nivel de curva de color. satisfactorio. Guardamos una copia de la imagen en toma las cuatro esquinas (se pasó a el formato nativo de GIMP antes de protamaño un cuarto) de la capa, las dupliceder. Para restaurar el color, en primer ca, les aplica un offset y finalmente las lugar tenemos que aplanar la imagen funde con la textura original aplicando (Flattening). Es decir, tenemos que funalgo de suavizado y transparencia. La dir todas las capas presentes en la imaFigura 8 muestra el efecto del plugin gen en una sola capa. Para ello pulsamos “anticostura” de GIMP en la imagen de sobre Image | Flatten Image. ejemplo. Aunque se puede revestir una Ahora duplicamos la capa resultante superficie con esta imagen, se aprecia seleccionando Layer | Duplicate Layer. que el plugin ha destruido la característiLuego pulsamos Layers | Color | Curve. ca natural de encaje de los tablones, y la Podemos jugar un poco con los niveles madera tiene una apariencia artificial. de color en la cuadro emergente Color Esto no es suficiente para un trabajo proCurves (véase Figura 7). Normalmente fesional. con tres puntos a lo largo de la curva Tráfico de Herramientas conseguiremos nuestro objetivo. Véase la imagen como referencia. Sólo tenemos Una vez que hemos aplicado el filtro que hacer clic para situar un punto, y paso alto, vamos a ver cómo crear una arrastrarlo para ajustar su posición. textura sin saltos de manera manual. La herramienta de GIMP para embalGIMP tiene diferentes herramienta que dosar es muy sencilla. Básicamente,
Consejo GIMP proporciona opciones extra con cada herramienta disponible en su cuadro de herramientas. Podemos acceder a ellas desde el cuadro Tool Options justo debajo del cuadro de herramientas. Podemos verificar el cuadro Tool Options para estas características especiales. La figura 10b muestra las opciones para la herramienta de clonado.
WWW.LINUX- MAGAZINE.ES
Figura 8: Imagen tras aplicar el plugin anticosturas de GIMP.
Número 11
35
PRÁCTICO • GIMP
pueden ayudarnos a crear una textura Esta herramienta usa la forma de pincel tamaño adecuados. Para esta textura, uniforme. Las siguientes herramientas seleccionada para tomar una región a clonecesitamos pinceles más naturales, más son particularmente importantes: nar. Lo primero será seleccionar la herradesaliñados. Existen muchos pinceles • Offset de capas (Layers | Transmienta desde Tools | Paint Tool | Clone o disponibles para GIMP. Si estamos inteform | Offset). bien pulsando [C]. Al seleccionarla, el curresados en indagar en estas opciones, • La herramienta de clonado. sor toma la forma de un sello. podemos incluso hacer una búsqueda en • La herramienta de emborroAhora situamos el cursor encima de la Google. nado. región que queremos clonar, y manteEste proceso de estampación con clo• La herramienta de connes debe repetirse con diferentes volución. pinceles, formas y tamaños, y los Después de usar el filtro paso alto clones han de tomarse de difecon la imagen y quedar satisferentes regiones de la capa, de chos de la ecualización del brillo manera que la textura no pierda en la imagen, estamos listos para su complejidad. Debemos asegutrabajar en la textura para que al rarnos de no usar clones con revestir una superficie parezca diferente brillo, o llamará la atenuniforme. El primer paso es usar ción al cubrir la superficie. la herramienta Offset de GIMP. Herramienta de Esta herramienta nos permite desEmborronado plazar la capa una distancia espeFigura 9: a)Las costuras en los bordes son evidentes. b)El cífica en la dirección X y/o en la cuadro de offset de la capa. La capa empieza ahora a tener dirección Y. La característica buena pinta como textura para Wrap around permite que las embaldosar, pero aún persisten regiones de la capa reaparezcan algunas pequeñas motas. por la dirección opuesta si desplaPodemos apreciarlas mejor si zamos la capa una distancia hacemos un zoom en la imagen. mayor que su anchura o altura. En la Figura 11a, hemos ampliaAntes de empezar, guardamos do la imagen por 550 y hemos una copia del archivo, y nos aseelegido una zona donde se apreguramos de que hemos fundido cia claramente una costura defortodas las capas de la imagen en mada en la frontera entre las dos una sola. Ahora, pulsamos Layer placas de madera. La imagen | Transform | Offset. En el cuadro tiene variaciones de textura horiFigura 10: a)La imagen que estamos usando tras unos cuanOffset Layer que aparece (véase zontales, por lo que eliminaretos pasos. b)Opciones de la herramienta de clonado. Figura 9), pulsamos en el botón mos la imperfección usando la denominado Offset by X/2.Y/2 herramienta de emborronado en (siendo X e Y el ancho y la altura la dirección horizontal. de la imagen). Nos aseguramos La herramienta de emborronade que Wrap around está selecdo se usa como modificador del cionado. La opción Wrap around pincel. Funciona moviendo o nos sitúa los cuatro bordes en el estirando los píxeles que estén en centro de la capa. Podemos ese momento en el pincel, en la ahora ver claramente los probledirección del trazo. Funciona de mas con las costuras de la textumanera similar a la mezcla que ra, que tendremos que eliminar hacen los pintores en el lienzo, si queremos crear una imagen mezclando los pigmentos con el Figura 11: a)Zona que vamos a modificar. b)Después de unos que nos sirva para recubrir una pincel. cuantos trazos de la herramienta de emorronado. superficie (véase Figura 9). Hemos elegido el pincel niendo la tecla [Ctrl] presionada, pulsaCírculo (03) para este propósito. Herramienta de Clonado mos con el botón izquierdo para selecSeleccionamos la herramienta emborrocionar el clon. Situamos el pincel pulsannado a través del menú Tools | Paint El siguiente paso es buscar zonas en la do con el botón izquierdo. Hemos selectools | Smudge. Situamos a continuación capa que tengan un color similar y puecionado y estampado algunos clones el pincel delante de la mota en la parte dan usarse para copiar y pegar sobre los (véase Figura 10a) haciendo uso de uno oscura y lo arrastramos horizontalmente bordes de manera que desaparezcan los de los pinceles extra de GIMP (véase el de manera que la línea negra parezca bordes y costuras sin llenar la capa de cuadro de enlaces). No hemos usado los continua. Pulsamos [Ctrl+Z] para desparches raros. pinceles normales, dado que todos ellos hacer si fuera necesario. Aquí hemos La herramienta Clone nos permite clonar tienen los bordes afilados o bien suavizavuelto a emborronar sobre la parte o copiar zonas de la imagen y situarlas en dos, y puede que no tengan la forma y marrón de la imperfección para conseotra zona de la imagen usando el pincel.
36
Número 11
WWW.LINUX- MAGAZINE.ES
GIMP • PRÁCTICO
mos con el pincel. De esta manera podemos limpiar pequeñas zonas borrosas generadas con la herramienta de emborronado. Podemos dejar pulsado el botón [Ctrl] para conmutar entre suavizado y perfilado. El suavizado de conFigura 12: a)La zona suavizada de la imagen. b)Opciones volución es diferente del extra de la herramienta de convolución equivalente emborronado, ya que la opción de convoguir lo mostrado en la figura 11b. lución sólo aplica el suavizado a la zona Repetimos el proceso allí donde considebajo el pincel sin mover los píxeles a lo remos arreglar las imperfecciones de la largo del trazo. imagen.
Figura 13: La textura final.
Trucos y Consejos
Herramienta Convolución Mirando la Figura 12a nos daremos cuenta de que la herramienta de emborronado ha provocado que la parte marcada dentro del cuadro blanco parezca un poco borrosa. Podemos arreglar este tipo de problemas en la imagen con una herramienta de GIMP denominada herramienta de convolución (véase Figura 12b). La herramienta de convolución proporciona la funcionalidad de suavizado/perfilado al pincel elegido. Podemos elegir entre suavizado y perfilado al trabajar sobre la imagen. Para usar esta herramienta, seleccionamos Convolve tool en Tools | Paint Tools | Convolve, o pulsamos [V]. Ahora, en el cuadro Tool Options, seleccionamos el tipo de convolución como sharpen (Figura 12b), y dejamos los demás valores por defecto. Ahora, si movemos el pincel sobre la imagen, GIMP perfilará la zona que marque-
Plugin anticostura Debemos recordar que GIMP también tiene una herramienta propia para generar imágenes repetibles. Puede encontrarse en Filters | Map | Make seamless. Una advertencia: aunque esta herramienta puede convertir una imagen o capa en repetible, está lejos de poder usarse para trabajos serios. La herramienta de GIMP puede destruir la textura natural de la imagen, y por tanto, no podemos considerarla demasiado efectiva. Sin embargo, puede funcionar con texturas simples con variaciones moderadas. Como podríamos esperar, funciona mejor con imágenes ecualizadas en brillo.
Debemos trabajar con la herramienta de clonado, la de emborronado y la de convolución todo lo necesario para hacer desaparecer los bordes e imperfecciones. Este proceso dará como resultado una textura lista para cubrir una superficie. Ahora que conocemos los pasos, comentamos a continuación algunos consejos para mejorar nuestro control del proceso. • No debemos limitarnos a clonar un solo pincel. Es mejor seleccionar múltiples clones de diferentes pinceles y de diferentes regiones de la imagen, siempre asegurándonos de que el color de la región coincide con la zona a cubrir con el pincel clonado. • El pincel debe elegirse cuidadosamente, ya que algunos pinceles suavizan ligeramente y el pincel clonado también se suavizará consecuentemente. Por lo tanto, cuando tengamos una textura con pequeños detalles, como la imagen ejemplo de este artículo, debemos elegir el pincel con los bordes perfilados. • El uso de la herramienta de emborronado puede ser difícil al principio, por lo que se recomienda aplicar trazos cortos y con pequeños pinceles. Debemos mantener un mismo patrón al aplicar los trazos. En nuestro ejemplo, hemos efectuado trazos horizontales siguiendo las marcas de la madera. Podemos también usar la herramienta de emborronado
WWW.LINUX- MAGAZINE.ES
•
para cubrir pequeños parches con diferente contraste, realizando trazos gradualmente desde las zonas oscura y clara de la zona en cuestión. En ocasiones no podremos disimular todo el suavizado causado por la herramienta de convolución, por lo que deberemos recurrir a incrementar el nivel de perfilado en el cuadro Tool Options.
Toques Finales Después de haber eliminado los bordes de la imagen, de nuevo hacemos un offset -X/2 e -Y/2 para reestablecer la posición original de la imagen. Pulsamos en Filters | Map | Tile, multiplicamos por dos el valor del ancho y presionamos el botón OK. Esto creará una nueva ventana de imagen donde veremos la imagen multiplicada en ambas direcciones. De esta manera podemos ver el resultado final cuando cubramos una superficie con la imagen. Si al verlo no estamos convencidos, podemos seguir usando las herramientas comentadas sobre la imagen hasta llegar a la textura deseada. Por último, puede que necesitemos incrementar la nitidez de la imagen. Para ello podemos pulsar sobre Filter | Enhance | Sharpen. No debemos elegir el valor máximo de nitidez para la imagen. En lugar de eso, es mejor elegir un valor menor y repetir el proceso las veces que ■ sea necesario.
RECURSOS [1] The GIMP: http:// www.gimp.org/ [2] Plugins y scripts: http://www.registry. gimp.org [3] Manual de GIMP: http://docs.gimp.org [4] Texturas: http://www.mayang.com
Número 11
37
PRÁCTICO • Gentoo Linux
Instalación y administración de Gentoo Linux
EN LA COCINA CON GENTOO Gentoo es una potente y flexible distribución de Linux que podemos configurar para que se ajuste perfectamente a nuestro entorno. En este artículo describiremos cómo configurar Gentoo. Veremos también cómo instalar y administrar software en nuestro sistema Gentoo con la popular herramienta de administración Portage. POR ALEXANDER REITERER
P
ara algunos usuarios, el poderoso Gentoo es el sistema Linux ideal. Pero para muchos otros representa una distribución inaccesible, sólo para expertos. Independientemente de si la encontramos un poco desalentadora al principio, una vez nos hagamos con ella descubriremos que Gentoo proporciona muchas herramientas útiles que lo hacen tan fácil como cualquier otro sistema Linux.
La Instalación en 12 Pasos Muchos usuarios consideran a Gentoo Linux como sinónimo de “difícil de instalar”, “un sistema para geeks” o “nada amistoso para novatos”. Es complicado negar que hay algo de cierto en estos prejuicios, pero incluso si somos novatos en Linux, merece la pena investigar esta joven distribución. En este artículo, trataremos de perderle el miedo a Gentoo [1]. Comenzamos con las nociones básicas de Gentoo centrándonos en la instalación, que es completamente diferente a cualquier otra distribución que conozcamos. Luego exploraremos el modo de administrar el software de nuestro sistema Gentoo.
Peculiaridades Gentoo A pesar de que podemos instalar Gentoo desde paquetes precompilados, lo más
38
Número 11
habitual es compilar directamente desde el código fuente. Esto nos ofrece la ventaja de adaptar el sistema perfectamente a nuestras necesidades. Además de ser la razón por la cual muchas veces se llama a Gentoo la meta-distribución. Tanto la configuración del sistema como la instalación de programas nuevos, normalmente, es muy diferente al resto de las distribuciones. Antes de centrarnos en la instalación, comentar algunas ventajas y desventajas de Gentoo. Una de las ventajas es muy evidente: como usuarios, mantenemos el control total del sistema. Recordemos que en los inicios de Linux los usuarios estaban más o menos forzados a investigar sus propios sistemas, editando archivos de configuración y buscando en foros respuesta a los problemas que encontraban. Hoy día, los asistentes de instalación basados en interfaz gráfica y las herramientas de administración centralizada (como Yast de Suse Linux, por ejemplo) han tomado el control en la instalación, configuración y administración de los sistemas Linux. Pero, al mismo tiempo, estas herramientas ocultan los procesos subyacentes. Gentoo aporta algo de luz entre las tinieblas. Por supuesto, esta flexibilidad tiene un precio. Si estamos decididos a abordar Gentoo, tendremos que prepararnos
WWW.LINUX- MAGAZINE.ES
para leer extensos manuales y perderle el miedo a abrir nuestro editor de texto para modificar archivos de configuración. En el día a día, estas aparentes desventajas frecuentemente se tornan menos molestas de lo que podamos pensar.
Etapas para la Instalación La instalación de Gentoo Linux comienza descargando una imagen Live CD. Hay dos soportes para la instalación disponibles en la versión actual (la 2005.0 en el momento de escribir este artículo): una imagen mínima y una imagen universal. No deberíamos usar la instalación universal si queremos evitarnos compilar el sistema desde cero. El proceso de instalación en sí mismo se divide en tres etapas. Desde qué etapa necesitamos comenzar dependerá de qué proporción de todo el sistema vamos a compilar partiendo de cero, y qué componentes precompilados usaremos. La etapa 1 nos proporciona todo el espectro de opciones de optimización. Como desventaja, que la instalación llevará bastante tiempo en completarse. Una instalación desde etapa 2 nos proporciona menos opciones de optimización, pero el proceso completo es mucho más rápido. Desde etapa 3 es el método más rápido para instalar Gentoo: sólo tenemos que aceptar las opciones por
Gentoo Linux • PRÁCTICO
trabaja en una red con servidor DHCP, Gentoo configurará por regla general la red correctamente. Tecleamos ping -c 3 www.google.com para verificar si tenemos conexión a Internet. Si no es así, tendremos que ejecutar net-setup (añadiendo el nombre de nuestra interfaz de red) o adsl-setup (para Figura 1: Arranque de nuestro sistema Gentoo Linux. conexiones ADSL) para configurar defecto para optimizar el sistema base. nuestro entorno de red. Podemos instalar Además, este método cumple los requisiGentoo sobre una WLAN si es necesario. tos para usar paquetes precompilados. Para ello, podemos consultar la docuEn las siguientes secciones, se supondrá mentación en línea [2]. que usamos la imagen mínima para los Preparación del Disco Duro pasos de instalación restantes y que El siguiente paso a realizar es configuhemos optado por una instalación desde rar las particiones del disco duro para etapa 1. Gentoo. Supondremos que nuestro Únicamente necesitamos el Live CD disco duro es /dev/hda. Tecleamos para arrancar el sistema, detectar el fdisk/dev/hda para iniciar la herrahardware, y configurar una conexión de mienta de particionado. Podemos prered. Para tener una mejor perspectiva del sionar la tecla p para mostrar la tabla proceso, hemos dividido la instalación de particiones actual o d para eliminar en 12 pasos. todas las particiones del disco. Comienza la Instalación Creamos una partición de arranque pulsando n, y luego p. Le asignamos a esta Descargamos la imagen mínima desde partición el número 1 y fijamos el [1], quemamos un CD con la imagen tamaño (por ejemplo, 32M para 32 (podemos usar k3b para esto) y arrancaMB). Lo siguiente será crear una partimos el sistema desde el CD. ción de swap. Para ello, tecleamos lo Configuración de Red siguiente en este orden (pulsamos Enter después de cada entrada): n, 2, Después de arrancar (véase Figura 1), +512M, t, 2, 82. Ahora configuramos deberíamos ver una línea de comandos. una partición raíz pulsando p y 3. Estamos automáticamente logeados Cuando se nos pregunte por el tamaño como root y podemos empezar a fijar la de la partición, pulsamos Enter para configuración de red. Si nuestro equipo
Tabla 1: Principales Comandos Portage Comando emerge -sync emerge nombre_programa emerge --pretend nombre_programa emerge --fetchonly nombre_programa
emerge unmerge nombre_programa emerge --update world emerge --update --deep world emerge --usepkg --getbinpkg nombre_programa
Función Actualiza la rama Portage. Instala un programa Verifica dependencias Descarga el código fuente del programa Desinstala un programa Actualiza el sistema completo Actualiza el sistema y todas las dependencias Instala un programa precompilado
WWW.LINUX- MAGAZINE.ES
aceptar la configuración por defecto (así usaremos el espacio restante del disco duro para esta partición raíz). Una vez hayamos acabado, pulsamos [W] para guardar la tabla de particiones.
Formateo Ahora formateamos las recién creadas particiones con el sistema de archivos que deseemos, por ejemplo, tecleamos el comando mke2fs /dev/hda1 (partición de arranque usando ext2) o el comando mke2fs -j /dev/hda3 (partición raíz usando ext3). Por último, creamos y habilitamos una partición swap tecleando mkswap /dev/hda2 y swapon /dev/hda2. Con mount /dev/hda3 /mnt/gentoo, mount /dev/hda3 /mnt/gentoo y mount /dev/hda1 /mnt/gentoo/boot montamos las particiones que acabamos de crear en nuestro árbol de directorios.
Descargamos los Archivos Con cd /mnt/gentoo nos movemos del directorio por defecto al punto de montaje, y tecleamos links2 http://www.gentoo.org para seleccionar un servidor de descarga. Hay una lista de mirrors en la barra de navegación, en la parte izquierda bajo Resources: | Download Mirrors. En el servidor elegido, nos situamos en el directorio releases/x86/2005.0/stages/x86, seleccionamos el archivo Stage 1 y presionamos [D] para descargarlo. Luego nos vamos al directorio snapshots y descargamos el archivo Portage más reciente (en el momento de escribir estas líneas es el portage-20050331.tar.bz2.
Stage 1 y Portage Descomprimimos el archivo Stage tecleando tar -xvjpf stage?-*.tar.bz2. La opción -p es de suma importancia aquí, ya que indica a tar que mantenga los permisos del archivo al descomprimirlos. Una vez haya terminado, extraemos la rama Portage en el directorio adecuado tecleando tar -xvjpf portage-20041022.tar.bz2 -C /mnt/gentoo/usr.
Opciones del Compilador Como hemos mencionado anteriormente, Gentoo tiene un gran variedad de opciones para la optimización del sistema. Sólo vamos a ver de pasada lo más importante, por lo que podemos acudir a [2] si necesitamos una información en
Número 11
39
PRÁCTICO • Gentoo Linux
línea más detallada. Para realizar los cambios, tecleamos en primer lugar nano -w /mnt/gentoo/etc/make.conf para abrir el archivo make.conf. Sin entrar en detalles diremos que este archivo contiene todas las opciones de optimización del sistema. La variable CHOST especifica el tipo de procesador, i686-pc-linux-gnu por ejemplo, o x86_64-pc-linux-gnu (si tenemos un AMD64). Las variables CFLAGS y CXXFLAGS definen las optimizaciones para los compiladores de C y C++. Las siguientes configuraciones deben funcionar en los procesadores AMD AthlonXP: CFLAGS="-march=athlon-xp U -pipe -O2" CXXFLAGS="${CFLAGS}"
Podemos también usar MAKEOPTS para especificar cuántos procesadores tiene nuestro equipo. Si es un único procesador, tecleamos MAKEOPTS="-j2".
Instalar el Sistema Básico Antes de compilar el sistema básico, necesitamos seleccionar un servidor desde el que descargaremos los paquetes Gentoo necesarios. Las siguientes órdenes nos ayudan a hacer esto automáticamente: mirrorselect -a -s4 -o | grep U 'GENTOO_MIRRORS=' >> U /mnt/gentoo/etc/make.conf
El sistema necesitará la información del DNS, y tendremos que montar el sistema de archivos proc: cp -L /etc/resolv.conf U /mnt/gentoo/etc/resolv.conf mount -t proc none U /mnt/gentoo/proc
Podemos ahora entrar en el entorno y actualizar la rama de Portage. Usamos las siguientes órdenes para ello: chroot /mnt/gentoo /bin/bash env-update source /etc/profile emerge -sync
Una vez hayamos terminado, continuamos realizando más cambios utilizando la variable USE, que contiene algunas opciones generales de compilación. Para
40
Número 11
para registrar las particiones. Y luego tendremos que configurar las conexiones de red. Como ninguno de estos dos puntos presenta particularidades específicas de Gentoo, probablemente ya sepamos cómo hacer esto. En caso contrario podemos acudir al how-to en [4], por ejemplo.
Instalar el Bootloader Figura 2: Resultado de la función de búsqueda de emerge.
ello, abrimos make.conf de nuevo. La variable USE para un sistema KDE debe tener esta pinta. USE="-gtk -gnome qt U kde dvd alsa cdr"
Y continuamos con las siguientes órdenes para compilar el sistema básico Gentoo: cd /usr/portage scripts/bootstrap.sh emerge system
Configuración del Kernel Para compilar el kernel, en primer lugar tenemos que descargar las fuentes del kernel actualizadas: tecleamos emerge gentoo-sources para ello. Además de esta variante, existen algunas otras fuentes del kernel, como gentoo-dev-sources o vanilla-sources. Tecleamos ahora /usr/src/kernelsource y make menuconfig para la configuración. En lugar de “kernelsource” en los siguientes comandos, especificamos el nombre de la fuente del kernel que estamos usando. Podemos entonces compilar e instalar el kernel: make && make modules_install cp arch/i386/boot/bzImage U /boot/kernelsource cp System.map U /boot/System.map-kernelsource
Configurar el Sistema Antes de usar nuestro sistema, aún tenemos que completar dos importantes pasos en la configuración. En primer lugar tendremos que modificar /etc/fstab
WWW.LINUX- MAGAZINE.ES
El bootloader se asegura de cargar el kernel al arrancar nuestro sistema. En este ejemplo, usaremos el bootloader Grub [5]. Tecleamos emerge grub para compilar el bootloader antes de seguir configurando e instalando: nano -w /boot/grub/grub.conf cp /proc/mounts /etc/mtab grub-install U --root-directory=/boot /dev/hda
Reinicio del Sistema Esto completa los pasos necesarios para iniciar el sistema por primera vez. Tecleamos los siguientes comandos para arrancarlo: exit cd umount /mnt/gentoo/boot ßß /mnt/gentoo/proc /mnt/gentoo reboot Nuestro sistema debería arrancar limpiamente, y deberíamos poder entrar como root. Con esto hemos completado la instalación de nuestro sistema básico Gentoo.
Administración del Sistema Una vez hayamos instalado Gentoo, podemos hacer uso del software de mantenimiento Portage para instalar paquetes adicionales (como KDE, OpenOffice.org, etc…). La herramienta Portage es el centro de control de todas las tareas de administración en Gentoo Linux. Portage tiene un increíble número de opciones y es considerado por muchos (no sin razón) como la mejor herramienta de administración para Linux. Cuando nos referimos a programas que están disponibles para Gentoo, nos referimos a programas que están disponibles en la rama Portage. En lenguaje Gentoo estos programas son también conocidos como ebuilds. Un ebuild contiene toda la información que necesita Portage para manipular el programa en cuestión (rama, versión, etc.). Los ebuilds se almacenan en /usr/portage en nuestro sistema, y podemos esperar que
Gentoo Linux • PRÁCTICO
Figura 3: Búsqueda de programas a través de la interfaz web de la página del proyecto Gentoo.
cambie el contenido continuamente a medida que las nuevas versiones van apareciendo. Antes de empezar a trabajar con Portage, siempre deberíamos actualizar la rama de Portage. Hacemos esto con: emerge --sync. Tras completar la descarga, podemos instalar cualquier programa tecleando emerge nombre_programa (por ejemplo emerge kde). Para desinstalarlo, tecleamos emerge unmerge nombre_programa. Para buscar en la rama Portage un paquete específico, tecleamos emerge search nombre_programa. Obtenemos una lista de las últimas versiones de los programas disponibles para nuestra rama Portage y detalles de las versiones instaladas en nuestro sistema en ese momento (véase Figura 2). Como alternativa, podríamos usar la interfaz web de la página de Gentoo (véase Figura 3) para buscar programas. Esto nos permite conocer las etapas de desarrollo de un proyecto: desde masked (versión en desarrollo), pasando por testing hasta stable. Encontraremos también útiles enlaces para los programas en cuestión (página del proyecto, licencia, etc.).
Administración con Portage Como se mencionó anteriormente, Gentoo normalmente no usa paquetes precompilados, sino los llamados ebuilds, los cuales poseen toda la información necesaria para administrar el programa en cuestión (rama, versión, etc.). Para no complicar la cosa, decir que la rama Portage es la suma de todos
los ebuilds disponibles para Gentoo. La herramienta de administración Portage es extremadamente flexible y ofrece al administrador un increíble rango de opciones. Antes de usarlo debemos saber que todo lo que hagamos se basará en la rama de Portage almacenada en nuestro sistema, por lo que debemos asegurarnos de actualizar nuestros ebuilds con regularidad (o al menos antes de instalar un programa nuevo). El comando emerge -sync actualiza nuestros ebuilds. emerge nombre_programa instala un programa. Para saber qué programas instalará Portage para resolver las dependencias, tecleamos: emerge --pretend U program_name
La Figura 4 muestra la pinta que tiene el resultado de ejecutar este comando. El programa lista detalles de los paquetes que se instalarían (entre corchetes). A continuación listamos una ayuda para entender las abreviaturas: *B (Bloqueo): El paquete de la izquierda bloquea la instalación del paquete de la derecha. *N (Nuevo): emerge reinstalará el paquete. *R (Reemerge): El paquete no es nuevo, pero ha de ser reinstalado. *F (Fetch): Tenemos que descargar manualmente el código fuente de este paquete. *U (Update): El paquete ya está en nuestro sistema, sin embargo existe una actualización disponible.
WWW.LINUX- MAGAZINE.ES
*UD (Downgrade): El paquete ya está en nuestro sistema, sin embargo emerge necesita instalar una versión más antigua. *U- (slot warning): El paquete no funcionará con una actualización de nuestro sistema. emerge se encargará de la instalación y desinstalará la versión antigua en el proceso. Cuando le indicamos a Portage que configure un programa, la herramienta descarga cualquier fuente necesaria de Internet justo antes de pasar a compilar e instalar el paquete. Si no disponemos de una conexión permanente a Internet o no es tarifa plana, puede que queramos descargar primero los paquetes y posponer la compilación y la instalación. La siguiente orden le indica a emerge que descargue sin instalar: emerge --fetchonlyU nombre_programa
Podemos entonces iniciar la compilación e instalación cuando queramos tecleando emerge nombre_programa. En ocasiones puede que necesitemos actualizar todo el sistema, en lugar de un único programa. El siguiente comando se encarga de la tarea de actualizar nuestro sistema Gentoo: emerge --update world
Este comando actualiza todos los programas instalados en nuestro sistema, pero sin actualizar las dependencias. Para actualizar las dependencias también, tecleamos la siguiente orden: emerge --update --deep world
Portage tiene también la capacidad de eliminar los paquetes huérfanos. El siguiente comando se encarga de ello: emerge --update --deep U --newuse world emerge depclean revdep-rebuild
Necesitaremos instalar el Gentoolkit para ejecutar el comando revdep-rebuild. Además de tener la habilidad de instalar los programas directamente desde el código fuente, Gentoo también nos permite instalar paquetes precompilados. Lo podemos hacer con la siguiente orden:
Número 11
41
PRÁCTICO • Gentoo Linux
emerge --usepkg U --getbinpkg nombre_programa
Podemos desinstalar un programa con emerge unmerge nombre_programa. Nótese que Portage no verificará si el programa en cuestión es requerido por otros programas. Para más información concerniente al uso de emerge, podemos leer las páginas man (tecleando man emerge para ello). La documentación Gentoo en [2] tiene también una descripción detallada de esta herramienta. La Tabla 1 muestra un resumen de los comandos más habituales con Portage.
Opciones de Optimización Al comienzo de este artículo mencionamos que la capacidad de Gentoo para optimizar más o menos cualquier sistema es una de sus puntos fuertes. Gentoo proporciona las llamadas “use flags” para este propósito. El uso de “use flags” puede ser global o local. Como sugiere el nombre, las use flags globales optimizan parámetros de sistema para todos los programas, mientras que las locales optimizan un solo programa. Tenemos una lista de use flags globales en /usr/portage/profiles/use.desc. Gentoo define un valor por defecto para muchas use flags. Los valores por defecto se listan en el archivo /etc/make.profile/make.defaults. Podemos cambiar las configuraciones por defecto añadiendo o eliminado palabras clave de las use flags. Las variables se definen en /etc/make.conf. Para eliminar una variable, simplemente añadimos un guión antes de la variable. Por ejemplo: -gnome. Si estamos definiendo use flags para programas específicos, tendremos que editar el archivo /etc/portage/package.use. Esto implica especificar tanto el paquete del programa, como la use flag que queremos definir, por ejemplo dev-php/php -java. Para declarar una use flag temporal para usarla en una sola operación de emerge, la especificamos antes de la sentencia emerge: USE="-java" emerge php
emerge info muestra las configuraciones actuales de las use flags de nuestro sistema. Se mostrarán detalles de la versión del compilador, versión del kernel, use flags, etc. de nuestro sistema.
42
Número 11
Figura 4: Este ejemplo de ejecución de emerge muestra qué dependencias han de ser resueltas para instalar un paquete.
Tenemos asimismo la opción de mostrar las use flags de un programa específico con la siguiente orden: emerge --pretend U verbose nombre_programa
etcat uses nombre_programa nos muestra un resultado más detallado. Nótese que debemos instalar Gentoolkit para ejecutar este comando.
Mapa de Ruta Gentoo En 2004 vimos la introducción de un nuevo formato para la notación, que comprende el año y la versión (por ejemplo 2004.3, 2005.0, etc.). El proyecto tiene un ciclo de lanzamientos trimestral, pero estos lanzamientos son relevantes únicamente en cuanto a la imagen CD. Una vez tengamos instalado nuestro sistema Gentoo, Portage nos ayudará a mantenerlo actualizado. Es digna de alabanza la rapidez con la que se añaden los nuevos lanzamientos en la rama de Portage. Por ejemplo, normalmente les lleva menos de un mes introducir una release de KDE en la rama estable de Portage. El software nuevo pasa por tres etapas de integración en Gentoo: masked, testing y stable. Un programa se marca como masked al entrar en la rama Portage. Más tarde pasa por la etapa testing hasta que los mantenedores deciden qué puede pasar a stable. Por supuesto, esto no impide que podamos instalar programas de cualquiera de las tres etapas de desarrollo. En estos momentos, los desarrolladores de Gentoo trabajan en un asistente
WWW.LINUX- MAGAZINE.ES
que simplificará el proceso de instalación y lo hará más accesible a los neófitos en Linux. Aunque es desarrollo esperado por muchos, ciertos usuarios notables de Linux recelan de él. La instalación actual fuerza realmente al usuario a adquirir cierto conocimiento del sistema. Tras la instalación, los nuevos usuarios se han familiarizado con muchos de los comandos básicos de Gentoo. Por contra, las interfaces gráficas de Suse o Fedora, por ejemplo, impiden que el usuario adquiera estas importantes enseñanzas. Los usuarios que utilicen este nuevo instalador no tendrán la necesidad de adentrarse en las profundidades del sistema Gentoo para poner sus sistemas en funcionamiento.
Conclusiones Esperamos que este vistazo detrás de las bambalinas de la fascinante distro Gentoo os haya abierto el apetito para afrontar con ganas más y más Gentoo. Hemos de recordar que este ha sido sólo un repaso por encima. Si queremos realmente conocer esta distro en detalle, las técnicas descritas en este artículo nos ayudarán a saber por dónde comenzar en nuestro viaje. A pesar de tener una instalación un poco enrevesada, la popularidad de Gentoo está creciendo como la espuma, y prueba de ello es el creciente número de participantes en los diversos foros de Gentoo. Esperemos que usted también atrape el espíritu Gentoo y se divierta ■ migrando su sistema a esta distro.
RECURSOS [1] Página de Gentoo: http:// www. gentoo. org. [2] Documentación de Gentoo: http:// www.gentoo.org/doc/es [3] Foro Gentoo: http://forums.gentoo. org [4] Linux Installation, Configuration and Use, por Michael Kofler; AddisonWesley, 2004. [5] Grub: http://www.gnu.org/software/ grub [6] Planet Gentoo: http://planet.gentoo. org [7] Linux Installation and Getting Started, por Welsh, Dalheimer, Dawson, y Kaufman; O’ Reilly, 2003.
WineTools • PRÁCTICO
Instalar Software Windows en Linux con WineTools
EL SACACORCHOS WineTools es un programa que ayuda a los usuarios a instalar software de Windows en Linux sin perder tiempo con experimentos. POR JOACHIM VON THADDEN
N
o importa cómo sea de simple el principio de Wine, los detalles a menudo requieren del uso de trucos. Muchos de los parámetros deben ser configurados manualmente para cada programa, y comprobar estos parámetros puede ser difícil y requieren tiempo. El mero experimento de instalar un programa Windows podría implicar horas de búsqueda en Internet, así como un largo intento de pruebas y errores hasta conseguir que el programa se ejecute en Linux. Hace un año me interesé por el proyecto de Frank Hendriksen llamado WineTools y desde entonces he estado trabajando en mejorarlo para proporcionar un instalador para los programas Windows en Linux. Principalmente he estado concentrado en el Office y en aplicaciones gráficas, es decir, Microsoft Office y visores para Office, Internet Explorer, Adobe Photoshop e Illustrator. Desde entonces se han ido añadiendo algunos programas shareware, freeware y de código abierto. Si existen alternativas para Linux, estas alternativas se describen junto con sus análogos para Windows.
Instalación Rápida Hay que descargar WineTools desde [1] y guardarlo en algún lugar apropiado de
la distribución. Existen versiones disponibles en formato RPM y tar.gz, algunas distribuciones empezaron a añadir el paquete en sus repositorios, por ejemplo Debian y hay rumores de un paquete para Gentoo. La versión actual de WineTools es la 2.1.2. El paquete RPM es fácil de instalar. Tras completar la descarga, entrando como root se teclea rpm -ivh Winetools... y se instala el software. Si el paquete RPM se queja diciendo que el paquete gettext no está disponible, hay que instalar dicho paquete desde el CD de la distribución para asegurarse de que el soporte internacional esté disponible. WineTools por defecto está en Inglés si no se dispone de Gettext o gettext.sh. La instalación desde el fichero tar.gz es igual de fácil. Después de descomprimir la herramienta en el directorio correcto tecleando: tar -xpvzf Winetools...
WWW.LINUX- MAGAZINE.ES
hay que ejecutar con privilegios de root install.sh. Este script copia los ficheros a /usr/local/winetools y también crea un enlace en /usr/local/bin, permitiendo de este modo ejecutar WineTools con el comando wt2. Cuando se ejecuta WineTools, es importante que se haga desde las X y que no sea el usuario root, ya que de otro modo el programa no se ejecutará. Si aún no se ha creado un directorio de usuario para guardar los ficheros de Wine, WineTools proporcionará un HOWTO para crearlo. Esto es seguido por un cuadro de diálogo con el copyright y un texto de presentación (véase la Figura 1). Asegúrese de leer la presentación; no sólo proporciona información legal concerniente a las licencias que se necesitan para usar el software instalado, sino que también contiene un número de contacto para el soporte del proyecto y algunos detalles de la versión de Wine usada.
Número 11
43
PRÁCTICO • WineTools
El menú principal de WineTools tiene cuatro secciones para preparar e instalar programas, controlar el entorno de Wine, realizar copias de seguridad de las instalaciones Wine y finalmente, para mostrar la presentación y la información del copyright.
en un ordenador sin una conexión a Internet: primero, se instala el software en un ordenador con conexión a Internet y luego se copian todos los ficheros que se hayan descargado en el directorio ~/winetools/sys a un CD.
Imprimir con CUPS y de la forma tradicional
Instalación Básica con Internet Explorer 6 Nuestro primer ejercicio va a ser configurar un sistema básico sobre el que se instalarán los otros programas. Hay que trabajar con el menú Base set-up. Por supuesto, tan sólo se necesita una versión de Internet Explorer en su propio idioma. La entrada Create a fake Windows drive crea un directorio ~/.wine, borrando un directorio con el mismo nombre en caso de existir. Puede ser que se desee hacer una copia de seguridad de los ficheros importantes que se tengan en ese directorio antes de proceder. Durante el Base setup, WineTools pregunta por la ruta a la unidad de CDROM, por el nombre de usuario y por el nombre de la organización con el objeto de preparar una versión simulada de Windows lo mejor posible. Después de terminar estos pasos preparatorios, se puede empezar con la instalación. Para mejorar la lectura, será necesario instalar la fuente Arial. Esta fuente es seguida por la instalación de DCOM98, que hace que Wine obtenga la funcionalidad OLE requerida. Aunque DCOM está implementado por las bibliotecas de Wine, esta implementación es incompatible y experimental. Algunos programas no la soportan y no cooperarán en la fase de instalación. Esta es la razón por la que WineTools utiliza la versión original de Microsoft. Usar el DCOM original tiene una desventaja. Microsoft tan sólo permite el uso de DCOM en combinación con Microsoft Windows 98 o posterior. Así que hay que asegurarse de que se tiene un Win 98 o posterior en nuestra carpeta de CDs.
La Licencia de Windows Suponiendo que se aceptan las condiciones de la licencia cuando se ejecuta el elemento del menú, la instalación concluirá sin ningún problema. Los mensajes de depuración de Wine de la línea de comandos se refieren a funciones que aún no han sido implementadas y pueden ser ignoradas. Los lectores atentos
44
Número 11
Figura 1: Lea la introducción mientras se instala; contiene información sobre la licencia y detalles de la versión de Wine que está usando.
podrían darse cuenta de que WineTools abre ventanas indicando lo que está sucediendo. Por ejemplo, WineTools simula un rearranque de Windows después de completar cada instalación asegurándose que todos los programas Wine se hayan cerrado. Después de instalar las MS Foundation Classes, vayamos al paso más importante: la instalación básica del Internet Explorer 6 Service Pack 1. Hay dos cosas que hacen que esta instalación sea interesante. Primero, Internet Explorer o partes de Internet Explorer contienen componentes requeridos por otros muchos programas y los programas no funcionarán adecuadamente sin ellos. Por ejemplo, más o menos, todos los programas Windows usan las bibliotecas IE6 para mostrar contenido HTML. Otra razón que muestra la importancia de IE es que este programa proporciona una actualización completa del sistema. Las bibliotecas adicionales pueden ser muy importantes para otros programas. Haciendo doble clic sobre la versión del idioma adecuado se entra en una instalación completa automática, incluyendo la descarga de Internet. Sea paciente; puede que tarde mientras se instala, tratando de encontrar los ficheros de inicialización correctos en Internet y completar su descarga. WineTools almacenará los ficheros que descargue en ~/winetools/sys para evitar repetir la maratoniana sesión si tuviera que reinstalar los ficheros. Esto proporciona la opción de usar WineTools
WWW.LINUX- MAGAZINE.ES
Wine está perfectamente configurado para imprimir con CUPS. Cualquier impresora configurada en CUPS estará automáticamente disponible para cualquier aplicación Wine. Pero si aún está utilizando el sistema printcap, habrá que usar el último elemento del menú para configurar Wine de modo que pueda aprovechar el entorno de impresión. Wine tiene un generis.ppd que define una impresora genérica. La ruta a este fichero puede diferir dependiendo de la distribución; así que habrá que modificar la ruta. locate generic.ppd nos pondrá en la pista. Antes de empezar a probar algunas aplicaciones iniciales, echémosle un vistazo a otra función de WineTools. Existe una casilla de verificación titulada Show Info en la parte de debajo de cada ventana de WineTools (Figura 2). Si se activa, seleccionando un elemento del menú, no sólo nos proporcionará la instalación de un programa sino que también nos llevará al sitio web en nuestro navegador. Probando Internet Explorer nos llevó a la página de instalación de Microsoft IE6, que nos informó de que Internet Explorer tenía “Tecnologías de seguridad avanzadas”.
¿Seguridad en Wine? Puede ser que se esté preguntando sobre cómo afectan a la vulnerabilidad de Linux la instalación de programas Windows como IE6. Enfrentado a una serie interminable de avisos de seguridad, parece extraño estar usando Internet Explorer. Así que, ¿cómo de vulnerable se vuelve un sistema Linux con software Windows ejecutándose con Wine? En teoría, podría usarse un agujero de seguridad en IE6 para atacar un sistema con Wine y no tener forma de predecir si el código inyectado se ejecutará en Wine. Las probabilidades son las mismas que para el software Windows. Hay un artículo moderadamente sarcástico en [2] en el que el autor describe sus intentos de probar la compatibilidad de Wine con cinco virus.
WineTools • PRÁCTICO
Figura 2: El checkbox Show Info muestra la página web con soporte de Ayuda adicional.
Como quiera que se mire, la vulnerabilidad no es un problema grave de las máquinas Linux; normalmente se requieren los privilegios de root para modificar un programa. Los datos locales de los usuarios puede que corran algún riesgo. El cambio de un fichero binario que use el formato ELF de Linux provocará la destrucción del fichero. Además, los virus de Windows normalmente usan las extensiones de los ficheros para localizar objetivos interesantes y estas extensiones son completamente atípicas en los binarios Linux. El hecho es que muchas de las bibliotecas del sistema que usan los virus no existen en Wine o han sido reemplazadas por versiones Linux que sólo tienen permiso de escritura por el root. Los ficheros Windows instalados en Wine son materia diferente; de hecho, son tan vulnerables bajo Linux con Wine como lo son en Windows. Se dispone de dos soluciones para mitigar el riesgo y prevenir el daño de los ficheros locales. La forma más sencilla es evitar configurar discos como directorios de Linux en Wine y enlaces similares en el disco C simulado, que es como colocar Wine en una caja de arena. Ello implica que los ficheros tienen que ser ubicados bajo el árbol de directorios accesible por Wine. Lo que se traduce en términos de administración en eliminar los enlaces a h: y z: en ~/.wine/dosdevices, ya que ambos enlaces apuntan al árbol de directorios de Linux. H: hace referencia al directorio home del usuario y Z: apunta a la raíz del sistema de archivos. Los otros enlaces que WineTools crea, c:, d:, e:, f:, y t: res-
tringen a Wine a su propio subdirectorio, ~/wine/drive_c, el CDROM, los ficheros temporales en /tmp y el directorio caché de WineTools. Este paso corrige el mayor problema de seguridad. Por supuesto, esto significa que Wine no pueda obtener ficheros desde otras localizaciones, así que tendrá que copiar algunos de los ficheros requeridos a /tmp o a ~/wine/drive_c como trabajo extra. La otra solución para la seguridad con Wine es crear una cuenta de usuario especial para Wine y ejecutar el software crítico como IE6 en esa cuenta de usuario. Por defecto, WineTools no usa ninguna de las opciones de seguridad que se han descrito; este diseño proporciona la máxima flexibilidad y permite a los usuarios la libertad de elección. Si se necesita más seguridad, se recomienda usar la segunda solución.
lización de IE6. Por ejemplo, se pueden utilizar los favoritos existentes, pero no se pueden crear nuevos ya que IE6 se queja sobre caracteres inválidos. Estos problemas con los favoritos rara vez afectarán a un usuario de Linux típico que use IE6 esporádicamente. Otra cosa que hay que tener en cuenta es que IE6 falla con más frecuencia que en su plataforma nativa. Si el programa se bloquea, tan sólo hay que esperar. No tardará mucho en volver a funcionar. Pero el acceso al sistema de ficheros local casi siempre produce bloqueos. No hay que molestarse en instalar Java. El único entorno Java que funciona es el antiguo Microsoft Java. Las aplicaciones embebidas en Internet Explorer, como el navegador de Ebay Lauge, funcionan, pero las extensiones del navegador fallaron en todas nuestras pruebas.
IE6 y Media Player en Linux
Sin Oportunidad para Java
Se puede ejecutar el recién instalado Internet Explorer tecleando ie6 en la línea de comandos. WineTools coloca el script en ~/bin, así que hay que asegurarse de que la ruta del sistema tiene una entrada como ~/bin. Si no es así, hay que añadir la entrada en el fichero .bash_profile o en .bashrc:
A pesar de los problemas, Internet Explorer es aún una herramienta útil para acceder a sitios que usan Javascript sin soporte para otros navegadores o para probar sus propios sitios web, y, como se mencionó anteriormente, porque casi todos los programas que manejan HTML usan las bibliotecas HTML de IE6. Al instalar IE6 automáticamente se instala Media Player. Se puede ejecutar el reproductor tecleando wmplayer en la línea de comandos, pero no hay que esperar mucho de él. El sonido puede desincronizarse o desaparecer. Los vídeos también aparecerán con colores extraños; si es así, puede ser que desee deshabilitar la aceleración por hardware en la configuración de Media Player. Las versiones recientes de Media
export PATH=$HOME/bin:$PATH
No hay que olvidarse de cerrar la sesión y volverla a iniciar para que los cambios tengan efecto. IE6 debería ahora ejecutarse tal y como se esperaba y llevarnos hasta la página de bienvenida de MSN. Afortunadamente se puede configurar el comportamiento inicial de IE6 en Herramientas / Opciones de Internet. No hay necesidad de configurar la conexión a Internet usando el asistente (como en Windows), ya que Wine maneja el acceso a Internet transparentemente por medio del sistema operativo Linux subyacente. Hay que hacer notar algunas cuestiones sobre la uti-
WWW.LINUX- MAGAZINE.ES
Número 11
45
PRÁCTICO • WineTools
Player no serán estables si se consigue que se ejecuten. Los packs de codecs dan la posibilidad a los usuarios de añadir codecs. El SLD Codec Pack se ha vuelto una fuente muy valiosa. Se puede instalar por medio del menú Tools en Install tested software. Después del reinicio simulado obligatorio, que WineTools realiza de forma automática, los codecs deberían estar disponibles y permitiendo que se puedan visualizar los ficheros MPEG2. Evítese instalar la versión proporcionada con el paquete de codecs -se bloquea al ejecutarse. En nuestras pruebas, otros paquetes de codecs se volvieron muy inestables. Al volver al menú principal de WineTools, es una buena idea instalar programas útiles de uso frecuente. Windows System Software nos lleva al instalador de Windows actual, Visual Basic y runtimes de C++, los controladores y motores de bases de datos de ODBC, las bibliotecas actuales de XML y Windows Script. Simplemente hay que recorrer la lista e instalar cada uno de estos productos, asegurándose de escoger la versión en el idioma correspondiente. Cuando se instala el Windows Installer, WineTools avisará de que el instalador no podrá manejar los programas antiguos. Pero esto es algo que no sucede muy a menudo. Si se le pregunta si sí o no a la hora de reiniciar, no hay que prestarle mucha atención, ya que WineTools se encarga de reiniciar por nosotros. La instalación de las fuentes es muy similar a la instalación del software de sistema (Figura 3); para ejecutar la instalación, selecciónese Install Microsoft TrueType core fonts y recórrase la lista hasta que se seleccionen todas las fuentes. Estas fuentes tan sólo están disponibles para Wine; el sistema Linux no las verá.
El elemento “Install Tested Software” proporciona un menú estructurado jerárquicamente con más de 100 categorías de software que han sido probadas con WineTools, incluyendo alguno de los paquetes comerciales como Adobe Illustrator o Photoshop, junto con herramientas shareware o freeware como VirtualDub o The Bat. Las versiones 97 y 2000 de Microsoft Office funcionan bien en Wine. Winword, Excel y Powerpoint son todas rápidas y estables. Las otras aplicaciones se pueden usar pero con restricciones. Access se suele bloquear. Si tiene problemas a la hora de hacer funcionar Access con Wine, Crossover Office es una alternativa útil.
Office 2000, la Aplicación Estrella WineTools gestiona las dependencias software e informa de los problemas. Por ejemplo, cuando se empieza a instalar Office 2000, WineTools indica que el programa requiere SplashKiller.zip y éste no se instala. Se puede instalar SplashKiller.zip después, así que hay que hacer clic en OK para confirmar. En el siguiente cuadro de diálogo, WineTools muestra algunas notas en las particularidades de la instalación actual. Algunos instaladores de Office solicitan el disco con los ficheros de instalación; este puede ser el CD, que WineTools lo tiene en D:. También se avisa de que no se instalen los asistentes de Office (el clip,…) ya que no funcionan y vuelven al Office inestable. El servidor de fax de Symantec tampoco funcionará.
Yo Clippy Para algunos programas, WineTools proporciona la opción de seleccionar manualmente una localización diferente o una versión del instalador en otro idioma. Se pueden mantener los valores por defecto en el caso del CD de
Figura 3: Sería recomendable dejar Arial como fuente Truetype y con las típicas fuentes de Windows no tendrá problemas.
Office. WineTools buscará en el CD un fichero de Autorun automáticamente. No se requerirá que ayude a WineTools a menos que falle en encontrar el fichero de Autorun. El próximo paso es montar el CD y lanzar el programa de instalación. Después de introducir la clave del CD y seleccionar la unidad de CDROM (D:), se selecciona una instalación definida por el usuario. Se puede instalar cualquier componente que se desee, excepto los asistentes mencionados anteriormente (situado en Office Tools). La instalación debería ser como en cualquier sistema Windows. Al final del proceso, el instalador pregunta si se desea reiniciar, pero no importa lo que se conteste, WineTools simulará el reinicio de todos modos e indicará el nombre de los scripts que se han almacenado en ~/bin. Para concluir, WineTools pregunta si se desea desmontar el CD. Si se pregunta si podrá utilizar un servidor Exchange con Outlook, la respuesta es no. Ahora puede ejecutar los programas instalados desde la línea de comandos. Los scripts de comienzo son msword, msexcel, msaccess, mspowerpoint y msoutlook, y las herramientas son msfinder, msquery y msbinder.
Outlook y Access Outlook puede usarse con POP3 y cuentas IMAP o con un servidor Exchange y el resto de opciones, como los contactos y las citas, deberían funcionar bien. Si se está interesado en usar sus datos de Outlook en Linux, podría intentarlo, pero no hay mucho que hacer. Outlook muestra pantallas
46
Número 11
WWW.LINUX- MAGAZINE.ES
WineTools • PRÁCTICO
molestas cuando se ejecuta, la pantalla cubre los cuadros de diálogo y hace que sea más o menos imposible completar la configuración. Antes de ejecutar Outlook por primera vez, habrá que instalar el Splash Screen Killer desde Tools. Pero WineTools nos informa de ello cuando se empieza a instalar el paquete Office. Teniendo instalado el Killer, se ejecuta Outlook por primera vez tecleando msoutlook. Una nota aclaratoria con respecto a este punto: Asegúrese de escoger la opción Internet only cuando se configure una cuenta de correo; si no se hace, cualquier configuración posterior fallará y esto hará que la versión de Outlook sea inoperativa. Después de rellenar los campos en el cuadro de diálogo y cancelar el instalador de Fax de Symantec, Outlook se debería ejecutar. Pruebe a cerrar Outlook inmediatamente. El cliente a veces se bloquea dejando al usuario con la única alternativa de teclear:
una selección de texto, se puede pegar dentro de Open Office sin perder la información del formato presionando [Ctrl]+[V]. Wine es capaz de intercambiar formato de texto enriquecido a través del portapapeles.
Las Capacidades de WineTools
Aún hay unas cuantas entradas en el menú principal de WineTools que no hemos tocado hasta ahora: la entrada denominada Control Center nos lleva al equivalente en Wine del Panel de Control de Windows. Una vez allí, encontrará toda clase de applets para configurar el gestor ODBC o las opciones de IE6. Hay un editor de registro y Show Installed Applications Software proporciona un registro completo de cada programa instalado por WineTools; la entrada Uninstaller permite desinstalar estos programas. Otra característica interesante Figura 4: WineTools anota exactamente qué software ha es la posibilidad de hacer una instalado, aunque Windows no se de cuenta. copia de seguridad completa del entorno de Wine para almacenarwineserver -kill lo en un CD o para tener una copia Lo más seguro es que desee integrar segura antes de experimentar con la las aplicaciones Windows en su escritoconfiguración. Las entradas para editar es decir, matar cualquier instancia de rio, para ejecutar Word automáticala configuración de Wine es sólo para Wine que se esté ejecutando. La próxima mente desde el navegador, el cliente de gurús. Pueden tener un impacto crítico vez que se ejecute msoutlook, Outlook correo o el escritorio, por ejemplo. en el software Windows instalado, así debería ser completamente operativo. Aunque el Crossover Office comercial que hay que asegurarse de saber exacHay un pequeño inconveniente: los icoproporciona todas estas características tamente lo que se está haciendo y nos en la barra izquierda de Outlook automáticamente, hay que realizar hacer una copia de seguridad antes de aparecen completamente en negro, pero algunos cambios manualmente para tocar nada. puede seleccionar View | Outlook toolbar realizarlo con Wine. La ayuda de la comunidad es necesapara deshabilitar los iconos y reemplaIntegración con Escritorios ria para continuar con el desarrollo de zarlos con una lista de carpetas. Si va a Linux WineTools. Si necesita instalar otro prousar Outlook con un servidor Exchange, grama Windows, por favor, mándeme un tendrá que reiniciar Outlook y cambiar el Se puede ajustar la configuración del email y permítame saber si puedo añatipo de cuenta en Tools | Options | Email navegador para ejecutar los scripts almadirlo a la siguiente versión de WineTools. accounts. Hay que hacer clic en cenados en ~/bin. Tanto KDE como También estoy planeando montar un Reconfigure email account para llevarlo a Gnome soportan fácilmente el manejo de sitio web para hacer más fácil la contricabo. Luego hay que reiniciar Outlook de estos tipos de ficheros. Muchos progra■ bución de la gente. nuevo. Outlook accederá al CD e instalamas también leen los ficheros del correo, rá las bibliotecas que no estén instalaasí que podría añadirse la siguiente das; entonces podrán seguirse los proceentrada para Winword al fichero RECURSOS dimientos estándar para configurar la ~/.mailcap: cuenta. [1] Página web de WineTools: http:// Microsoft Access funciona, a veces. application/msword;/home/U www.von-thadden.de/Joachim/ ¿Cuánto tiempo funcionará? Pues depende thadden/bin/msword %s WineTools de la aplicación y de los controladores de la [2] Virus de Windows en Wine: http://os. No se preocupe por las opciones de base de datos que se estén usando. newsforge.com/article.pl?sid=05/01/ Cortar y Pegar; si se presiona Mientras que algunas aplicaciones se ejecu25/ 1430222&from=rss [Crtl]+[C] en Winword para copiar tan sin ningún problema, otras no lo harán.
WWW.LINUX- MAGAZINE.ES
Número 11
47
DESARROLLO • Perl: XML parsers
Comparativa de de parsers parsers XML XML en en Perl Perl Comparativa
DIFÍCIL ELECCIÓN
XML es uno de los formatos de intercambio de información más populares. Perl tiene una enorme colección de métodos para manejar XML. En el artículo de Perl de este mes discutimos los pros y contras de los módulos XML más populares para ayudar a elegir la mejor herramienta para nuestro trabajo. POR MICHAEL SCHILLI
48
Número 11
WWW.LINUX- MAGAZINE.ES
Perl: XML parsers • DESARROLLO
A
la hora de manejar documentos XML, Perl se ciñe a su lema “Siempre hay más de una manera de hacerlo”. La comunidad Perl ha desarrollado ciertamente numerosos módulos para manipular XML. En este artículo examinaremos diferentes métodos de los distintos módulos Perl para la manipulación de datos basados en XML. Comenzaremos considerando el caso del ejemplo de datos mostrado en la Figura 1. El archivo mostrado en dicha Figura contiene dos registros de tipo <cd> dentro de una etiqueta <result>. Cada uno de estos registros XML consiste en etiquetas <artists> y <title> para un CD, donde <artists> puede incluir uno o múltiples etiquetas <artist>.
Sin complicaciones La manera más fácil de analizar XML en Perl es usar el módulo XML::Simple de CPAN. Este módulo exporta la función XMLin, que lee un archivo o cadena con datos XML y los guarda como una estructura de datos Perl, del siguiente modo: use XML::Simple; my $ref = XMLin("data.xml");
La Figura 2 muestra un volcado de la estructura de datos resultante en $ref. Puede que nos hayamos percatado de dos cosas. Dependiendo del número de artistas en <artists>, la estructura de
Listado 1: xptitles 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19
#!/usr/bin/perl -w use strict; use XML::LibXML; my $x = XML::LibXML->new() or die "new failed"; my $d = $x->parse_file("data.xml") or die "parse failed"; my $titles = "/result/cd/title/text()"; for my $title ( $d->findnodes($titles) ) { print $title->toString(), "\n"; }
datos resultante puede ser un escalar o una cadena. Esto nos complicará las cosas posteriormente. Sin embargo, podemos especificar la opción ForceArray para asegurarnos de que el campo se representará como una cadena. Realizando la llamada XMLin("data.xml", ForceArray => ['artist']), nos aseguramos que $ref->{cd}->[0] ->{artists}->{artist} siempre devolverá una referencia a una cadena, incluso si sólo tenemos un artista como fuente. Además de esto, ->{artists}->{artist} es un poco chapucero, ya que ->{artists} no tiene ningún subelemento, aparte de ->{artist}. XML::Simple tiene la opción Group-Tags que permite a los desarrolladores bajar jerarquías. El siguiente código: XMLin("data.xml", ForceArray => ['artist'], GroupTags => {'artists' => 'artist'});
crea la estructura de datos mostrada en la Figura 3, que es muy fácil de manipular. Por ejemplo, podemos usar un simple bucle For para encontrar números de serie: for my $cd (@{$ref->{cd}}) { print $cd-> U {serial}, "\n"; }
XML::Simple analiza el archivo XML completo en la memoria principal, lo cual es útil para archivos pequeños. Si tenemos un archivo XML grande, sin embargo, este método puede ser ineficiente, o incluso puede provocar que el programa se quede sin memoria.
El Camino Difícil Si somos entusiastas de la notación lacónica, nos encantará usar XPath para navegar por la jungla de XML. El módulo XML::LibXML de CPAN se basa en la librería libxml2 del proyecto Gnome y ofrece al desarrollador el método findnodes para acceder a elementos XML usando notación XPath. Por ejemplo, la notación XPath para recabar el texto contenido en todos los elementos <title> es /result/cd/title/text(). Comienza en el directorio raíz, /, sube hasta los ele-
WWW.LINUX- MAGAZINE.ES
Figura 1: Este ejemplo de datos XML es un subconjunto de un registro de un CD.
mentos <results>, <cd> y <title>, antes de usar text() para recoger su contenido. Alternativamente, podemos especificar simplemente //title/text() para indicarle a XPath que sitúe todos los elementos <title> sin importar el nivel en el que están localizados en la jerarquía XML. xptitles en el Listado 1 muestra que el método findnodes() devuelve una serie de objetos de texto, los cuales convierte el método toString() en el texto del título. XPath es muy capaz de manipular tareas más complejas: el Listado 2 recaba los números de serie de todos los CDs que tienen una etiqueta <artist> con el texto “Foo Fighters”. Para recabar estos números de serie, /result/cd/artists/artist[.="Foo
Listado 2: xpserial 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22
#!/usr/bin/perl -w use strict; use XML::LibXML; my $x = XML::LibXML->new() or die "new failed"; my $d = $x->parse_file("data.xml") or die "parse failed"; my $serials = q{ /result/cd/artists/ artist[.="Foo Fighters"]/ ../../@serial }; for my $serial ( $d->findnodes($serials) ) { print $serial->value(), "\n"; }
Número 11
49
DESARROLLO • Perl: XML parsers
Figura 2: Esta es la estructura de datos que XML::Simple usa para guardar los datos de muestra.
Fighters"]/../../@serial escala primero hasta las etiquetas <artist>, y luego verifica cada una de las etiquetas <artist> en busca de [.="Foo Fighters"]. Usa ., el vigente nodo en la ruta, y verifica si su valor es igual al de la cadena buscada Foo Fighters. En caso afirmativo, XPath sube dos niveles usando ../… En este nivel superior es donde reside la etiqueta <cd>. Se lee su parámetro serial, usando @serial, y por último se devuelve. El Listado 2 (xpserial) muestra el script completo, que en última instancia llama al método value() del objeto devuelto para que recupere el valor del texto del número de serie. XPath ofrece una notación compacta, pero si las cosas no funcionan a la primera, la depuración puede ser un martirio. Dicho esto, la combinación de Perl Y XPath compensa todas las desventajas, ya que soporta una útil mezcla de hackeos rápidos con XPath, una sólida lógica de programación y excelentes características de depuración. En comparación, usar un simple procesador XPath puede ser una pesadilla.
XML::Parser El módulo XML::Parser implementa más que un clásico parser. Se hace camino a través del documento XML, etiqueta a etiqueta y realiza llamadas definidas por el usuario cuando se cumplen determinadas condiciones. Para encontrar el número de serie de todos los CDs en los cuales la etiqueta de artista contenga “Foo Fighters”, el código tiene que llevar la cuenta del estado del analizador mien-
50
Número 11
tras que el parser atraviesa la jerarquía XML. Como muestra xmlparse en el Listado 3, el constructor de XML::Parser new() aguarda las llamadas de eventos como Start (cuando el parser encuentra una etiqueta de comienzo XML) o Char (cuando el parser encuentra texto entre marcas). Cuando el parser encuentra una etiqueta de apertura, como <cd serial="001">, llama a la función start(), con una referencia al parser, el nombre de la etiqueta, y la lista de atributos clave/valor. En nuestro ejemplo, a la función start() se le pasa la cadena “cd” como su segundo parámetro. El ter-
Listado 3: xmlparse 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
#!/usr/bin/perl -w use strict; use XML::Parser; my $p = XML::Parser->new(); $p->setHandlers( Start => \&start, Char => \&text, ); $p->parsefile("data.xml"); my $serial; my $is_artist; ############################# sub start { ############################# my ($p, $tag, %attrs) = @_; if ( $tag eq "cd" ) { $serial = $attrs{serial}; } $is_artist = ( $tag eq "artist" ); } ############################# sub text { ############################# my ( $p, $text ) = @_; if ( $is_artist and $text eq "Foo Fighters" ) { print "$serial\n"; } }
WWW.LINUX- MAGAZINE.ES
Figura 3: Estructura de datos XML basada en GroupTags con XML::Simple.
cer y cuarto parámetros son “serial” y “001”. La llamada a text() de la línea 29 en adelante recibe dos parámetros de XML::Parser cuando encuentra un elemento de texto: una referencia al analizador y la cadena que contiene el texto. Para que el analizador sepa qué parte del texto que ha encontrado contiene el nombre de un artista (y no cualquier otra cadena), necesita verificar si se encuentra dentro de una etiqueta <artist>. La única manera que tiene de averiguarlo es verificar si la variable global $is_artist se ha fijado a un valor verdadero por la llamada start. La variable global $serial usa el mismo método para pasar el número de serie, con start que encuentra el atributo serial en la etiqueta <cd>. Esto permite que la función print dentro de la llamada text() muestre el número de serie del CD que está siendo investigado. Este método supone que cada CD tiene en realidad un atributo <serial>, pero podemos validar esto con facilidad usando un DTD, por ejemplo. El módulo XML::Parser normalmente no se usa directamente, sino como base de clases definidas por el usuario. De hecho, XML::Simple, visto anteriormente, puede usar XML::Parser dependiendo del entorno de instalación y se le puede indicar que use el módulo si especificamos $XML::Simple::PREFERRED_PARSER = "XML::Parser";. Si estamos trabajando en una plataforma complicada, “XML::SAX::PurePerl”, otro analizador CPAN, puede ser una opción, aunque no será la más rápida. Puede instalarse sin necesidad de un
Perl: XML parsers • DESARROLLO
compilador en C. Instalando XML::Parser puede llevar un rato, y requiere tener una instalación de expat operativa. Para evitarnos todo este trabajo, podríamos simplemente aprovecharnos de otro módulo de CPAN, HTML::Parser, para las tareas concernientes a XML. Su sintaxis es sólo ligeramente diferente, y podemos fijar xml_mode para que conmute desde la interpretación laxa de HTML hasta el
Figura 4: twigfilter muestra el XML modificado.
estricto mundo de XML.
Listado 4:htmlparse 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
#!/usr/bin/perl -w use strict; use HTML::Parser; my $p = HTML::Parser->new( api_version => 3, start_h => [ \&start, "tagname, attr" ], text_h => [ \&text, "dtext" ], xml_mode => 1, ); $p->parse_file("data.xml") or die "Cannot parse"; my $serial; my $artist;
Herramientas Erróneas, Resultados Correctos Si miramos el Listado 4 de htmlparse, nos daremos cuenta de que el constructor de HTML::Parser aguarda una sintaxis ligeramente diferente a la de XML::Parser. Después de especificar qué versión de la API estamos usando, los parámetros start_h y text_h fijan las llamadas para abrir las etiquetas y el contenido de texto fuera de las marcas XML. El constructor también especifica qué parámetros debe pasar el analizador a las llamadas: start() se pasará como el nombre de la etiqueta de apertura y una lista de atributos (como referencia a un array en este caso), pero la función text() se pasa simplemente sin importar el texto que se haya encontrado.
Twig ############################# sub start { ############################# my ( $tag, $attrs ) = @_; if ( $tag eq "cd" ) { $serial = $attrs->{serial}; } $artist = ( $tag eq "artist" ); } ############################# sub text { ############################# my ($text) = @_;
XML::Twig de Michel Rodriguez proporciona una sorprendente efctividad a la hora de mapear XML en estructuras de datos en código Perl. Puede manipular enormes documentos inabordables por XML::Simple. Para ello, analiza cada documento pieza a pieza en lugar de intentar cargar todo el documento en memoria. XML::Twig tiene tantos métodos distintos de navegación XML que puede ser difícil encontrar el más adecuado para una tarea determinada. El script twig (véase Listado 5) llama al constructor XML::Twig::new con el
parámetro Twighandlers que mapea la ruta XML /result/cd/artists/artist al manejador artist definido en la línea 15. Cada vez que XML::Twig tropieza con una etiqueta <artist> al analizar un documento XML, llama a la función artist con dos parámetros. El primero es un objeto XML::Twig y el segundo un objeto XML::Twig::Elt (aparentemente Elt es la contracción de “elemento”). Este último representa el nodo dentro del árbol XML al cual está pegada la etiqueta <artist>. El método text() del objeto XML::Twig::Elt nos ofrece el texto situado entre las etiquetas <artist> de apertura y cierre. En el caso de que fuera “Foo Fighters”, las líneas 22 y 23 navegan hasta la etiqueta <cd> superior llamando al método parent dos veces. El objeto CD encontrado de esta manera puede ser consultado por el valor del atributo serial usando el método att(). El valor se puede entonces imprimir. Una vez que la etiqueta <artist> se ha procesado, la línea 31 hace la llamada al objeto XML purge() de Twig para indicarle que la parte del árbol hasta la etiqueta que está siendo procesada no se va a necesitar más y puede liberarse. XML::Twig es suficientemente inteligente para no borrar las etiquetas padre directas de la etiqueta que se está procesando, pero liberará cualquier etiqueta hermana ya procesada. Este tipo de gestión de memoria no tiene mucho sentido para pequeñas piezas de XML, pero sí que lo tiene en caso de grandes documentos. XML::Twig no sólo tiene elegantes funcionalidades de navegación XML: un script puede también renombrar etiquetas, llamar a métodos para cambiar dinámicamente de árbol o incluso liberar partes para ahorrar memoria. Por ejemplo, para convertir la etiqueta del cd serial='xxx' de <cd
if ($artist and $text eq "Foo Fighters" ) { print "$serial\n"; } }
WWW.LINUX- MAGAZINE.ES
Número 11
51
DESARROLLO • Perl: XML parsers
Figura 5: Consultas XPath en el shell interactivo xsh.
serial="xxx">...</cd> a la notación más prolija <cd><id>xxx</id>...</cd> y al mismo tiempo borrar la información del artista, el script twigfilter (Listado 6) usa primero root() para recabar el objeto raíz (<results>). El método children() devuelve entonces todos
Listado 5: twig 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
52
#!/usr/bin/perl -w use strict; use XML::Twig; my $twig = XML::Twig->new( TwigHandlers => { "/result/cd/artists/artist" => \&artist } ); $twig->parsefile("data.xml"); ############################# sub artist { ############################# my ( $t, $artist ) = @_; if ( $artist->text() eq "Foo Fighters" ) { my $cd = $artist->parent() ->parent(); print $cd->att('serial'), "\n"; } # Release memory of processed tree # up to here $t->purge(); }
Número 11
los objetos hijos del objeto raíz, esto es, los elementos cd. El método att_to_field() transforma entonces los atributos serial de los elementos cd a elementos del campo id. Entonces, first_child() recupera el primer (y sólo el primer) elemento artist, y el método delete() del propio elemento destruye el nodo y lo elimina del árbol. Por último, el método set_gi() (gi viene de identificador genérico) renombra el objeto <cd> que acaba de ser analizado a Compact Disc. La Figura 4 muestra el resultado. Desde el momento en que fijamos el parámetro PrettyPrint para el constructor a “intended”, el método print() llamado en la línea 23 nos muestra como resultado un árbol perfectamente indentado.
Listado 6: twigfilter 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#!/usr/bin/perl -w use strict; use XML::Twig; my $twig = XML::Twig->new( PrettyPrint => "indented"); $twig->parsefile("data.xml") or die "Parse error"; my $root = $twig->root(); for my $cd ( $root->children('cd') ) { $cd->att_to_field( 'serial', 'id' ); $cd->first_child('artists') ->delete(); $cd->set_gi("CompactDisc"); } $root->print();
WWW.LINUX- MAGAZINE.ES
XML::Twig ofrece al desarrollador la posibilidad de escribir programas increíblemente compactos, sólo nos llevará un poco de práctica encontrar los métodos adecuados.
XML::XSH Si preferimos un método más interactivo, puede que queramos probar el módulo del shell xsh XML::XSH. Ejecutando xsh se abre un intérprete de comandos que nos permite leer documentos XML en disco o recuperar documentos XML de la web. Podemos entonces ordenar consultas XPath arbitrariamente complejas al documento. Los resultados de estas consultas se muestran inmediatamente en la ventana de línea de comandos, permitiendo mejorar de manera continua nuestras consultas. La Figura 5 nos muestra un shell cargando un documento XML desde disco, mediante la orden open docA = "data.xml" antes de hacer un ls para ordenar una consulta XPath. El resultado de esta consulta XPath es un único número de serie: serial='002'. Los scripts descritos en este artículo son sólo pequeños ejemplos del tipo de scripts que podemos programar con la enorme cantidad de módulos XML disponibles desde CPAN. XML::XPath, XML::DOM, XML::Mini, XML::SAX y XML::Grove son más ejemplos de las infinitas opciones que tienen los programadores en Perl para ■ bucear dentro de XML.
RECURSOS [1] Listados del artículo: http://www. linux-magazine.com/Magazine/ Downloads/58/Perl [2] Tutorial XML::Twig: http://www. xmltwig.com/xmltwig/tutorial/index. html
Matplotlib • DESARROLLO
Representación gráfica 2D
MATPLOTLIB
Actualmente existen numerosas herramientas para analizar datos y representarlos en gráficas 2D, quizás una de las más conocidas sea matlab debido a su sencillez de uso. Entre uno de sus numerosos usuarios, cabe destacar a John Hunter, quien ha desarrollado Matplotlib (biblioteca escrita principalmente en python) como una alternativa gratuita, sencilla y de calidad. POR JOSÉ ANTONIO GARCÍA Y ANA FERREIRO
M
atplotlib es una biblioteca escrita en puro python, que hace un uso intensivo de Numeric/ numarray y otras extensiones para proporcionar un buen manejo de grandes arrays, permitiendo: crear gráficas de calidad (suavizado de fuentes), interaccionar con el área gráfica (zoom, traslación, etc), guardar figuras en diferentes formatos (.png, postcript), “embeber” el área gráfica en diferentes toolkits para el desarrollo de GUIs (GTK, WxPython y Tkinter), etc. En lo que sigue, veremos una serie de ejemplos, abordando las principales características de Matplotlib.
Listado 1: Capturas en diferentes formatos s01
x=arange(0,2,0.1)
02
03 04 05 06 07 08 09
ext=['.png','.eps','.ps','.svg '] s='fig' for k in range(0,3): y=sin((k+1)*pi*x) plot(x,y) name_fich=s+str(k)+ext[1] savefig(name_fich) hold(False)
WWW.LINUX- MAGAZINE.ES
Instalación Para poder realizar todas las pruebas que se van proponiendo y las que a vosotros se os ocurran, es necesario tener instalado Python y Matplotlib. En la pagina web [1] se detallan los pasos a seguir en la instalación, así como las diferentes opciones para configurar matplotlib.
Primeras gráficas Aunque matplotlib dispone de una API de orientación de objetos, el principal modo para crear gráficas es a través de la interfaz de pylab, que se importa mediante,
Número 11
53
DESARROLLO • Matplotlib
Figura 1: Gráfica dentro de una interface de usuario GTKAgg interactiva.
from pylab import *
Hay dos modos de trabajar en la interfaz de pylab: interactivamente o mediante scripts. Veremos ambos. Pongámonos manos a la obra… Para dibujar la función coseno basta escribir en el interprete de Python las siguientes líneas: >>> >>> >>> >>> >>> >>> >>> >>>
from pylab import * t=arange(0.,2.*pi,0.1) s=cos(t) plot(t,s) xlabel("x") ylabel("cos") title("Mi primera grafica") show()
Con el comando plot(t,x) se crea la gráfica de “t” frente a “s”; mientras que mediante show() se abre una GUI interactiva (Figura 1) que contiene a la gráfica. Tened en cuenta que el tipo de ventana va a depender el toolkit de GUI que tengáis por defecto en el fichero de configuración de matplotlib, en nuestro caso la ventana es de GTK. Con los comandos xlabel, ylabel y title etiquetamos los ejes ‘x’ e ‘y’ de la gráfica y escribimos el título de la misma, respectivamente. Por defecto la gráfica se representa en línea continua, a no ser que modifiquemos sus propiedades…
En una misma figura podemos dibujar varias gráficas simultáneamente, esto se controla mendiante el comando hold. Por defecto, sobre una figura se pueden superponer gráficas (hold(True)); si queremos que la gráfica se borre ante un nuevo comando de plot, basta indicarlo mediante hold(False). Probad las siguientes líneas de código,
Figura 2: Varias gráficas en la misma figura.
>>> from pylab import * >>> t=arange(0.,2.*pi,0.1) >>> s=cos(t) >>> p1=plot(t,s, 'g-o',U linewidth=2) >>> x=sqrt(t) >>> p2=plot(t,x, 'r--',U linewidth=3) >>> y=sin(t) >>> p3=plot(t,y, 'b--d') >>> show()
Ahora tenemos tres gráficas en la misma figura (Figura 2). Escribid hold(False) después de la primera gráfica p1. ¿Qué ocurre? Sólo se dibuja la última gráfica p3. Si queremos que se representen en la misma figura las gráficas p2 y p3, es necesario indicarlo mediante hold(True) después de p2. En el código previo, con los diferentes comandos plot, se representan las gráficas en diferentes tipos. La gráfica p1 se dibuja en color verde en línea continua y marcas de puntos (‘g-o’); p2 es la línea roja discontinua (‘r--‘) y p3 se muestra en color azul en línea discontinua con marcas de diamantes (‘b--d’). Mediante linewidth controlamos el ancho de la línea. En la página de matplotlib se detallan todas las propiedades de una línea.
filas y una columna, tenéis que escribir subplot(311) para crear la parte superior, subplot(312) para crear la gráfica central, y subplot(313) para crear la gráfica inferior. Veámoslo mejor con el siguiente ejemplo (Figura 3), 01 >>> subplot(311) 02 >>> plot(t,y,'b-d') 03 >>> ylabel('sin') 04 >>> subplot(312) 05 >>> plot(t,x,'r--',lin width=3) 06 >>> ylabel('sqrt') 07 >>> subplot(313) 08 >>> plot(t,s,'g-o',lin width=2) 09 >>> ylabel('cos') 10 >>> show()
Puede suceder que el tipo de estructura proporcionada por subplot no sea lo que queremos, en este caso hay que emplear el comando axes para situar las diferentes gráficas dentro de la figura en las posiciones que le indiquéis. El comando axes se inicializa
Subgráficas
Figura 3: Subgráficas estructuradas en una “malla” 3 x 1.
54
Número 11
En una figura es posible representar diferentes gráficas en una estructura de malla regular numFilas por numColumnas. Por ejemplo, para crear tres
Figura 4: Uso del comando axes para colocar una gráfica sobre otra.
WWW.LINUX- MAGAZINE.ES
Matplotlib • DESARROLLO
de velocidades ‘v’, por ejemplo; es decir, 1. 2. 0.4
Figura 5: Puntos cargados desde un fichero.
con un rectángulo [izq,fondo,ancho,alto] en coordenadas relativas normalizadas (0,1). izq, fondo = (0,0) es el punto inferior a la izquierda del canvas de la figura. Escribid las siguientes líneas, 01 >>> x=arange(-2.,2.1,0.1) 02 >>> y=x**2 03 >>> plot(x,y,'b-d') 04 >>> axis([-2.1,2.1,-0.1,4.1]) 05 >>> xlabel('X') 06 >>> ylabel('Y=X**2') 07 >>> title('F(x)=x**2') 08 >>>a=axes([0.35,0.5,0.3,0.27] ,axisbg='y') 09 >>> plot(x,z,'r--',lin width=2) 10 >>> title('exponencial') 11 >>> set(a,xticks=[]) 12 >>> show()
Os tiene que aparecer una gráfica pequeña con fondo amarillo, sobre la gráfica principal; tal como se muestra en la Figura 4. No confundáis el comando axes con axis. El primero se utiliza para organizar gráficas; mientras que axis([xmin,xmax,ymin,ymax]) determina los límites de los ejes asociados a una gráfica. En los diferentes ejemplos, os habréis dado cuenta de que se puede modificar el color de fondo de la gráfi-
Figura 6: Expresión de Latex en la figura.
ca, el tipo y el color de la línea, etc. También se pueden fijar las propiedades del texto, como por ejemplo, >>> xlabel('coord. x',U color='r', size=12) >>> l=ylabel('cuadr do') >>> l.set_weight('bold')
En la página web de matplotlib podéis encontrar todas las propiedades de una figura, gráfica, texto, etc.
Cargar y guardar ficheros ASCII Suponed que tenemos un fichero ‘datos.dat’ con una estructura en columnas, donde la primera columna almacena el tiempo ‘t’ y la segunda los valores
Listado 2: Importación de paquetes mínimos para GUI Tkinter 01 import matplotlib 02 matplotlib.use('TkAgg') 03 04 from matplotlib.numerix import arange,sqrt 05 from matplotlib.axes import Subplot 06 from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg 07 from matplotlib.figure import Figure 08 09 import Tkinter as Tk
Figura 7: Embeber Matplotlib en Tkinter.
WWW.LINUX- MAGAZINE.ES
0.35 0.65 0.34
… y así sucesivamente Podemos cargar el fichero en un array Z mediante el comando load('path_fichero'). La forma de Z es el número de filas por 2 columnas, donde la primera columna almacena los tiempos y la segunda las velocidades. El modo de extraer las columnas en arrays 1d es, >>> Z=load('datos.dat') >>> t=Z[:,0] >>> v=Z[:,1] >>> plot(t,v,'ro',U markeredgecolor='b',U markersize=10) >>> show()
En el área de descarga tenéis un fichero de pruebas, cuya gráfica se corresponde con la Figura 5. También podéis guardar un array de datos en un fichero de tipo ASCII mediante el comando save('path_fichero'). El siguiente código muestra como crear dicho fichero, x=arange(-2,2,0.5) y=x**3 Z=zeros((len(x),2),Float) Z[:,0]=x Z[:,1]=y save('../cubo.dat',Z)
Añadiendo LATEX Matplotlib soporta expresiones matemáticas escritas en LATEX (Figura 6). Se añade como una cadena de texto delimitada por “$” a ambos lados, es decir, r'$\ \sum_{k=0}^{10} \pi k/10 \ $'; sin embargo, lo que no está permitido es ‘embeber’ Latex en una cadena de texto: r' Numero $\pi$'. En el área de descarga tenéis el fichero ej_latex.py que contiene el código correspondiente a la Figura 6.
Capturar imágenes La ventana de la figura, por defecto, contiene un botón para capturar la imagen y
Número 11
55
DESARROLLO • Matplotlib
LOS AUTORES
tro de la que situamos una subgráfica mediante el comando a=f.add_subplot(111). La figura f se asocia al área de dibujo de Tk, Figura 9: Diferentes ejemplos donde se canvas=Figure embebe Matplotlib en WX. CanvasTkAgg, que se muestra código, sin que mediante el comando canvas.show(). sea necesario Este canvas se sitúa en la GUI mediante abrir la ventana canvas.get_tk_widget().pack o Figura 8: Diferentes ejemplos donde se embebe Matplotlib en WX. de GTK. Probad canvas._tkcanvas.pack(). el código del La clase NavigationToolbar2TkAgg guardarla en formato .png, .eps, .bmp Listado 1, donde se guardan varias imáconstruye una barra de herramientas de (basta indicar la extensión); sin embargenes empleando un bucle for. navegación, que permite interactuar con go, esto también podemos hacerlo en Mediante savefig('path_file') se captuel área de dibujo. Para mostrar dicha barra basta emplear el comando updara la figura y se guarda en el formato que Listado 3: Embeber matplo- le indiquéis; en caso de no especificar te(). Con estos sencillos comandos ya extensión se usa .png (establecida por tlib en GUI Tkinter sabéis lo necesario para desarrollar grádefecto). Los formatos .jpeg y .tiff no ficas en Matplotlib y crear vuestras proestán soportados. Probad a comentar la 01 root = Tk.Tk() pias interfaces que contengan un área línea hold(False)…, como veréis las grá02 root.wm_title("Embeber Tk") de dibujo. Si estáis más familiarizados ficas se van superponiendo. 03 con Wx, GTK, … la idea a seguir es la 04 f = Figure(figsize=(5,4), Embeber matplotlib en una misma, siempre se crea un área de dpi=100) aplicación dibujo en la que se situan las Figuras 05 a = f.add_subplot(111) Matplotlib puede embeberse dentro de que contengan las gráficas. En la Figura 06 t=arange(0.,15.,0.1) una aplicación desarrollada en los 8 se muestra una captura de una inter07 s= sqrt(t) siguientes toolkits: WX, Tkinter, GTK, face en Wx con un área de dibujo de 08 a.plot(t,s) ■ FLTK. Nosotros vamos a ver un ejemplos matplotlib. 09 sencillo empleanto Tkinter. 10 canvas = FigureCanvasTkAgg(f, Lo primero es indicar el tipo de toolkit master=root) RECURSOS que vamos a utilizar mediante matplo11 canvas.show() tlib.use(backend), donde: 12 [1] Pasos para la instalación de backend='WXAgg' si empleamos WX, Matplotlib: http://matplotlib. canvas.get_tk_widget().pack(si backend='TkAgg' si optamos por sourceforge.net/installing.html de=Tk.TOP, fill=Tk.BOTH, Tkinter y backend='GTK' para GTK. expand=1) [2] Matplotlib: http://matplotlib. Cread un fichero que llamaréis matsourceforge.net/ 13 plot_tkinter.py (en el área de descargas 14 toolbar = [3] Python: http://www.python.org tenéis desarrollado el código completo). NavigationToolbar2TkAgg( canEn el Listado 2 están escritos todos los vas, root ) paquetes que vamos a necesitar. 15 toolbar.update() Ana M. Ferreirro Ferreiro es mateCreamos una ventana de Tkinter 16 mática, pero su verdadera pasión donde colocaremos: a) #canvas._tkcanvas.pack(side=Tk es la informática. Así que parte de FigureCanvasTkAgg: área de dibujo; b) .TOP, fill=Tk.BOTH, expand=1) su tiempo lo dedica al desarrollo NavigationToolbar2TkAgg: barra de en Python de interfaces gráficas 17 herramientas con los controles (zoom, multiplataforma, y al desarrollo de 18 button = software de visualización científitraslación, etc.) y c) botón salir. En el Tk.Button(master=root, ca 3D. Listado 3 se recoge el código para destext='Salir', arrollar la GUI con esta estructura José A. García Rodríguez también command=sys.exit) es matemático y desde hace unos (Figura 7). 19 button.pack(side=Tk.BOTTOM) años se dedica al desarrollo de Mediante f=Figure(figsize(5,4), 20 código paralelo y optimización de dpi=100) creamos una figura, indicando 21 Tk.mainloop() códigos en C++. el tamaño y la relación ancho/alto, den-
56
Número 11
WWW.LINUX- MAGAZINE.ES
GIT • DESARROLLO
El nuevo SCM del kernel Linux
GIT Una de las herramientas esenciales en el desarrollo del kernel es el gestor del código fuente. GIT es, desde hace poco, el programa encargado de permitir a los hackers de nuestro kernel tener el control de cada línea de código. POR ALBERTO PLANAS
U
no de los aspectos más interesantes en el mundo del software libre es la gestión de los grandes proyectos. Lograr que varios desarrolladores puedan trabajar en el mismo proyecto, estando separados por enormes distancias y husos horarios diferentes, requiere de mucho esfuerzo, disciplina y de herramientas que permitan la comunicación y la sincronización del trabajo. El proyecto del kernel de Linux ha pasado por varias etapas en su gestión. Poco a poco y aprendiendo de los errores pasados, se han ido estableciendo las políticas y las herramientas adecuadas que proporcionen las mejores garantías para su desarrollo y mantenimiento. Durante ese proceso se han redefinido los criterios de nombrado de las versiones, se han establecido varios protocolos que indican cómo y cuando los programadores deben entregar sus parches de código, cómo se deben usar las listas de distribución y cómo se debe gestionar y distribuir el código fuente del núcleo de nuestro sistema operativo.
La mejor herramienta para el trabajo Uno de los primeros sistemas para la gestión del código fuente que se usó era nuestro viejo conocido CVS[1], que en aquella época (principios y mediados de los 90) se consideraba como la mejor herramienta para la gestión de proyectos de código libre. Ahora está en desuso en favor de otra herramienta nueva: el nuevo estándar
de facto Subversion[2]. Quienes hayan usado CVS reconocerán los problemas en el renombrado de ficheros, la ausencia de atomicidad en las transacciones y la lentitud en algunas de las operaciones más comunes. No se confundan, es una herramienta excelente para proyectos pequeños pero, como aprendieron los desarrolladores del kernel, no es nada recomendable para grandes proyectos o para proyectos que tienen muchas ramas de desarrollo. Varios de estos desarrolladores, entre otros Linus Torvals, comprendieron que uno de los principales motivos por los que se retrasaba el desarrollo del kernel, era por la elección de CVS como herramienta para el control de versiones. Parches que se perdían o no llegaban a aplicarse y una disminución en la productividad debida a la filosofía de tener un repositorio centralizado para cada proyecto fueron, entre otros, los factores que desencadenaron un detrimento en la calidad final del código. Dada la voz de alarma, Linus Torvals decide en 2002 delegar toda la gestión del código fuente a una herramienta no libre. BitKeeper[3], de la empresa BitMover, es el producto escogido. Larry McVoy, el presidente de esa empresa, decide proporcionar de manera gratuita la herramienta y los repositorios BK a todos los desarrolladores del kernel. Esta decisión es considerada como una incursión del diablo en la misma cocina de la comunidad del software libre. Richard Stallman y media comunidad avisa del peligro que supone
WWW.LINUX- MAGAZINE.ES
confiar en un proyecto propietario el desarrollo de uno libre, pero el argumento de Linus no deja lugar a la réplica: ‘se ha escogido la mejor herramienta para el trabajo’. BitKeeper permitía un desarrollo distribuido: cada uno tiene una rama de desarrollo aparte y puede unir su código de manera sencilla con el de otros desarrolladores. La verdad es que pronto los desarrolladores del kernel se acostumbraron a esta manera de trabajar, mucho más adecuada para la manera de pensar de estos programadores (y es que tanto ego junto provocaba la aparición de múltiples ramas en repositorios diferentes que luego resultaba un infierno de unir con CVS). Sin embargo pronto empezaron los trabajos de ingeniería inversa en esa herramienta por la parte de la comunidad que consideraba poco adecuado el uso de una herramienta no libre para tan delicado asunto: se desentrañó el protocolo y empezaron a entrever ciertos algoritmos y mecanismos internos que se consideraban secretos por BitMover. Esto permitió tener una herramienta de código libre que permitía, al menos, la exportación de repositorios BK. Tras varias negociaciones y varios desencuentros entre la empresa y los desarrolladorres se decidió, a principios de año, rescindir el permiso que daba BitMover a usar BitKeeper de manera gratuita en los proyectos de software libre. Linus empezó a realizar pruebas en otros sistemas de control de versiones distribuidos de códigos libre (Monotone, Arch y
Número 11
57
DESARROLLO • GIT
Darcs principalmente) pero se descartaron por su lentitud o dificultad de uso. Otras soluciones como Subversion ni se consideraron por su naturaleza centralizada. Así que tras tres años de uso de una herramienta privada para gestionar el núcleo de Linux, una rescisión de su licencia de uso y una enorme avalancha de mensajes “ya te lo dije”, por parte de la comunidad, nos encontramos con que no tenemos un programa que pueda gestionar una de la joyas de la corona en el mundo del software libre: el código fuente del kernel Linux. La respuesta que Linus dio a principios de Abril de 2005 fue GIT. Apenas cuatro o cinco ficheros en C que contenían el desarrollo de un par de semanas de trabajo, que empezaban a esbozar apenas las bases de un futuro gestor de contenidos de directorios. Este programa permite el indexado de todo un árbol de directorios por medio de su contenido, y gestiona la generación de determinados objetos que almacenan estados temporales en el árbol de desarrollo. Realmente la propuesta de GIT es similar a la de un sistema de ficheros en el que los contenidos no son modificables y la localización del fichero se hace por el resumen SHA-1 de su contenido y no por su nombre. Esta descripción dista mucho de la de un programa para gestión de versiones del código fuente de nuestros proyectos, pero es la base para construir uno muy rápidamente que sea veloz, eficiente y de carácter distribuido. Una vez se presentó el programa y los desarrolladores entendieron la idea, pronto empezaron a trabajar dentro de la lista de distribución de GIT [4]. En apenas tres meses de desarrollo, GIT empezó a tener forma de un SCM de verdad y una vez que Linus se aseguró que el proyecto iba encaminado según sus criterios, delegó el mantenimiento del proyecto a Junio Hamano, uno de los más activos desarrolladores de GIT. La primera versión del kernel Linux gestionada completamente por este nuevo programa fue la 2.6.12, es decir, en apenas dos meses de desarrollo, ya se tenía una versión capaz de soportar muy adecuadamente las necesidades de un proyecto del tamaño del kernel Linux. Si desea seguir la historia de GIT puede suscribirse a la lista de distribución enviando un email con el texto subscribe git a la dirección de email majordomo@vger.kernel. org:
58
Número 11
echo 'subscribe git' | U mail majordomo@vger.kernel.org
Dentro de GIT Aunque el programa es relativamente joven, ya está empaquetado para las principales distribuciones existentes debido a su posición clave para el desarrollo del kernel. Así que si queremos instalarlo y tenemos una debian podremos usar un apt-get, o si usamos una Fedora con un yum install git-core, lo tendremos instalado sin problemas (lleva tiempo en el repositorio extra) Pero para asegurarnos vamos a compilar e instalar a mano la última versión (a día de hoy es la 0.99.8a, pero cuando lea este artículo es posible que pueda disfrutar de la versión 1.0). wget http://kernel.org/pubU /software/scm/git/U git-core-0.99.ßß8a.tar.bz2 t a r x j v git-core-0.99.8a.tar.bz2 cd git-core-0.99.8a make prefix=~/bin/git install
f
Ahora sólo nos queda poner en el PATH el camino ~/bin/git/bin y ya podremos empezar a usarlo. Para poder explicar las características esenciales de GIT vamos a crear un repositorio a modo de ejemplo. En GIT cada directorio raíz es un repositorio completo, a diferencia de otros SCM, no necesita de una base de datos centralizada donde almacenar los diversos repositorios y proyectos. Así que lo primero que tenemos que hacer es crear nuestro directorio y repositorio: mkdir repositorio cd repositorio git-init-db
En GIT hay dos tipos de comandos. El primero hace referencia a los comandos de bajo nivel. Son comandos muy primitivos que permiten acceder a la estructura interna de GIT para que podamos fabricarnos nuestras propias herramientas de gestión de alto nivel. En la jerga GIT a este conjunto de programas se les conoce como ‘plomería’ (plumbing en el ingles original). Sobre este conjunto de programas, GIT define un nivel mayor de abstracción (no exageremos, tampoco hay demasiada diferencia entre los dos niveles). Estos comandos hacen uso de una o varias de las aplicaciones anteriores para facilitar el
WWW.LINUX- MAGAZINE.ES
uso de la herramienta. A este conjunto de comandos se les conoce cómo ‘porcelana’ (porcelain en la documentación) y se implementa en pequeños scripts en Bash para asegurar cierta portabilidad entre sistemas operativos. Con el comando git-init-db hemos creado de manera silenciosa un directorio oculto llamado .git/. En él encontraremos otros ficheros y directorios encargados de ir guardando el estado de nuestro repositorio. Si nos fijamos con detenimiento uno de los ficheros es un enlace inicialmente roto, ya que el fichero al que apunta no existe. Este enlace se llama HEAD y apunta a refs/heads/master. En el directorio refs/heads se van a ir almacenando las diversas ramas de código (branch) que iremos creando en nuestro proyecto y HEAD irá apuntando a la que se considere como la más actualizado, o al menos a la que durante un periodo de tiempo se considere que contiene el estado en curso del proyecto. Los objetos del repositorio se almacenan bajo un formato especial en el directorio objects. Estos objetos son de carácter inmutable (no son modificables) y su nombre es el resultado de aplicar a un contenido el resumen hash SHA-1. Es decir, cuando GIT quiere almacenar un objeto que representa un fichero de nuestro proyecto, lo que hará será primero aplicar el algoritmo SHA-1 al fichero original, con lo que se obtendrá una secuencia de 40 bytes que representan un número de 160 bits en hexadecimal. GIT para referenciar un objeto del proyecto lo hace por medio de un resumen de su contenido, y no por el nombre que hayamos asignado. El hecho de que no sean modificables permite ir guardando varias versiones del mismo documento, simplemente añadimos para éste documento modificado un objeto diferente (puesto que al cambiar el contenido, su resumen SHA-1 será también diferente). Por otro lado el referenciar un fichero por su contenido pero no por su nombre va a permitir que dos ficheros con diferente nombre con la misma información compartan el objeto calculado por SHA-1. Es una manera elegante de tratar el copiado y el renombrado de ficheros dentro de un proyecto. Ahora ya podemos empezar a incorporar contenido a nuestro proyecto. Para este ejemplo copiaremos el fichero de configuración de apache dentro de nuestro directorio de trabajo (cp /etc/httpd/conf/httpd.conf .). Antes de edi-
GIT • DESARROLLO
tarlo vamos a indexarlo con el comando de alto nivel: git add httpd.conf
Si tenemos curiosidad y miramos dentro del script git veremos que sólo hace llamadas a otros comandos del tipo git-XXX, así que la instrucción anterior lo que realmente hace es llamar a otro script, git-add, y este a su vez hace llamadas al programa binario git-update-index. Este último es el que se encarga de actualizar el índice de ficheros existentes de nuestro repositorio, y con el parámetro add le indicamos que deseamos añadir un nuevo fichero a nuestro repositorio de control de versiones. Hay que tener cuidado en este punto, actualizar esta caché de ficheros no es lo mismo que almacenar el estado de nuestro árbol de trabajo actual, es solo el paso previo. GIT sólo puede almacenar estados que previamente estén indexados. Vamos a crear nuestro primer estado con el comando: git commit -m "Commit inicial"
GIT leerá todos los objetos indexados hasta el momento y creará un nuevo objeto interno que representa el árbol actual (algo así como tomar una descripción de cuales son los ficheros a considerar y donde están). Además creará otro objeto especial denominado objeto commit donde almacenará el historial de este árbol (es una descripción de cómo pasar de la fotografía anterior a la actual). Todos estos objetos creados se almacenan en el directorio .git/objects y podemos verlos con: $ ls .git/objects/*/* .git/objects/48/1cc65cc01a4e0a2U 8e00e819873d8154032ad56 .git/objects/db/5821359f207eeb0U 4444262b9fafaeb720c99d6 .git/objects/f1/82806a63bac810bU 7154644812b81110b788b78
Vemos que, efectivamente, hay tres objetos. Uno debe corresponder al fichero de nuestro proyecto cuando lo indexamos, otro al árbol que indica qué objetos existen en un momento determinado y, finalmente, otro que explique cómo pasar a este árbol desde otro árbol anterior o, como en este caso, desde un estado ini-
sentaciones de ficheros ordinarios. Los objetos tree corresponden, naturalmente, a los árboles y los commit a los objetos que almacenan el historial de cambios y los comentarios asociados (en este caso “Commit inicial”). Si cambiamos el fichero httpd.conf para que apache escuche del puerto 8080 en vez del 80, ya tendremos una modificación en nuestro proyecto. Podemos comprobar la diferencia entre el fichero original y el nuevo haciendo un git diff. Esto nos mostrará una saliFigura 1: Las últimas modificaciones de GIT visda por pantalla similar a la mostrada tas por gitk. en el Listado 1. Esta salida es válida como parche y se puede aplicar por cial. Existe un comando que nos indicará GIT sin ningún tipo de transformación. que tipo de objeto es cada uno de ellos y, Existen otros comandos que nos van a como es evidente, este comando pertenepermitir ver las diferencias entre los ce a la familia de los de bajo nivel: ficheros indexados y los de nuestro directorio de trabajo, o las que hay entre $ git-cat-file -t 481cc dos árboles o, incluso, entre un árbol y blob un fichero indexado. Todos estos coman$ git-cat-file -t f1828 dos son accesibles por medio del mismo tree git diff explicado antes. Cada vez queda $ git-cat-file -t db582 más claro que GIT ha sido programado commit por gente del mundo de UNIX. Comparte la filosofía de construir aplicaciones por Hemos usado el comando git-cat-file para medio de módulos pequeños que se averiguar el tipo de objeto almacenado. enganchan unos a otros para producir Tenemos que pasar como parámetro el comportamientos más complejos. resumen SHA-1 del objeto (cuidado, el Para poder subir estos nuevos cambios nombre del directorio de dos caracteres es al repositorio tendremos primero que parte de este resumen), así vemos que el actualizar los índices y luego hacer el comobjeto que empieza por 481cc (no tenemit (con lo que volveremos a crear otro mos que indicar todo el SHA-1) es un dos nuevos objetos en el directorio oculobjeto de tipo blob. Estos blobs son repreto):
Listado 1: git diff 01 $ git diff 02 diff --git a/httpd.conf b/httpd.conf 03 --- a/httpd.conf 04 +++ b/httpd.conf 05 @@ -130,7 +130,7 @@ MaxRequestsPerChild 0 06 # prevent Apache from glomming onto all bound IP addresses (0.0.0.0) 07 # 08 #Listen 12.34.56.78:80 09 -Listen 80 10 +Listen 8080 11 12 # 13 # Dynamic Shared Object (DSO) Support
WWW.LINUX- MAGAZINE.ES
$ git-update-index httpd.conf $ git commit -m "Escuchamos enU el puerto 8080"
Para ver las diferencias entre el árbol recién subido y el árbol anterior podemos escribir lo siguiente: git diff -p HEAD^ HEAD
Como comentamos antes, HEAD apunta al árbol actual, pero si lo precedemos con el carácter ‘^‘ estaremos indicando padre de…. En este caso el comando anterior puede leerse como: obtener la diferencia entre en padre del actual árbol y el árbol actual. Si resulta que deseamos volver al árbol anterior y deshacer el cambio sin dejar rastro ninguno, podremos hacerlo combinando estos comandos:
Número 11
59
DESARROLLO • GIT
git reset HEAD^ git checkout -f git prune
En la primera línea indicamos qué deseamos que HEAD apunte a su padre. Con el siguiente comando rescatamos el contenido de dicho árbol sobreescribiendo el actual, es decir, sustituimos nuestro httpd.conf con el anterior en nuestro directorio de trabajo. Para no dejar rastro en el sistema de los objetos tree y commit que se crearon en la anterior operación, borraremos cualquier objeto no utilizado en la actualidad con el comando git prune. Con GIT tenemos la oportunidad de crear hebras de desarrollo paralelas a la principal. Generalmente se utilizan para experimentar nuevos desarrollos o integraciones que, si tienen éxito, se integrarán posteriormente a la rama principal. El comando para crear estos branchs es: git checkout -b servidor1
Hemos dado un nombre a esta nueva rama de desarrollo. La vamos a usar para almacenar otra configuración diferente de apache encargada de hacer funcionar correctamente el servidor web de uno de los servidores de producción. Ahora podemos editar el fichero httpd.conf para introducir estos cambios, que podremos subir al repositorio volviendo a indexar y haciendo commint. En cualquier momento podemos volver a la rama principal de desarrollo con:
co de cambios. GIT proporciona varios mecanismos para realizar esta copia de manera transparente. Estos mecanismos incluyen el transporte por red (HTTP, SSH, rsync, etc.). A modo de ejemplo descargaremos el proyecto GIT directamente del mantenedor y lo almacenaremos en un directorio local:
git-whatchanged -p -root git clone rsync://rsync.U kernel.org/pub/scm/git/U git.git/ git
Para obtener una lista de los proyectos publicados podemos consultar en [6]. Esta lista se ha generado por medio de una aplicación web en Perl, gitweb[7]. Con esta aplicación podremos publicar nuestros propios repositorios en internet. Es muy útil para hacer un seguimiento remoto de los proyectos, ya que podemos obtener datos tales como quién ha realizado el último commit, la lista de cambios realizados sobre el proyecto y un texto descriptivo de estos cambios, obtener el último cambio incorporado a un fichero y ver las diferencias entre las distintas versiones de un mismo fichero (ver Figura 1). Además tiene una opción para exportar estos resúmenes en formato RSS al que podemos suscribirnos desde nuestro agregador de noticias. Ahora podemos hacer modificaciones en nuestra versión local de GIT, pero posiblemente el mantenedor oficial incorpore nuevos e interesantes cambios en su repositorio. Podremos obtener sus cambios (y unirlos a los nuestros) con un simple:
git checkout master git pull
Si por alguna razón deseamos unir los cambios podemos hacerlo con: git resolve HEAD servidor1U -m "Incluimos los cambiosU a master"
Con resolve el sistema tratará de deducir cómo sería el fichero resultante de unir las dos ramas indicadas. Si falla es responsabilidad nuestra modificarlo a mano y subirlo con un commit. Con GIT podemos clonar repositorios publicados en la red. Si hemos estado atento, cada directorio raíz es un repositorio completo y válido, así que si copiamos a otra máquina el directorio completo, habremos transferido tanto el contenido actual del proyecto como el históri-
60
Número 11
izquierda se corresponden con un commit sobre le proyecto. Podemos posicionarnos sobre cada uno de estos puntos para ver tanto el parche que se ha insertado como el comentario asociado. Esta misma información la podemos conseguir desde la línea de comandos con:
Para poder ver cuales son esos nuevos cambios podremos recurrir a git log. Este comando nos mostrará los mensajes asociados a cada commit realizado sobre el proyecto. Adicionalmente los desarrolladores de GIT proporcionan una herramienta que nos permitirá ver de manera gráfica los cambios realizados, los comentarios e incluso las líneas de merges o fusiones de código que han existido a lo largo de la vida del proyecto: gitk --all
Si ejecutamos el programa anterior sobre el directorio del proyecto GIT local, veremos algo parecido a lo que se muestra en la Figura 1. Cada círculo en las líneas de la
WWW.LINUX- MAGAZINE.ES
GIT, en su carácter distribuido, proporciona otra familia de comandos que permiten subir los cambios de nuestro proyecto a un repositorio público (push). Finalmente, cuando nos cansemos del proyecto podremos hacer un git repack con lo que empaquetaremos muchos de los objetos del repositorio, con la intención de que ocupen menos espacio en el disco.
Una porcelana diferente Los comandos GITs que hemos visto son un algo áridos para un uso casual de la aplicación. Bien es cierto que están diseñados para que el usuario haga sus propios scripts que optimicen su forma de trabajar, pero no todos somos kernel hackers ni tenemos porqué aprender tantos comandos y encadenarlos para lograr las seis o siete operaciones más comunes de un SCM. Precisamente esto es lo que permite el proyecto cogito[7]. Este programa no es más que un conjunto de scripts en lenguaje Perl (antes estaba escrito en Bash) que hace uso de las dos capas de GIT para lograr un mayor nivel de simplificación. Con estos nuevos comandos nos podremos olvidar de tener que reindexar todos los ficheros modificados antes de poder hacer un commit y simplifica el ■ acceso a los repositorio remotos.
RECURSOS [1] Concurrent Version System: http:// www.nongnu.org/cvs [2] Subversion: http://subversion.tigris. org [3] BitKeeper: http://www.bitkeeper.com [4] Lista de distribucion: git@vger.kernel. org [5] GIT: http://www.kernel.org/pub/ software/scm/git/ [6] Lista de repositorios: http://www. kernel.org/git [7] gitweb: http://www.kernel.org/pub/ software/scm/gitweb/ [8] cogito: http://www.kernel.org/pub/ software/scm/cogito/
Python • DESARROLLO
La librería curses en Python
CUADERNO DE BITÁCORA
¿Te acuerdas de cuando cambiaste la versión de Firefox por última vez? ¿ y de por qué instalaste ese programa tan raro que parece no servir para nada ? Yo tengo mala memoria, así que uso un cuaderno de bitácora. POR JOSÉ MARÍA RUIZ Y PEDRO ORANTES
C
uaderno de bitácora, fecha estelar 2123….
En todos los libros sobre administración de sistemas se nos recomienda llevar un pequeño cuaderno de bitácora donde ir reflejando las acciones peligrosas que realicemos. De esta manera, se supone, podremos recrear paso a paso los eventos que nos llevaron a un desastre y por tanto ir deshaciéndolos en orden inverso.
La cruda realidad es que no todo el mundo usa dichos cuadernos. Es pesado tener que dejar el teclado y coger el bolígrafo para escribir… ¡a mano! ¿no estábamos en la era de los ordenadores? ¿No íbamos a desterrar el papel? Muchas personas usan un weblog en su propia máquina o en Internet para ir apuntando detalles o noticias que le resultan de interés. Mucha gente incluso publica sus ficheros de configuración, de manera que siempre pueda acceder a ellos.
WWW.LINUX- MAGAZINE.ES
¿Y qué ocurre si sólo lo queremos para nosotros? ¿Y si la máquina a la que estamos accediendo no tiene un servidor web con el software adecuado configurado para tener un weblog? ¿y si no queremos montar tanta parafernalia? Algunas aplicaciones, como KPIM, incorporan ya la opción de llevar un diario personal, pero no funcionan de forma remota a no ser que tengamos una conexión de red con mucho ancho de banda.
Número 11
61
DESARROLLO • Python
¿Qué opciones nos quedan? Podemos volver nuestra mirada a la era antigua de los ordenadores, cuando los interfaces funcionaban exclusivamente desde una consola de texto. Dichos interfaces aún se utilizan en numerosas aplicaciones, la razón es que son mucho más simples de usar. Es más fácil automatizar el pulsar tres veces TAB que mover el ratón y funcionan mejor remotamente, aún con conexiones lentas. Vamos a diseñar y programar un cuaderno de bitácora en Python, que utilizará ncurses para el interfaz texto y dbm para almacenar las entradas por fecha.
Diseño del cuaderno Comencemos nuestro diseño echando un vistazo a las librerías en que nos vamos a basar. ncurses fue desarrollada para abstraer, ocultar y simplificar la gestión de terminales texto. Cada fabricante dotaba a su terminal texto de características distintas a las del resto, forzadas la mayoría de las veces por una feroz competencia. Esto convertía en una tortura el simple hecho de cambiar un terminal por otro, requiriendo la mayoría de las veces la modificación del programa de turno. ncurses permitía realizar programas sin tener en cuenta las diferencias entre los terminales. No sólo eso, sino que además simplificó enormemente la gestión de interfaces de texto como veremos más adelante. dbm es una “base de datos”. Lo pongo entre comillas porque en realidad sólo nos permite almacenar datos, recuperarlos y realizar búsquedas, pero no usando SQL sino llamadas a librerías. dbm es
62
Número 11
una familia de librerías que nos permiten almacenar datos en un fichero y gestionarlos como si fuesen un diccionario o hash en Python. Cada entrada se compone de una clave y un valor asociado. Si no tenemos que realizar búsquedas complejas, dbm se convertirá en nuestro mejor opción. Básicamente tenemos que mostrar un interfaz que divida la pantalla en dos partes. En una deberá mostrar las fechas almacenadas, y debe permitir recorrerlas. En la otra debe mostrar el texto relacionado con la fecha indicada. Las acciones serán: • Navegar entradas. • Crear entrada. • Editar entrada. • Borrar entrada. • Salir. Cada una de las acciones se corresponderá con una combinación de teclas. Comenzaremos creando los objetos que gestionen los datos y posteriormente el interfaz con el usuario.
Almacenamiento de datos Debemos conservar el texto asociado a una fecha y hora en algún sitio. Con la fiebre actual por las bases de datos relacionales pocas veces se menciona la existencia de otras bases de datos que no cumplen el estándar relacional ni SQL. ¿Realmente se necesita un motor relacional y SQL para cualquier cosa que necesitemos almacenar? Por supuesto que no. Desgraciadamente, “cuando sólo tienes un martillo, todo te parecen clavos”. El problema está en la definición de “base de datos”, dbm lo es pero sin mucha sofisticación. Básicamente nos permite almacenar llaves y valores asociados a las mismas, así como recuperar el valor o borrar las llaves, simplemente eso. La librería dbm necesita un fichero donde depositar los datos que se almacenan. Así, tendremos que darle el nombre de un fichero e indicarle cómo queremos que lo trate. Puede abrir el fichero para introducir nuevos datos o crearlo de nuevo, aunque ya exista uno con el mismo nombre.
WWW.LINUX- MAGAZINE.ES
Una vez abierto el fichero, un objeto dbm se comporta como un contenedor cualquiera. Podremos hacer uso de la sintaxis “[]” a la que nos tienen acostumbrados la mayor parte de los lenguajes de programación. Como podemos observar en el Listado 1, el uso de la librería dbm es realmente simple. Se comporta como una lista, con todas sus operaciones. El lector se habrá preguntado al ver el código “¿dónde está el truco? si dbm representa una base de datos ¿por qué puede hacer uso de la sintaxis []”. La respuesta es que en Python la sintaxis “[]” es lo que en inglés se llama “syntatic sugar”. Por traducirlo de alguna manera, viene a decir que es una manera de hacer agradable visualmente (y a nuestros pobres dedos) la llamada a ciertas funciones del lenguaje. ¿Podemos incorporar “[]” a uno de nuestro objetos y hacer que se comporte como una lista? La respuesta es ¡si! y no tiene nada de complicado. Python reserva unas serie de métodos debido a su uso especial, entre ellos están: • def __len__(self) • def __setitem__(self, clave, valor) • def __getitem__(self, clave) • def __delitem__(self, clave)
Listado 1: Ejemplo de uso de DBM 01 >>> import dbm 02 >>> datos = dbm.open('visitantes','c') # crea el fichero 03 >>> datos["Juan Jose"] = "vendra el martes" 04 >>> datos["Juan Jose"] 05 'vendra el martes' 06 >>> datos.close() 07 >>> 08 >>> datos = dbm.open('visitantes') 09 >>> datos["Juan Jose"] 10 'vendra el martes' 11 >>> datos.keys() 12 ['Juan Jose'] 13 >>> for llave in datos.keys(): 14 ... print "["+llave+"] -> " + datos[llave] 15 ... 16 [Juan José] -> vendra el martes 17 >>> datos.close()
Python • DESARROLLO
Estos cuatro métodos los enmascara python posteriormente de la manera mostrada en la Tabla 1. Por tanto podemos enmascarar las acciones de un objeto de manera que se use como si fuese
Listado 2: almacen.py 01 #!/usr/local/bin/python 02 03 import dbm 04 class Almacen: 05 def __init__ (self,nombre): 06 self.bd = dbm.open(nombre,'c') 07 08 def busca_palabra (self, palabra): 09 claves = self.entradas() 10 encontradas = [] 11 12 for clave in claves: 13 contenido = self.contenido(clave) 14 if palabra in contenido: 15 encontradas.push(clave) 16 17 return encontradas 18 19 def entradas (self): 20 a = self.bd.keys() 21 if not a: 22 a = [] 23 return a 24 25 def cierra (self): 26 self.bd.close() 27 28 def __len__(self): 29 return len(self.entradas()) 30 31 32 def __setitem__ (self, clave, valor): 33 self.bd[clave] = valor 34 35 def __getitem__(self,clave): 36 return self.bd[clave] 37 38 def __delitem__(self,clave): 39 del self.bd[clave]
será modal, tendrá un modo de “navegación” y uno de “edición”, al igual que el editor “Vi”. Precisamente “Vi” fue uno de sus primeros usuarios.
Diseño principal Figura 1: Hola Mundo en nuestro primer programa curses.
un diccionario. Y precisamente eso es lo que hacemos con nuestro objeto Almacen que encubre un diccionario, añadiendo nuevas acciones. El lector puede comprobar el código en el Listado 2 (disponible en [1]).
Curses Curses son unas librerías de bajo nivel. Las abstracciones que crean son muy básicas: preparar consola, crear “ventanas” (nada que ver con las gráficas), escribir en esas ventanas, recoger caracteres y poco más. Debido a ello son bastante complicadas de manejar. Hacer cosas vistosas suele llevar mucho código. Por ello nos vamos a centrar en un interfaz sencillo. Nuestro programa
WWW.LINUX- MAGAZINE.ES
Comenzaremos por inicializar curses. Por desgracia, esto también nos hace perder el control de nuestra consola Python, puesto que anula su funcionamiento. Por ello se pide al lector que ejecute todas las acciones relacionadas con curses desde un programa Python ejecutable (recuerda hacer el chmod +x <programa>). Podemos ver un programa que inicializa la consola con curses en el Listado 3. Posteriormente escribimos un “Hola mundo” y se refresca la pantalla, podemos ver el resultado en la Figura 1. Si no refrescamos la pantalla curses no mostrará nada. En el Listado 3 stdscr representa toda la pantalla. Es posible crear subventanas y hacer actualizaciones selectivas como podremos comprobar en el código del programa. Una vez realizadas las operaciones, pasamos a dejar la pantalla en una configuración correcta, acción que realizan las cuatro últimas llamadas a funciones. El objeto diario creará a su vez un objeto GUI, que gestiona el interfaz, y el objeto Almacen que se encarga de gestionar la base de datos. El objeto Almacen es pasado a GUI como
Número 11
63
DESARROLLO • Python
parámetro en su creación. Y la misión de GUI no es otra que al de responder a los eventos que el usuario envíe mediante un bucle infinito.
Dos ventanas Listado 3: “Hola mundo” con curses 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21
64
#!/usr/local/bin/python # -*- coding: ISO8859-1 -*import curses # Inicializamos la pantalla stdscr=curses.initscr() curses.noecho() curses.cbreak() stdscr.keypad(1) # Escribimos algo stdscr.addstr("Hola mundo",0) stdscr.refresh() # Limpiamos la pantalla stdscr.keypad(0) curses.echo() curses.nocbreak() curses.endwin()
Número 11
Nuestro programa va a disponer de dos ventanas. La mayor hará las veces de “tablón” donde podemos ver las anotaciones realizadas por el momento. Podremos desplazarnos arriba y abajo por él. Para indicar qué fecha es la que tenemos seleccionada la distinguiremos iluminándola en negrita y subrayándola. La segunda ventana hará las veces de barra de ayuda y estado. Cuando cambiemos el estado, por ejemplo al editar, se reflejará ahí. Es el mismo modo de trabajo del que hace gala VIM. Las ventanas deben partir la pantalla de manera que no se solapen. La pantalla de un terminal tiene 80 columnas de ancho y 25 filas de alto. Dejaremos una fila abajo, que será la que usemos para mostrar información. El resto de 24 filas se encargarán de mostrar las entradas almacenadas.
Desplazamiento por las entradas La ventana de datos nos permitirá desplazarnos arriba y abajo por las entra-
WWW.LINUX- MAGAZINE.ES
das. ¿Cómo podemos conseguir recrear este movimiento? La solución es capturando las teclas de los cursores “arriba” y “abajo”. Cuando una de ellas se pulse incrementaremos o decrementaremos una variable que establece la posición la entrada seleccionada en cada momento y volveremos a dibujar, o escribir, la pantalla de datos. Pero no lo haremos de cualquier forma. Queremos que el efecto sea vistoso, así que siempre intentaremos mostrar un número fijo de entradas encima y debajo de la nuestra. Como tenemos la posición de la entrada seleccionada, o resaltada, con un sencillo cálculo podemos seleccionar qué entradas mostraremos. Las listas en Python tienen una funcionalidad que nos será muy útil. Usando la sintaxis lista[comienzo:fin] podemos extraer los elementos entre comienzo y fin formando una nueva lista. Simplemente tenemos que seleccionar aquellos que estén a una distancia fija del seleccionado y usarlos como comienzo y fin. Podemos ver el código que realiza esta acción en el método dibuja_fechas(self) de GUI en el Listado 6 (disponible en [1]).
Listado 4: Ejemplo de uso de Textbox 01 02 03 04 05 06 07 08 09 10 11
#!/usr/local/bin/python # -*- coding: ISO8859-1 -*import curses import curses.textpad ncols, nlines = 9, 4 uly, ulx = 15, 20 stdscr.addstr(uly-2, ulx, "Use Ctrl-G to end editing.") win = curses.newwin(nlines, ncols, uly, ulx) rectangle(stdscr, uly-1, ulx-1, uly + nlines, ulx + ncols) stdscr.refresh() return Textbox(win).edit()
12 13 14 15 str = curses.wrapper(test_editbox) 16 print 'Contents of text box:', repr(str)
Python • DESARROLLO
Figura 2: Un cuadro de texto curses.
Textbox Python provee de una herramienta muy útil para la edición de textos dentro de curses. Desgraciadamente, a pesar de su potencia posee algunos inconvenientes de los que hablaremos más tarde. Esta herramienta es el objeto Textbox que se encuentra en la librería curses.textpad. Textbox nos permite editar un texto dentro de una ventana y poder utilizar muchas de las combinaciones de teclas que soporta EMACS. Así por ejemplo con “control+e” iremos al final de la linea que estemos editando y
con “control+d” borraremos el carácter sobre el que nos encontremos. Utilizaremos un Textbox para recoger el texto que el usuario quiera introducir. Desgraciadamente posee una limitación debido su diseño. Si cuando estamos editando el texto, pulsamos repetidas veces el cursor izquierdo desplazándonos hasta dar con el borde de la ventana, el programa fallará. El soporte de curses de Python se basa en las librerías originales escritas en C, y como ya hemos dicho son de muy bajo nivel. La implementación de Textbox es realmente básica y no controla todas las circunstancias. Aún así nos hará un buen servicio. Un ejemplo de utilización de Textbox aparece en su propio código fuente, ver Listado 4 y Figura 2. Este código genera un rectángulo con bordes (usando la función rectangle de curses.textpad) y nos solicita que escribamos algo en el mismo. Para acabar debemos pulsar con-
Figura 3: Inserción de una nueva entrada en la bitácora.
trol+g, mostrándonos lo escrito más abajo. Si lo probamos comprobaremos que no podemos salir del rectángulo al editar. En la Figura 3 vemos cómo hemos integrado el Textbox en nuestro programa. Hemos aumentado el número de columnas para permitir introducir mensajes más largos.
El gestor de comandos Existen muchas maneras de hacer un gestor de comandos. La más típica con-
DESARROLLO • Python
>>> class Persona: ... def habla(self): ... print "hola mundo" ... >>>
Listado 5: Método ejecuta_comando(self,ch) 01 def ejecuta_commando(self, ch): 02 "Procesa las teclas recibidas" 03 if curses.ascii.isprint(ch): 04 for comando in self.comandos: 05 if comando[0] == chr(ch): 06 (getattr(self,comando[1]))() 07 break 08 else: 09 if ch in (curses.ascii.DLE, curses.KEY_UP): 10 self.incr_pos_fechas() 11 self.redibuja() 12 elif ch in (curses.ascii.SO, curses.KEY_DOWN): 13 self.decr_pos_fechas() 14 self.redibuja() 15 self.refresca() 16 return 1
66
Número 11
Podemos invocar el método habla usando una cadena con su nombre mediante el método getattr(), que precisa de la instancia del objeto y el método a invocar. Devuelve, por así decirlo, una referencia al método en cuestión que funciona de la misma manera. Como dicen por ahí, “una imagen vale más que mil palabras”: >>> pepe = Persona() >>> pepe.habla() hola mundo >>> (getattr(pepe, "habla"))() hola mundo >>>
Lo que haremos será crear una lista de listas, cada una de las cuales contendrá dos elementos. El primero será un carácter y el segundo el nombre del método a invocar. De esta manera, nuestro gestor de comandos se reduce a un código que recibe un carácter, lo compara con el primer elemento de cada entrada en su lista de comandos y, si encuentra una coincidencia, ejecuta el comando asociado. Ver Listado 5. Como podemos ver en el código, se comprueba si el carácter recibido es “imprimible” y posteriormente se busca en la lista de comandos. En caso de coincidencia se ejecuta usando como instancia self. De esta manera, es posible manipular el funcionamiento según qué caracteres responde el programa sin tener que modificar el código fuente. Esto nos da mucha flexibilidad y es menos propenso a errores.
Uso del programa
Figura 4: Vista de la bitácora con varias entradas.
será el mostrado en la Figura 4. Cuando se pulsa “n” se crea una nueva entrada con la fecha y la hora, si existe ya una entrada con la fecha y la hora no se hace nada. Con “d” se elimina una entrada y con “e” se edita. Cuando se está introduciendo un texto, al pulsar “control+g” se guarda. Para salir se pulsa “q” y con los cursores “arriba” y “abajo” nos desplazamos por el programa. Al fichero de almacenado se le ha dado el nombre “diario.db”. Si no existe se crea, y si existe se emplea el existente.
Conclusión Aunque el uso de curses puede resultar engorroso, Python nos provee de una librería que las manipula dentro de su instalación base. Una vez realizado el programa sabremos que cualquiera que instale Python podrá hacer uso de él. Siempre es posible realizar una serie de objetos que lleven a cabo tareas de más alto nivel. Existen librerías que nos proporcionan barras menús y widgets más avanzados. Pero siempre es bueno estar lo más cerca posible del estándar. La próxima vez que tengas que hacer un interfaz en modo texto puede que fuese una buena idea darle una oportu■ nidad a curses.
El uso del programa se ha hecho lo más simple posible, el aspecto del mismo
TABLA 1: ALGUNOS MÉTODOS ESPECIALES DE PYTHON __len__(self) devuelve la longitud de nuestro objeto. Se invoca cuando se ejecuta len(miObjeto) __setitem(self,clave,valor) se corresponde con la asignación en un diccionario: miObjeto["Algo"] = "otra cosa" __getitem(self, clave) es el equivalente miObjeto["Algo"] y devuelve la información almacenada en “Algo”. __delitem(self, clave) es del miObjeto["Algo"] y se corresponde con la eliminación de esa entrada.
WWW.LINUX- MAGAZINE.ES
RECURSOS [1] Descargas de los listados de este artículo: http://www.linux-magazine.es/ Magazine/Downloads/11
LOS AUTORES
siste en hacer una sentencia switch o gran cantidad de ifs anidados, cada uno de los cuales responde ante una tecla o combinación distinta. El código generado llega a convertirse en ilegible en cuanto el número de comandos sobrepasa los diez. Hay una manera mucho más elegante de atacar este problema, pero no es tan fácil hacer uso de ella en todos los lenguajes. Afortunadamente Python nos permite una implementación muy sencilla. La idea es la siguiente. Cada comando estará asociado a una serie de acciones a realizar. Englobaremos las acciones vinculadas con cada comando a un método de nuestro objeto “GUI”. Hasta aquí todo es bastante normal. Ahora viene la magia. Python nos permite invocar métodos de objetos usando su nombre. Si declaramos el objeto persona:
José María Ruiz actualmente está realizando el Proyecto Fin de Carrera de Ingeniería Técnica en Informática de Sistemas mientras estudia Física. Lleva 8 años usando y desarrollando software libre y, desde hace dos, se está especializando en FreeBSD. Pedro Orantes está cursando 3º de Ingeniería Técnica en Informática de Sistemas y en sus ratos libres toca en un grupo de música.
La Columna de Charly • ADMINISTRACIÓN
El día a día del Administrador de Sistemas: Portfwd
DIRECCIONES NUEVAS Las conexiones entrantes TCP no siempre terminan donde debieran. Un redireccionador configurable gratuito arroja la basura digital hacia otra dirección. POR CHARLY KÜHNAST
H
ace poco hablábamos sobre Rinetd, un redireccionador de TCP. Rinetd es poco exigente, de confianza y fácil de configurar, pero carece de características avanzadas. Este mes examinaré Portfwd, una herramienta que incluye algunos de aquellos rasgos que fallan en Rinetd. Portfwd (Port Forwarding Daemon, [1]) tiene forma de fichero tar de 116K, que se puede compilar e instalar de la forma normal: ./configure; make; make install
o parecido. El binario, de fundamental importancia, llegó a ocultarse en el directorio src tras teclear make install. Un enlace simbólico (ln -s /usr/local/portfwd-0.27 /src/portfwd/usr/bin/portfwd) se encargó de esto.
Sencillito Primero vamos a comprobar cómo Portfwd maneja el cambio de dirección simple. Queremos reenviar cualquier paquete TCP que llega por el puerto 80 al servidor en 10.20.30.40. El fichero de configuración se parece a esto:
SYSADMIN X Window............................. 68 El sistema X Window.
user nobody group nobody tcp { 80 { => 10.20.30.40:80 } }
Las llaves externas contienen el puerto donde Portfwd recibe la conexión entrante y las llaves internas se encargan de redirigirla. Por supuesto, los mejores Rinetd también podrían haber manejado esto. Pero, me dí cuenta de que era capaz de configurar múltiples tarjetas para que utilizaran Portfwd como un simple balanceador de carga roundrobin. Cambié el primer ejemplo para reenviar las conexiones entrantes del puerto 80 a dos servidores, 10.20.30.40 y 10.20.30.41, de la siguiente forma: tcp { 80 { => 10.20.30.40:80, 10.20.30.41:80 } }
Si mi equipo está conectado a dos o más redes o posee dos o más direcciones de red (multihomed), puedo utilizar bind-adress para especificar la interfaz. Para mi tercer experimento, le asigné las direcciones 192.168.1.1 y 192.168.1.2 a mi equipo. Quería presentar cualquier conexión entrante para el puerto 25 a los otros dos servidores: bind-address 192.168.1.1 tcp { 25 { => 10.20.30.40:25 } } bind-address 192.168.1.2 tcp { 25 { => 10.20.30.41:25 } }
udp { 53 { => U dns.example.com:53 } }
Frágil Portfwd también me proporciona la posibilidad de definir un caso especial para servidores con conexiones que tienden a romperse con bastante frecuencia. La clave fragile le dice a Portfwd que sea compasivo en el caso de errores de conexiones – y que lo vuelva a intentar con más frecuencia de lo habitual: fragile tcp { 80 { => U dialup.example.com:8080 } }
Este es el tipo de configuración que me gusta utilizar cuando quiero que una máquina central parezca un monstruo de carga de funciones del exterior, aunque en realidad la mayor parte de esta funcionalidad se descargue en máquinas separadas según como dicten las necesi■ dades.
RECURSOS
TCP Hijacking………….......... 71 Previniendo ataques TCP.
datagramas UDP. La siguiente regla le indica a Portfwd que acepte peticiones DNS y reenvíe estas peticiones al servidor zdns.example.com:
A diferencia de Rinetd, Portfwd no sólo reenvía conexiones TCP sino también
WWW.LINUX-MAGAZINE.ES
[1] Portfwd: http://portfwd.sf.net
Número 11
67
ADMINISTRACIÓN • X Window
Taller del Administrador: El Sistema X Window
EXPEDIENTE X
Gracias a la detección automática del hardware, los administradores de hoy en día raras veces tienen que configurar un sistema X Window manualmente. Pero si se quieren aprovechar al máximo las excelentes características de red de X11 y afinar su configuración, será conveniente que se tenga algún conocimiento de cómo funciona. POR MARC ANDRÉ SELIG
L
inux continúa avanzando en el terreno de los escritorios XWindows. Uno de los factores principales en el éxito de Linux es la facilidad de uso tanto del escritorio como de las aplicaciones. Esta abundancia de software, sin embargo, significa que los administradores deben pasar más tiempo instalando las herramientas subyacentes que se encargan de los controles del ratón y del teclado, de los gráficos y de la salida por pantalla de estas aplicaciones. El servidor X es el componente que se encarga de casi todas las representaciones gráficas en Linux. Las principales excepciones a este punto son la consola y la biblioteca SVGA-Lib [2], una biblioteca que soporta la representación directa de imágenes en los sistemas Linux. El servidor X, por sí mismo, proporciona rutinas primitivas para mostrar jerarquías de ventanas. El servidor X también proporciona aceleración hardware, además de ofrecer componentes para el control del teclado y el ratón. Si no conoce las arquitecturas cliente/ servidor, el protocolo X puede que le resulte algo confuso al principio, ya que el servidor X11 a menudo se encuentra situado en una pequeña estación de trabajo bajo el escritorio del usuario y los
68
Número 11
clientes residen en grandes máquinas en el centro de datos.
Intercambio de Roles del Cliente y el Servidor En el oscuro mundo de las X, el servidor es un programa que interactúa directamente con el usuario. Representa los widgets (elementos gráficos) en la pantalla y se encarga de aceptar la entrada. Los clientes usan el servidor en vez de representar ellos mismos los gráficos en la pantalla. Es decir, un cliente normalmente no necesitará acceder directamente al hardware gráfico, sino que simplemente le pedirá al servidor que realice las funciones gráficas. Los clientes X típicos suelen ser los procesadores de texto, los navegadores de Internet o los emuladores de terminales. Si el cliente y el servidor se ejecutan en máquinas diferentes, el servidor X está casi siempre ubicado en la máquina del escritorio. Este es también el caso de los thin clients basados en Linux, que incluyen un servidor X completo. Realmente no importa mucho donde resida el cliente. Teniendo una conexión de red rápida, el cliente puede residir en el centro de datos de la habitación de al lado o en la otra punta del mundo. A
WWW.LINUX-MAGAZINE.ES
menudo los clientes residen en la misma máquina que el servidor. Los denominados sistemas kioscos que ejecutan una única aplicación – un Cybercafé, por ejemplo, o un visor de imágenes de rayos X – son un buen ejemplo de aplicaciones útiles de un servidor X con un único cliente. Dos comandos son lo único que se necesita para instalar un sistema kiosco. El administrador primero tiene que ejecutar el servidor, y luego el cliente o los clientes requeridos. En el siguiente comando, la opción :3 estipula que el servidor se ejecutará en el cuarto (se empieza a contar desde cero) display local (y no en el cuarto monitor): X :3 < /dev/null > U /dev/null 2>&1 & exec firefox --display :3 &
El programa xinit facilita la sintaxis encargándose de ejecutar el servidor X. Las siguientes líneas ejecutan el servidor X y luego el Xterm, a menos que .xinitrc en el directorio home del usuario tenga una configuración diferente: xinit -fn 9x13 -- :3 > U /dev/null 2>&1 &
X Window • ADMINISTRACIÓN
clients” o las máquinas antiguas los utilizan para ahorrar espacio y recursos. Tan sólo se necesitan tres líneas para ejecutar una sesión X con TWM y Firefox: X :3 < /dev/null > U /dev/null 2>&1 & twm -display :3 & exec firefox --display :3 &
Figura 1: Aunque el administrador de ventanas TWM proporciona una funcionalidad mínima, es fácil de usar y conveniente.
El fichero /etc/X11/XF86Config-4 es el núcleo de cualquier entorno X. Dependiendo de la variante del servidor X que se tenga y de la distribución, este fichero podría llamarse xorg.conf o algo similar. El fichero contiene la configuración de todos los dispositivos que cooperan con el servidor X. Como Linux ha conseguido progresos sorprendentes con la detección del hardware, los administradores normalmente no necesitan modificar la configuración del servidor y si lo hacen, los cambios son mínimos. Los programas que automáticamente crean este fichero son
Listado 1: Importar Cookies 01 #mas:~$ xauth nextract myxkey :0 02 #mas:~$ chmod 640 myxkey 03 #mas:~$ su unsafe 04 #Password: 05 #unsafe:/home/mas$ firefox 06 #Xlib: connection to ":0.0" refused by server 07 #Xlib: No protocol specified 08 # 09 #(firefox-bin:3086):Gtk-WARNING **: cannot open display: :0 10 #unsafe:/home/mas$ xauth nmerge myxkey 11 #unsafe:/home/mas$ firefox
xf86cfg, xf86config, o para Suse, Sax o Sax 2. El fichero de configuración no es sólo específico para el ordenador y el adaptador gráfico, sino también para el monitor. Antes de cambiar el monitor o el adaptador gráfico, hay que asegurarse de que se tiene un método alternativo para acceder al ordenador, (a través de la red o de la consola), en el caso de que las opciones no sean correctas y el servidor X no se ejecute.
Gestores de Ventanas Por sí solo, el servidor X no es muy amigable, especialmente si se desea trabajar con varios programas al mismo tiempo. Se necesita un componente que estructure de forma conveniente el uso del ordenador. El gestor de ventanas añade la barra de títulos a las ventanas individualmente, con el objeto de poderlas identificar fácilmente, y un marco para permitir que los usuarios puedan escalar las ventanas. La Figura 1 muestra TWM, uno de los gestores de ventanas más antiguos. TWM permite a los usuarios mover y solapar las ventanas e incluso ordenarlas automáticamente. También implementa un sistema sencillo de menús que posibilita a los usuarios a ejecutar los programas y minimizarlos o escalar las ventanas. Los gestores de ventanas reconocidos como TWM o FVWM son sencillos, eficientes y muy útiles. Hoy en día los “thin
WWW.LINUX-MAGAZINE.ES
En la actualidad, la mayoría de los usuarios prefieren los entornos de escritorio completos como KDE o Gnome. Estos sistemas aportan herramientas, utilidades y extensas bibliotecas, además del gestor de ventanas. Las bibliotecas ayudan a simplificar la programación de la GUI, proporcionándole a los programas un aspecto uniforme y optimizando la comunicación entre aplicaciones. Los entornos de escritorio modernos añaden un gestor de sesiones al gestor de ventanas. El gestor de sesiones restaura la sesión previa, ejecutando los programas que se usaron la última vez y colocando las ventanas donde estaban. Tanto Gnome como KDE tienen potentes gestores de sesiones.
Login Gráfico El servidor X maneja la entrada y la salida por pantalla, y el gestor de ventanas facilita el uso de múltiples ventanas. Esto tan sólo deja un deseo en la lista de los usuarios, la posibilidad de poder conectarse al sistema en modo gráfico. No hay muchos usuarios hoy en día que deseen ejecutar una sesión basada en GUI usando comandos de la consola. Un gestor de visualización es una característica bastante deseada. Se encarga de llamar al servidor X y abre un cuadro de diálogo como el mostrado en la Figura 2. Después de autenticar al usuario, el gestor de visualización ejecuta automáticamente el entorno configurado. Si se necesita, puede hacer uso de las capacidades de red del sistema X11, ya que el gestor de visualización no tiene porqué estar en la misma máquina que el servidor X. El gestor de visualización se ejecuta como un simple cliente. El servidor X puede entonces usar el protocolo XDMCP para comunicarse con el gestor de visualización en la otra máquina. El administrador bien puede asignar un equipo como la máquina del gestor de visualización, o bien el servidor X puede
Número 11
69
ADMINISTRACIÓN • X Window
retransmitir paquetes a través de la LAN para localizar automáticamente un gestor de visualización adecuado. El comando es como el siguiente: X -broadcast. Para ejecutar el gestor de visualización en un ordenador dedicado hay que teclear X -query host para ejecutar el servidor X. Todas las distribuciones modernas de Linux instalan ahora un gestor de visualización y una configuración junto con X11. La forma más fácil de averiguar dónde están estos componentes es ejecutando locate [3], especificando el nombre del componente del gestor que se está buscando. Los componentes de XDM, del alternativo de KDE (KDM) (Figura 2) y del Gnome (GDM) están ampliamente difundidos.
Controlando la Visualización Los ordenadores no están restringidos a ejecutar un único servidor X. Con sus múltiples terminales virtuales, Linux puede simultáneamente soportar múltiples servidores. Aplicaciones de software X especiales pueden incluso ejecutarse sin monitor y teclado, que es importante para los servidores terminales. Como el cliente y el servidor se ejecutan independientemente, e incluso no tienen porqué residir en la misma máquina, es importante para los clientes conocer a qué display enviar su salida. La variable de entorno DISPLAY se encarga de especificar un destino para los datos que se vayan a visualizar. La variable contiene un hostname, un número de display y opcionalmente un número de pantalla: (Host):Display(.Screen). El número de la pantalla normalmente no hace falta, excepto en los entornos Xinerama donde un único servidor X controla múltiples displays. Si el hostname no se especifica en DISPLAY, el cliente automáticamente usa la máquina local, usando sockets Unix en vez de puertos TCP para comu-
Listado 2: Tunel X11 sobre SSH 01 #mas@ishi:~$ ssh -X kanat.pair.com 02 #[...] 03 #mas@kanat:$ echo $DISPLAY 04 #localhost:10.0 05 #mas@kanat:$ firefox &
70
Número 11
nicarse (como en una conexión de red de X11). Cuando un usuario se conecta por medio del gestor de visualización, las variables de entorno se establecen automáticamente. Para ejecutar automáticamente un programa X, primero hay que definir una variable. La siguiente sintaxis ejecuta el navegador Firefox en la máquina local; el servidor X envía la salida de Firefox a un equipo denominado sun14:
Figura 2: KDM de KDE tiene un menú que permite a los usuarios seleccionar un escritorio o apagar el sistema.
export DISPLAY=sun14:0 firefox &
Si se está usando X11 en una red, hay dos consideraciones importantes que se deben tener en cuenta. Primero, los servidores no aceptan conexiones de clientes arbitrarios ya que el acceso por parte de clientes arbitrarios provocaría riesgos de seguridad. Segundo, el flujo de datos de la sesión X, por defecto, no está encriptada. Los atacantes podrían fácilmente fisgar los protocolos y hacerse con la sesión. Casi todos los servidores X modernos aplican controles de acceso por defecto. Hay dos sistemas alternativos para el control de acceso: Xhost permite acceso a máquinas dedicadas, lo que no lo hace muy seguro; Xauth usa cookies criptográficas y soporta controles muy exhaustivos. Estos esquemas de protección son una parte importante del entorno X, ya que los clientes X pueden inducir al servidor y a otros clientes a usar una gran variedad de protocolos. Por ejemplo, la entrada por teclado es muy sencilla. Hay que asegurarse de permitir solamente a los programas en los que se confía el acceso al servidor X.
Control de Acceso Basado en Cookies La herramienta Xauth almacena sus cookies en un fichero denominado .Xauthority, en el directorio home del usuario. Cuando un usuario ejecuta un sistema cliente, el cliente analiza el fichero .Xauthority y utiliza la cookie apropiada para autenticarse con el servidor X. Si se está ejecutando una sesión en otra máquina o si se va a utilizar una credencial diferente, habrá que importar la cookie a .Xauthority primero a (véase el Listado 1). xauth nextract almacena la
WWW.LINUX-MAGAZINE.ES
cookie en un fichero y xauth nmerge importa el fichero a .Xauthority. La variante Xhost se utiliza en entornos donde se trabaja con una sola máquina para deshabilitar totalmente el control de acceso. El comando xhost + permite a cualquier cliente en cualquier equipo acceder al display. El comando xhost devuelve el control de acceso al cliente. Xauth sólo controla a quién se le permite acceder al servidor X. No protege la transmisión de datos en absoluto. Si se usa el mecanismo del Listado 1 para ejecutar clientes en máquinas remotas, debería estar al tanto de que un atacante podría fisgar sus datos. El popular protocolo SSH ayuda a establecer un túnel para el protocolo X a través de una conexión encriptada. El programa proporciona encriptación, establece las variables de entorno con los valores apropiados y utiliza Xauth para crear un fichero .Xauthority en la máquina remota.
Estableciendo un Túnel con SSH Para montar el túnel, hay que establecer a yes la variable X11Fordwarding en /etc/ssh/sshd_config y una vez hecho esto, los usuarios pueden poner el flag -X en la línea de comandos para crear un túnel con X11 (Listado 2). SSH proporciona un servidor X virtual en la máquina remota (normalmente :10); y sus clientes usan el display del servidor X ■ local.
RECURSOS [1] X.org: http://www.x.org/ [2] SVGA-Lib: http://www.svgalib.org [3] Marc André Selig, “Admin Workshop: Finding Files”: Linux Magazine 02/ 05, p. 62.
TCP HIjacking • ADMINISTRACIÓN
Entendiendo y Evitando los Ataques TCP
PROTECCIÓN
Es bastante sencillo cortar una conexión TCP con un ataque RST y este riesgo aumenta con aplicaciones que requieren conexiones largas, como las VPNs, las transferencias de zonas DNS y BGP. Vamos a describir cómo puede ocurrir un ataque TCP y mostraremos algunas técnicas simples para proteger nuestra red. POR CHRISTOPH WEGENER Y WILHELM DOLLE
D
esde 1985, los expertos saben que el protocolo TCP (Transmission Control Protocol) no es seguro. Los atacantes pueden cortar las conexiones, corromperlas o incluso secuestrar una de ellas solamente conociendo algunos detalles básicos: la dirección IP origen, la dirección de destino y un número de secuencia válido. Si un atacante es capaz de fisgar la conexión, entonces la batalla está perdida antes de que comience. Si por el contrario, no puede hacerlo, porque no controle una máquina en la ruta entre el cliente y el servidor, la cosa empieza a complicarse. Sin embargo, se ha sobreestimado el esfuerzo requerido para controlar la conexión y a veces, trucos como “TCP windowing” hacen que la manipulación remota sea incluso más sencilla. Uno de los problemas más complicados es el de averiguar la secuencia correcta de números. Esta es la única vía para convencer a la máquina destino de que los datagramas IP que se han inyectado pertenecen realmente a la conexión
TCP actual. Si un atacante tiene los valores correctos, no hay nada que le impida inyectar datos en la conexión existente, ganando de este modo acceso no autorizado a la información, o cortando una conexión existente mediante la transmisión de un paquete con el flag Reset (RST) activado. En la mayoría de los casos un reset no es más que una molestia menor; esto es cierto si lo que se está haciendo es navegar por la web. En otras situaciones puede ocasionar problemas mayores. Por ejemplo, interrupciones repetidas a una conexión BGP (Border Gateway Protocol) entre dos routers principales de Internet. Pero un ataque de tipo DoS podría potencialmente ser una amenaza mayor para las redes de pequeñas empresas. Imagínese a un hacker cortando compras online durante un período largo de tiempo; las pérdidas podrían ser considerables [1].
Antecedentes Necesitamos tener algo de información previa sobre TCP para poder entender las
WWW.LINUX-MAGAZINE.ES
vulnerabilidades. El protocolo fue especificado en el RFC 793 [2], que se publicó en 1981. Cada segmento TCP empieza con una cabecera, que contiene los puertos origen y destino (ambos de 16 bits con valores entre 0 y 65535), junto con otros parámetros importantes como los números de secuencia y de reconocimiento, ambos de 32 bits. Además contiene una serie de flags de control (SYN, ACK, PSH, URG, RST y FIN) y el tamaño de la ventana de recepción. Este último es crítico para el tema que estamos tratando (Figura 1). Una conexión establecida es identificada de forma unívoca por una cuádrupla (grupo de cuatro) consistente en la IP y el puerto de origen y la IP y el puerto de destino. El número de secuencia identifica la posición del segmento dentro del flujo de datos perteneciente a la conexión para cada byte. Cualquiera que tenga los valores de la cuádrupla y pueda averiguar el número de secuencia válido posee toda la información necesaria para hacerse con la conexión. No importa donde esté el ata-
Número 11
71
ADMINISTRACIÓN • TCP Hijacking
cante, simplemente tiene que generar un paquete y enviarlo al destino.
Números Aleatorios En principio, un número de secuencia puede tener uno de los 232 valores posibles. Averiguar el número correcto, para capturar un paquete e inyectarlo en la conexión en el momento adecuado, apenas supone un problema. Sin embargo, estos se pueden agravar si el emisor y el receptor no usan números de secuencia aleatorios iniciales (ISN) cuando se establece la conexión TCP. Conforme la conexión progresa, el número de secuencia se incrementa para cada byte transmitido. El puerto de destino normalmente está determinado por la aplicación y el servicio que se encuentra a la escucha en el puerto, el puerto de origen puede tener un valor entre 0 y 65535. El hecho de que los 1024 primeros puertos de una máquina Unix estén reservados para procesos privilegiados no es importante para esta evaluación. Durante bastante tiempo se pensaba que un atacante tenía que probar los 232 números de secuencia, multiplicado por los 216 posibles números de puertos origen, para poder atacar una conexión TCP sin tener que fisgonearla. Desafortunadamente, la mayoría de los sistemas operativos no seleccionan el puerto de origen aleatoriamente; más adelante se comentará más. El principal problema con TCP tiene que ver con el mecanismo de las ventanas. Los paquetes se pueden desordenar los unos con respectos a los otros en Internet. La ventana de recepción permite al receptor reordenar los paquetes en la secuencia correcta y confirmar la recepción de un grupo de segmentos. El glosario del RFC 793 explica el mecanismo de la ventana como sigue: “Esto representa el número de secuencia que el TCP local (receptor) espera recibir. Además, el TCP local considera que los segmentos estén solapados en el rango RCV.NXT a RCV.NXT + RCV.WND – 1 y contengan datos o información de control. Los segmentos con números de secuencia que estén completamente fuera de este rango serán considerados duplicados y se descartarán”.
Cerrando la Ventana Si el número de secuencia de un paquete está dentro de la ventana de recepción, TCP aceptará y procesará el paquete. Esto
72
Número 11
reduce considerablemente el número de averiguaciones que un atacante tendría que realizar; en el caso de números de secuencia, el número de averiguaciones se reduce drásticamente de 232 a 232/tamaño de la ventana. Dependiendo del sistema operativo, el tamaño de la ventana puede estar entre 65535 bytes (Windows XP Professional
con el SP2) y 5840 bytes (Linux kernel 2.4 y 2.6). La Tabla 1 contiene más valores para el tamaño inicial de la ventana. El tamaño de la ventana también varía dependiendo de la aplicación. Cisco Telnet usa un tamaño de 4192 bytes y el valor para Cisco BGP es de 16384 bytes. No importa cómo se mire, la ventana de recepción reducirá el número de
Términos Importantes Número de reconocimiento: Esto es un elemento de 32-bit de la cabecera del segmento TCP que contiene el número de secuencia que el remitente del segmento de datos espera en la cabecera del segmento de TCP del siguiente datagrama IP. BGP: El Border Gateway Protocol describe cómo los routers se comunican el uno al otro la disponibilidad de las rutas de comunicación. La fuerza del protocolo BGP está en que esto puede combinar varias rutas de encaminamiento opcionales para formar una sola tabla de encaminamiento. Bits de Control: Estas etiquetas son parte de la cabecera del segmento TCP. Hay seis bits de control: • SYN: Petición de sincronización al principio de la conexión. • ACK: Este paquete confirma que el remitente ha recibido todos los paquetes cuyo número de secuencia es más pequeño que el valor especificado en el campo de número de reconocimiento. • FIN: Todos los datos han sido enviados (finalizado; terminación de la conexión regular). • RST: Cancelar/Resetear la conexión. • PSH: Un flag de empuje le indica a la pila TCP que limpie todos los búferes y transmita cualquier dato pendiente o reenvíe aquellos datos a la aplicación apropiada. • URG: Si el flag URG se activa, el contenido del campo de la cabecera Urgente indica los datos que el receptor le gustaría recibir. ICMP: El Protocolo de Control de Mensajes en Internet (definido en el RFC 792) se utiliza principalmente para resolver problemas y cambios en la información Looking Glass: Este servicio permite a los usuarios averiguar si un servidor está disponible y cómo de buena es la conexión [6]. Esto se hace interrogando a los
WWW.LINUX-MAGAZINE.ES
routers BGP. El servicio Looking Glass proporciona a los usuarios una descripción clara de la calidad de la conexión. Ping y traceroute pueden proporcionar información adicional sobre los sistemas intermedios. Firma MD5: MD5 calcula una única clave hash para un conjunto de datos arbitrarios. Si se utiliza una contraseña para calcular el hash, MD5 puede generar una firma (hash firmada). Número de Secuencia: Es un elemento del segmento de cabecera TCP de 32 bit que especifica el número del primer octeto (byte) en el segmento de datos. El receptor utiliza el número de secuencia para comprobar el orden y la validez de los paquetes entrantes. Esto protege al receptor contra ataques de inyección o de repetición. Sin embargo, esta característica está diseñada para neutralizar el error aleatorio y no proporciona mucha protección contra paquetes manipulados. TCP: El Protocolo de Control de la Transmisión (definido en RFC 793) controla la transferencia de datos entre el emisor y el receptor. A diferencia del User Datagram Protocol (UDP, definido en RFC 768), TCP está orientado a la conexión y se asegura que todos los datos lleguen incorruptos y en el orden apropiado. Tamaño de la Ventana: Esta es el elemento de la cabecera del segmento TCP de 16 bit que especifica el número de octetos de datos (bytes) que el remitente del segmento TCP aceptará como válidos. Escalado de la Ventana: Un acercamiento para optimizar el funcionamiento de conexiones de banda ancha o conexiones con altos tiempos de latencia. El Escalado de Ventana implica el aumento del tamaño de la ventana para permitir a las entidades tratar los paquetes que llegan tarde y transmitir más datos sin esperar la confirmación.
TCP HIjacking • ADMINISTRACIÓN
Figura 1: Cada segmento TCP comienza con su cabecera, seguida de la parte útil. En combinación con las direcciones IP, el número de puerto sólo identifica la conexión, y la secuencia de números indica el lugar del paquete en el hilo de datos.
números de secuencia que un atacante tiene que investigar. Si se toma un sistema Windows XP, el número cae a 65000. Dicho de otro modo, un atacante necesitaría generar 65000 paquetes de ataque para inyectar un paquete RST válido y de este modo cortar una conexión. Esto es un número considerablemente bajo. Los sistemas buenos de detección de intrusos (IDS) se dispararán debido a la cantidad de paquetes RST, pero las redes sin esta característica no se enterarán de este tráfico de paquetes adicional.
Altamente Escalable Las cosas incluso pueden empeorar si las partes soportan el escalado de ventanas en una conexión. Esta extensión TCP (RFC 1323, [3]) aumenta la probabilidad de encontrar un número de secuencia correcto en un período corto de tiempo. El escalado de ventanas está diseñado para conexiones que necesitan un tamaño de ventana mayor que el estándar debido a los altos anchos de banda o a la latencia. Para permitir que cualquiera pueda transmitir sin interrupciones y sin tener que esperar a reconocimientos, esta técnica escala el tamaño de la ventana de recepción a un máximo de 14 bits (Microsoft Windows). Esto es un factor de 16384. La ventana de recepción tan sólo se restringe a un valor de 65535 bytes, como se especifica en el RFC 793, si ninguno de los extremos de la conexión usa el escalado de ventana. El atacante aún tendrá que saltar un obstáculo más: La cuádrupla formada por Dirección IP/Puerto de origen y destino. Las direcciones IP no presentan ningún problema (los atacantes conocen a quién están atacando) y el puerto de destino es muy sencillo. Es más complicado
averiguar el puerto de origen, que en teoría podría ser cualquier valor entre 0 y 65535. El rango es mucho más pequeño en las aplicaciones prácticas con puertos por debajo de 1024, y ciertos sistemas operativos especifican umbrales reservados para tareas especiales. Un sistema Linux (con kernel 2.4 o 2.6) y con al menos 128Mb de RAM usa puertos origen dentro del rango 32768 y 61000 (o incluso menos, si el sistema no llega a los 128Mb de memoria). El kernel normalmente usa los puertos por encima de 61000 para el enmascaramiento. Se pueden comprobar estos valores en /proc/sys/net/ipv4/ip_local_range y cambiarlos usando sysctl. Por ejemplo: sysctl -w net.ipv4.ip_local_range=“32768 61000”.
Sin Adivinanzas Pero hay más a favor de los atacantes, las 28232 opciones no están aleatoriamente distribuidas; el kernel las asigna basándose en un esquema específico. Esta es una de las revelaciones en los Avisos de Paul Watsons [4]. Los atacantes no tendrán problemas en predecir los puertos de origen. Tan sólo hay algunas excepciones, como OpenBSD, que asigna puertos de origen aleatorios con las molestias que ello conlleva para los hackers. Por ejemplo, Windows XP empieza
con el puerto origen 1050 para la primera conexión e incrementa este número para cada conexión consecutiva. Linux (Fedora Core 3 con kernel 2.6.9 en este caso) empieza con 32768 y de nuevo los incrementa. La Figura 2a muestra un sistema Linux con kernel 2.6 (puertos 32771 a 32777). Compárese con la Figura 2b, que muestra OpenBSD 3.6 con asignación aleatoria de puertos origen. Los sistemas Cisco incrementan el puerto en 512 para cada conexión nueva, pero esto no hace que el mecanismo sea más seguro. Los atacantes no tienen que averiguar el puerto origen si ya conocen el número de la conexión actual de la máquina de la víctima. Todo lo que normalmente necesita un atacante es empezar con el valor inicial conocido y continuar, digamos, 50 puertos. Los hackers no tendrán ningún problema, en absoluto, para identificar el sistema operativo. De hecho, la predicción de los puertos no es ningún obstáculo.
Técnicas de Ataques Muchos de los ataques en las conexiones TCP se basan en las vulnerabilidades descritas anteriormente. Uno de los ataques se basa en la inyección de bits de control RST (Reset). Según el RFC 793, este flag le indica al destino que cierre la conexión directamente. El destino evalúa el número de secuencia y posiblemente el número de reconocimiento para decidir si debe aceptar o ignorar el comando de reset. Al destino no se le permite enviar una respuesta a este RST. Lo importante sobre la especificación es que el destino siempre tiene que verificar el RST basándose en la validez del número de secuencia. El destino sólo cierra la conexión si el número de secuencia está dentro de la ventana de recepción. Aunque el destino podría evaluar el número de reconocimiento, no tiene por qué hacerlo. El experto en seguridad Paul
Tabla 1: Tamaño Inicial de Ventanas Sistema Operativo Linux Kernel 2.4 Linux Kernel 2.6 OpenBSD 3.6 Windows 2000 SP1, SP2 Windows 2000 SP3, SP4 Windows 2000 MS05-019 Windows XP Professional, SP2
WWW.LINUX-MAGAZINE.ES
Tamaño de Ventana 5840 Bytes 5840 Bytes 16,384 Bytes 17,520 Bytes 65,535 Bytes 17,520 Bytes 65,535 Bytes
Número 11
73
ADMINISTRACIÓN • TCP Hijacking
Figura 2a: El comando netstat -nt muestra las conexiones TCP para la máquina local. El número de puerto se muestra como un simple esquema. El kernel incrementa el número para cada conexión.
Figura 2b: OpenBSD le pone las cosas más difíciles a los atacantes. Esto incluye asignación de puertos aleatorios para cada conexión, lo que fuerza al atacante a adivinar el número mejor que a predecirlo.
Watson (véase el cuadro titulado “Historia”) investigó un gran número de pilas TCP y descubrió que la mayoría de ellas simplemente ignoraron el número de reconocimiento [4]. Un paquete RST recibido dentro de la ventana permitida, con los datos que coincidan con la conexión siempre provocará la finalización de esta. Las conexiones largas, como las conexiones BGP entre routers, son particularmente vulnerables a los ataques de reset. Por un lado, un atacante tiene tiempo suficiente para insertar paquetes manipulados, y por el otro, el daño ocasionado por DoS podría ser extremo. Los routers tienen que reconfigurar sus tablas de vecindad y esto podría llevarles unos pocos minutos en condiciones reales.
Fallecimiento Síncrono Lo que es menos obvio es que el flag SYN es capaz de provocar la caída de una conexión. El RFC 793 especifica que cuando el flag SYN se establece al comienzo de una conexión, el campo del número de secuencia debe contener el valor de comienzo para la secuencia de números que va a ser usada posteriormente. Si un paquete SYN llega después en la conexión, el RFC 793 indica que es un error. Como consecuencia, el receptor se ve forzado a cancelar la conexión inmediatamente, transmitiendo un paquete reset.
74
Número 11
Esto es una forma que tiene TCP para evitar iniciar una misma conexión dos veces, cuando uno de los extremos reinicia, por ejemplo. Estableciendo un flag RST o SYN en un datagrama IP con un número de secuencia válido se tiene el mismo efecto: se cierra la conexión. Al contrario que un paquete RST, la máquina responderá al paquete SYN transmitiendo un RST. Existe un término técnico a este comportamiento: se dice que el receptor refleja el paquete. Y esto abre la puerta a otro ataque DoS. El atacante puede saturar el ancho de banda de la víctima. Esta técnica tiene éxito particularmente cuando se usa sobre líneas ADSL. La víctima recibe los datos más rápidamente que lo que es capaz de transmitir en respuesta. Los ataques RST y SYN no usan la parte de datos de los datagramas IP. Hay una tercera técnica que inyecta datos en una conexión existente. El atacante bien podría inyectar datos arbitrariamente que corrompan la conexión o bien podría manipular los datos cuidadosamente para provocar una condición de error. E incluso la víctima podría no darse cuenta de la manipulación.
Aplicaciones Prácticas Para probar estas teorías [4] bajo condiciones reales, Paul Watson desarrolló la herramienta reset_tcp.c, publicada en Mayo del 2004 [12]. Paul se dio cuenta
WWW.LINUX-MAGAZINE.ES
que con una conexión DSL simple tenía todo lo necesario para averiguar un número de secuencia que podría tirar una conexión en unos once minutos, con un tamaño de ventana de 65535 bytes y 50 puertos de origen a investigar. Con una ventana de recepción de sólo 16.384 bytes, el proceso tardó 45 minutos. El programa requiere la “Libnet Packet Construction Library” [13] de Mike D. Schiffman. Hay que especificar la propia dirección MAC y la dirección MAC del destino antes de compilar el programa. Esta última es normalmente la de la puerta de enlace por defecto o el interfaz de la máquina de la víctima, si da la casualidad de que esté dentro de la misma red local. En la llamada, el programa espera unos cuantos parámetros: reset_tcp interface sourceIP sourceport targetIP targetport windowsize. La interfaz es la tarjeta de red por la que se mandarán los paquetes RST para atacar a la máquina de la víctima.
Cambiando el Tamaño de la Ventana El tamaño de la ventana de recepción TCP no es fijo. Los administradores pueden modificar los valores por defecto de tamaño en la mayoría de los sistemas operativos. Cisco IOS: En el modo permitido, el tamaño de la ventana puede configurarse introduciendo ip tcp window-size windowsize. Linux kernel 2.4 y 2.5 con IPv4: Modifica los valores de /proc/sys/net/ ipv4/tcp_rmem y /proc/sys/net/ipv4/ wmem o introduzca valores para tcp_rmem y tcp_wmem en /etc/ sysctl.conf y luego llame a sysclt -p. Para más detalle diríjase al HOWTO que puede encontrar en [18]. Sun Solaris: En los sistemas Solaris el comando ndd tiene el truco: ndd -set /dev/tcp tcp_xmit_hiwat windowsize y ndd -set /dev/tcp tcp_recv_hiwat windowsize. Windows 2000 y XP: Modifique los valores para GlobalMaxTcpWindowSize (teclee REG_DWORD) y TcpWindowSize (Teclee REG_DWORD) en la entrada del registro HKEY_LOCAL_MACHINE\SYSTEM\Curr entControlSet\Services\Tcpip\Parameter s. Para más detalle diríjase al HOWTO que puede encontrar en [17].
TCP HIjacking • ADMINISTRACIÓN
La primera prueba práctitiempo suficiente para comca fue hacer que la herraprobar unos cuantos puermienta tirara una conexión tos de origen. SSH entre dos ordenadores Protección Activa Linux (Figura 3). Ambas máquinas usaban conexioDebido al alto nivel de nes T-Com T-DSL 1000 a exposición y al bajo riesgo Internet (velocidad de subipara un atacante, es imporda de 128Kbps). Para esta tante tomar medidas preprueba, supusimos que el ventivas. Hay varias soluatacante ya conocía el puerciones para mitigar el efecto origen. El tamaño del to de este problema al que paquete RST era de 40 bytes nos hemos referido ante(para las cabeceras IP y riormente. Como regla TCP) o si se prefiere, 320 general, se evitará la publibits. cación de información Supongamos que el tamasobre las conexiones y la ño de la ventana era de 5840 Figura 3: Ethereal monitoriza una ataque TCP sobre una conexión SSH. El configuración de la red en ambas direcciones. atacante transmite un gran número de segmentos TCP con secuencias de tanto como sea posible Basándonos en esta teoría, números crecientes (ventana de arriba, cerca del final de la línea: Seq=….) (BGP; véase el cuadro podemos ver cuanto tardó La vista detallada (centro) muestra claramente lo que el flag reset ha “Términos Importantes” y en tirar la conexión: El valor estado haciendo. [6]). máximo para el número de Muchos sistemas operatisecuencia, dividido por el tamaño de la vos permiten a los administradores estaventana. Se repitieron las pruebas para el ventana, multiplicado por el tamaño de blecer el tamaño de la ventana de recepejemplo del usuario ejecutando top sobre un paquete y dividido por la tasa de ción (véase el cuadro “Cambiando el una conexión SSH y se midió un tiempo transferencia. Si se realizan los cálculos: tamaño de la Ventana”); un valor pequede 5 minutos y 45 segundos para un 4294967296 / 5840 * 320 bits / 128000 ño hace que el sistema sea más difícil de tamaño de ventana de 16.000, suponienbps, nos da 1840 segundos ó 30 minutos sabotear. Si fuese posible se debería trado conocido el puerto de origen. con 40 segundos. bajar sin el escalado de ventanas. Como También realizamos otro conjunto de Si se supone que todos los intentos tieresultado, hay menos números de experimentos basándonos en los ejemnen la misma probabilidad de acertar, el secuencia que casen con la ventana de plos de Watson de una conexión BGP: atacante tan sólo tardará la mitad de este recepción y el atacante necesitará ser un ordenador Linux ( con kernel 2.4, tiempo, es decir, 15 minutos con 20 más preciso, lo que le hará consumir más tamaño de ventana inicial de 5840) segundos. Los resultados de la prueba tiempo y ancho de banda. usando BGP para comunicarse con un confirmaron esta suposición: Se registró Sin embargo, hay límites para esta router Cisco en el otro extremo (tamaño un valor medio de 932 segundos (15 clase de ajustes. Si el valor que se selecinicial de ventana 16.384). El tamaño de minutos con 32 segundos) para una serie ciona es demasiado bajo, el rendimiento la ventana cambiaba, como se esperade 20 pruebas que se realizaron. Hay que de la red se verá afectado. TCP se ejecuta ba, cuando el tráfico se modificaba. Al decir que había que comprobar 50 puermás lentamente porque el software del principio de la conexión, BGP necesitatos de origen (en un ordenador con unas protocolo tiene que esperar los reconociba transmitir grandes volúmenes de cuantas conexiones de red); el tiempo mientos en vez de transmitir. Y tiene que datos; en nuestro escenario, el tamaño requerido para realizar el ataque sería de transmitir más reconocimientos (ACKs); de la ventana creció en ambas direcciounas 13 horas. Esto supone un gran por consiguiente, la sobrecarga aumenta. nes a 16.616 en unos pocos minutos esfuerzo, incluso para una conexión SSH Veamos un ejemplo extremo: Si se tiene antes de estabilizarse en ese nivel. El larga. un tamaño de ventana de 10, se requiere tiempo medio teórico para un ataque un paquete ACK de 40 bytes para los 10 sería de 4294967296 / 16616 * 320 Bit / Ventanas Variables bytes de datos, (20 bytes de cabecera IP, 128.000 Bits / 2 = 5 minutos con 23 20 bytes de cabecera TCP). La mayoría de los sistemas operativos segundos. modifican el tamaño de la ventana en El valor de 5 minutos con 39 segundos Bien Filtrado una conexión activa para reflejar los que registramos para esta prueba confirvolúmenes del tráfico. Por ejemplo, ma la teoría. Las conexiones BGP norLas reglas de filtrado proporcionan proLinux incrementa el tamaño de la ventamalmente se mantienen por semanas o tección más granular contra los ataques na para una conexión SSH que está transincluso meses; suele tardarse más o reset en las puertas de enlace. Los routers firiendo la salida del comando top a un menos un minuto en establecer una deberían aceptar el tráfico entrante y valor mayor de 16.000. Si el atacante conexión y los routers BGP no abren saliente con direcciones IP de origen que sabe que la víctima usa la conexión para muchas conexiones de red cuando se les coincidan con la interfaz del router desde transferir grandes volúmenes de datos, el deja. Esto los convierte en objetivos fácidonde llegó el paquete. Esto reduce el atacante podría intuir el tamaño de la les para los atacantes que dispongan del riesgo de IP spoofing y debería ser mate-
WWW.LINUX-MAGAZINE.ES
Número 11
75
ADMINISTRACIÓN • TCP Hijacking
con un ACK a un máximo de 10 ria de estudio en cualquier curso de paquetes RST en un período de 5 configuración de routers. segundos. Los filtros ingress y egress protegen El borrador recomienda verificar la la red interna contra paquetes manivalidez de los SYN entrantes transmipulados desde fuera que tienen directiendo un ACK. Todo este comportaciones internas, y también protegen el miento es compatible con el comporresto de Internet contra los atacantes tamiento original descrito en el RFC procedentes de la red interna. Los 793. El borrador usa las característiadministradores cuidadosos añadirán cas de TCP para combatir las vulnemás reglas de filtros que sólo acepten rabilidades de TCP. El daño por un tráfico BGP procedente de routers ataque DoS es aún real, a pesar de conocidos. Esto hace que los ataques todas las mejoras. a las conexiones BGP sean casi impoLinux tiene otra técnica para impesibles. dir los ataques: el parche de seguriOtra clase de protección se presentó Figura 4: La pila modificada basada en [10] requiere dad GR [11] se asegura que el kernel en 1988: el RFC 2385 describe firmas que la secuencia de números RST coincida exacta2.4 y 2.6 asigne puertos de origen basadas en MD5 para conexiones TCP mente. arbitrarios. Esta característica viene [7]. Esta solución crea códigos hash de OpenBSD, como la mayoría de las MD5 para las contraseñas y todos los conexión pronto se saturaría con tráfico características de los otros parches. campos de las cabeceras TCP críticos. de control y esto bloquearía en poco Nuestros experimentos confirman que el Esto permite al receptor detectar la manitiempo la conexión ADSL. Para evitarlo, parche realmente impide los ataques pulación de los paquetes. Desde luego, ■ se sugiere que cada equipo respondiera remotos. las contraseñas deben ser robustas para impedir que los rompedores de contraseñas, como bgpcrack [8], haciendo uso de RECURSOS un diccionario, reviente la firma. Hay [11] GR Security: http://www.grsecurity. [1] Instituto de Seguridad de Equipos: una guía útil de todas estas vulnerabilidanet http:// www.gocsi.com des, junto con otras y sus posibles solu[12] TCP Connection Reset Remote [2] RFC 793, “Transmission Control ciones en [9]. Protocol”: http://rfc.net/rfc793.html
Respuesta Cauta En Abril de 2004, el IETF publicó un borrador en Internet [10] sugiriendo cambios en el comportamiento de respuesta de TCP, de modo que una instancia de TCP sólo reaccionaría inmediatamente a los flags RST entrantes si coincidieran exactamente con el número de secuencia esperado. Si el número simplemente estuviera dentro de la ventana de recepción, pero no fuera el próximo número esperado, la instancia respondería activando un flag ACK y descartando el segmento que acabara de recibir. La recepción de un paquete ACK podría entonces ser respondido enviando un segundo RST (Figura 4). La idea detrás de esto es que un atacante no vería el paquete ACK. Si el paquete RST fuera originado por un emisor genuino, el emisor podría responder al ACK y cerrar la conexión de forma adecuada en el segundo intento. Sin embargo, este comportamiento nuevo presenta una nueva vulnerabilidad: en una guerra de ACK, un atacante podría inundar a una víctima con paquetes RST. Si la víctima respondiera a cada RST, el ancho de banda de la
76
Número 11
[3] RFC 1323, “TCP Extensions for High Performance”: http://rfc.net/rfc1323. html [4] Open Source Vulnerability Database, Paul (Tony) Watson, “Slipping in the Window: TCP Reset Attacks”: http:// www.osvdb.org/reference/ SlippingInTheWindow_v1. 0. ppt [5] Open Source Vulnerability Database, Paul (Tony) Watson, “TCP Reset Spoofing”: http:// www. osvdb. org/ 4030 [6] IPv4 Looking Glass Sites: http:// www. bgp4. net/ lg [7] RFC 2385, “Protection of BGP Sessions via the TCP MD5 Signature Option”: http:// rfc. net/ rfc2385. html [8] BGP Crack: http://www.cisco.com/ security_services/ciag/tools/ bgpcrack-2.1.tar.gz [9] Sean Convery y Matthew Franz, “BGP Vulnerability Testing: Separating Fact from FUD v1.1”: http:// www.blackhat. com/ presentations/ bh-usa- 03/ bh-us-03-convery-franz-v3. pdf [10] Internet Draft, “Improving TCP’s Robustness to Blind In-Window Attacks”: http:// ietfreport. isoc. org/ idref/ draft-ietf-tcpm-tcpsecure/
WWW.LINUX-MAGAZINE.ES
Exploit: http://www.frsirt.com/ exploits/04232004.tcp-exploit.php
[13] Libnet: http://www.packetfactory.net/ projects/libnet/ [14] Robert T. Morris, “A Weakness in the 4.2 BSD Unix TCP/ IP Software”: http://pdos.csail.mit.edu/~rtm/papers/ 117.pdf [15] Laurent Joncheray, “Simple Active Attack Against TCP”: http://www. usenix.org/publications/library/ proceedings/security95/full_papers/ joncheray.ps [16] Cert Advisory CA-2001-09, “Statistical Weaknesses in TCP/ IP Initial Sequence Numbers”: http://www. cert. org/advisories/CA-2001-09. html [17] Dave MacDonald und Warren Barkley, “Microsoft Windows 2000 TCP/ IP Implementation Details”: http:// www. microsoft. com/ technet/ itsolutions/ network/ deploy/ depovg/ tcpip2k. mspx [18] Oskar Andreasson, “Ipsysctl tutorial – Chapter 3, IPv4 variable reference”: http://ipsysctl-tutorial.frozentux.net/ chunkyhtml/ tcpvariables.html [19] Cert Advisory CA-1995-01, “IP Spoofing Attacks and Hijacked Terminal Connections”: http://www. cert.org/advisories/CA-1995-01.html
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 apasionantes nuevas aplicaciones.
78
KTools: Componer mensajes de texto en un teléfono móvil no es fácil. Una aplicación denominada KMobileTools nos ayuda a manejar nuestras llamadas y mensajes SMS.
80
Desktopía Los iconos de escritorio no son la única manera de lanzar programas. De hecho, a menudo es preferible un panel que no esté oculto por un montón de ventanas desordenadas. Tablaunch es un atractivo y flexible programa de acceso rápido para el escritorio de Linux.
82
Celestia Un viaje por el espacio, la última frontera, resulta demasiado caro para unas vacaciones. Si un viaje a la Luna no está al alcance de tu bolsillo, ¿por qué no probar con Celestia, el programa libre que te trae la galaxia hasta la comodidad de tu casa.
Educación
86
Dr. Geo es un programa de geometría euclídea interactiva, intuitivo y perfectamente usable en clases de primaria, pero con interesantes funcionalidades de programación, macros, uso de scripts y de figuras Scheme. Y ahora (versión 1.1.0) también incluye animaciones.
Línea de comandos
90
Las venerables herramientas Unix de calendario y fecha ayudan a los usuarios a mantenerse al tanto de la hora y de la fecha. Se puede incluso cambiar la hora del sistema con un simple comando de la shell.
WWW.LINUX- MAGAZINE.COM
ISSUE 52 MARCH 2005
77
LINUX USER • KTools: KMobile Tools
Acceso al Teléfono Móvil desde KDE
MOVILIZANDO KDE
Componer mensajes de texto en un teléfono móvil no es fácil. Una aplicación denominada KMobileTools le ayuda a manejar sus llamadas y mensajes SMS. POR MARCEL HILZINGER
S
i eres alguien que no utiliza el teléfono móvil para enviar mensajes cortos porque es demasiado complicado teclear mensajes con el diminuto teclado de los móviles, échele un vistazo a KMobileTools, un programa KDE que llama por su teléfono, organiza los mensajes cortos, acepta las llamadas y muestra el estado de la batería.
Configurar el Teléfono Cuando se lanza por primera vez KMobileTools, una pantalla de bienvenida le indica que necesita configurar el programa para su teléfono. Tras hacer clic en OK, no se preocupe por el mensaje de error que aparece, le indica que su teléfono ha fallado al inicializar. Requiere confirmar los dos avisos antes de ver la ventana de KMobileTools Setup. Para empezar sin tantos sobresaltos, seleccione Device | Mobile phone y especifique el fichero de dispositivo para su teléfono (Figura 1). Dependiendo del tipo de conexión, puede cambiar la configuración por defecto de /dev/mobile a uno de los siguientes: • /dev/rfcomm0 (Bluetooth) • /dev/ttyACM0 (USB)
78
Número 11
• /dev/ircomm0 (Infrarrojos) • /dev/ttyS0 (COM1) Puede establecer un enlace simbólico al fichero del dispositivo concreto, como en ln -s /dev/right_port/dev/ mobile. Tras seleccionar el puerto correcto, haga clic en el icono del teléfono y seleccione el fabricante y el modelo concreto. Si no está seguro que tipo de teléfono tiene, simplemente seleccione Generic GSM Device. Cuando finalice, haga clic en OK y KMobileTools le mostrará la fuerza de la señal del teléfono y el estado de la batería (Figura 2). Si no es así, necesitará revisar la configuración.
micrófono, puede utilizar KMobileTools para realizar llamadas. Para hacerlo, simplemente introduzca el número al que quiere llamar en el cuadro de texto vacío y haga clic en Dial. Para seleccionar un número de teléfono de la lista de contactos, haga clic en Phone book. En el cuadro de diálogo que aparece, busque la entrada All phone contacts debajo de Phone book source y haga clic en Update. Esto le indica a KMobileTools que analice las direcciones de su agenda y el listín de KDE para almacenar estos contactos bajo .kde/share/
Marcar con Manos Libres Si su teléfono soporta el marcado con manos libres o tiene un altavoz externo y
KTools En esta columna presentamos herramientas, mes a mes, que han demostrado especial utilidad al trabajar con KDE, resolviendo problemas ignorados deliberadamente, o algunas otras pequeñas cosas que, como en la vida misma, una vez descubiertas se nos hacen imprescindibles.
WWW.LINUX- MAGAZINE.ES
Figura 1: Utilice el diálogo de KMobileTools Configure para configurar su teléfono y su agenda.
KTools: KMobile Tools • LINUX USER
apps/kmobiletools/. A pesar del mensaje que indica lo contrario (ver Figura 3), este paso no sincroniza inmediatamente su teléfono. En nuestro test utilizamos un Sony Ericsson k700i, la barra de progreso tarda sobre un minuto en finalizar el proceso antes de que la herramienta KDE decida despertar de nuevo; asegúrese de no salir de este paso demasiado pronto. Para llamar a un contacto, haga doble clic en la entrada apropiada y luego haga clic en Dial. Para iniciar una búsqueda rápida de un contacto específico, puede teclear el nombre en la caja de búsqueda al final de la ventana. Para aceptar una llamada entrante, haga clic en el botón Answer. Para finalizar la llamada o rechazar una conexión, haga clic en Hang up. Además de proporcionarle acceso normal a los contactos, el programa KDE también lista las últimas llamadas o las perdidas. Para ver la lista, seleccione Settings | General settings y haga clic en el icono de la agenda del teléfono en la ventana KMobileTools Setup. Para indicarle a KMobileTools que muestre la lista de fuente de datos haga clic en el bóton Update abajo a la derecha. Luego, añada a la lista de llamadas perdidas a sus contactos, chequee la entrada MC y haga clic para confirmar. La próxima vez que haga clic en el icono del listín telefónico en la ventana principal de KMobileTools, la nueva entrada MC debería estar en la lista.
Mensajes Cortos KMobileTools puede leer y escribir mensajes cortos. Dependiendo del tipo de teléfono que tenga, esta característica podría estar en las primeras fases de desarrollo. Para componer un nuevo mensaje corto, haga clic en New SMS e introduzca el número en SMS Target Number. Alternativamente, puede seleccionar el destinatario haciendo clic en Select number. Finalmente, necesita añadir el número a la lista de destinatarios haciendo clic en Add target a la lista. Utilice la parte inferior de la ventana para componer su mensaje. KMobileTools automáticamente selecciona el tipo de codificación para SMS. Es conveniente evitar caracteres no estándares en el SMS para ahorrar espacio. KMobileTools soporta una longitud máxima de 160 caracteres para mensajes cortos, pero utilizando caracteres no estándares se reducirá a 70 caracteres.
Cuando termine de componer el mensaje, haga clic en Send SMS para enviarlo. Esta opción no está soportada por algunos teléfonos, tiene sentido tomar una vía alternativa Save SMS | Search SMS hasta que esté seguro de que funciona. Para nuevos dispositivos, puede necesitar configurar la memoria de SMS. Para hacerlo, seleccione Update below Settings | General settings | SMS y compruebe la ranura adecuada. Los usuarios con teléfonos Motorola que no soporten la configuración por defecto necesitarán chequear Enable Mode 2 setting. Cuando haga clic en Search SMS en la ventana principal de KMobileTools, el programa mostrará una lista de mensajes cortos. Para reenviar un mensaje, seleccione el SMS y haga clic en Send. Si quiere liberar unos cuantos kbytes de la memoria de su teléfono sin perder sus mensajes SMS, ¿por qué no almacena sus mensajes en el PC? Para hacerlo, haga clic en Save SMS list y luego especifique un lugar y un nombre de fichero. KMobileTools almacena mensajes cortos en un fichero de texto normal. Tras almacenar el mensaje en su PC, puede limpiar la memoria de mensajes cortos haciendo clic en la herramienta KDE.
Notificador Si tiene una conexión Bluetooth (ver artículo “GPRS en Linux” en esta revista), preferirá deshabilitar el tono de llamada del teléfono y dejarlo en el bolsillo. Para ayudarle a no perder llamadas y mensajes cortos, KMobileTools tiene un número de funciones de notificación. Para configurarlas, seleccione Settings | Configure Notification. Puede asignarle seis tipos de notificaciones distintas para lo siguiente: • Llamadas entrantes • Nuevo SMS • Batería del teléfono cargada • Batería del teléfono descargada Por defecto, KMobileTools emite un sonido para cada suceso y muestra un mensaje en la barra de inicio rápido de KDE.
Figura 2: La ventana principal de KMobileTools muestra la fuerza de la señal y el estado de la batería. Puede usar el cuadro de entrada para hacer una llamada.
Si quiere seguirle el rastro a sus llamadas, puede decirle a KMobileTools que las guarde en un fichero de registro. Para hacerlo, cree un fichero de texto e introduzca la ruta completa al fichero en Write to Logfile. Puede usar el comando tail -f /path/to/file.txt para monitorizar el fichero. Desafortunadamente, el programa sólo almacena la fecha y la hora de cada llamada, no el número de teléfono. La característica Run program proporciona a los usuarios algunas opciones interesantes. Por ejemplo, podría usar un comando como kdialog -msgbox “Hola, tienes una llamada” para añadir tu propio mensaje o utilizar llamadas DCOP para los programas KDE, o tan sólo ejecutar un script con comandos AT para rechazar llamadas después de las 9.00 pm.
Competidor El programa Wammu tiene características similares a KMobileTools. (Ver el artículo Wammu en esta revista). Wammu está basado en el motor de la herramienta Gammu de la línea de comandos y es un derivado de la herramienta pionera de teléfonos móviles, Gnokii. Como los usuarios de KDE están interesados en las opciones que Gammu les proporciona, el proyecto KMobileTools está planteándose si soportar el motor Gammu en su próximo lanzamiento. Para más detalles, vaya a ■ la página web del proyecto en [1].
RECURSOS Figura 3: KMobileTools lee las entradas en la agenda de direcciones de KDE, las entradas de la tarjeta SIM y los contactos.
WWW.LINUX- MAGAZINE.ES
[1] Página web del proyecto: http:// kmobiletools.berlios.de
Número 11
79
LINUX USER • deskTOPia: tablaunch
Acceso rápido para el escritorio
PULSE EL BOTÓN
Los iconos de escritorio no son la única manera de lanzar programas. De hecho, a menudo es preferible un panel que no esté oculto por un montón de ventanas desordenadas. Tablaunch es un atractivo y flexible programa de acceso rápido para el escritorio de Linux. POR ANDREA MÜLLER
L
os paneles incluidos en los principales entornos son vistosas herramientas de utilidad universal llenas de funcionalidades como paginadores, menús y relojes. Esto era demasiado para el desarrollador D. Lam, que prefería un gestor de ventanas más simple. No le atraía nada la idea de abarrotar su máquina con las librerías de KDE o Gnome. Cuando estaba buscando una alternativa, D. Lam se topó con YeahLaunch, el lanzador perteneciente al gestor de ventanas YeahWM [1]. Se trata de un panel que consume pocos recursos, y que se oculta en segundo plano cuando no lo necesitamos. La única desventaja, desde el punto de vista de D.Lam, era la apariencia sosa de YeahLaunch. Esto le llevó a desenfundar
80
Número 11
su editor y a desarrollar un nuevo panel basado en YeahLaunch, al que llamó Tablaunch [2]. Aunque Tablaunch sigue siendo poco devorador de recursos, el nuevo panel tiene unos efectos ópticos enormemente mejorados y se han añadido opciones como el zoom que se activa cuando pasamos el puntero sobre un icono. Pero si preferimos un comportamiento más formal, Tablaunch sigue siendo una opción interesante. Si se le pide, nos ofrece unos simples botones en lugar de iconos, con lo que hasta el más estricto de los puristas quedará complacido.
Instalación Antes de que empecemos a trabajar con Tablaunch, tendremos que compilar la aplicación desde el código fuente. Al
WWW.LINUX- MAGAZINE.ES
contrario que la mayoría de las aplicaciones Tablaunch se distribuye con un script de instalación que se encarga del trabajo sucio. Tras descomprimir el archivo, nos ubicamos en el directorio tablaunch-0.6 recién creado. Nótese que el instalador no nos pide la contraseña de root, por lo que tendremos que ejecutar su para poder iniciar el script como root. Como alternativa podemos instalar Tablaunch de manera local en nuestro directorio de usuario. Cuando ejecutamos el script, tecleando ./install.sh, se nos pregunta si queremos instalar Tablaunch desde cero o borrar una versión ya instalada. Pulsamos 1 para pasar a la siguiente cuestión, donde se nos pregunta por la librería gráfica a utilizar. Hay dos opciones, imlib e imlib2. Está última nos dará mejores resultados si no tenemos iconos de diferentes tamaños para el programa lanzador, ya que el efecto zoom de imlib tiende a granular las imágenes. La última pregunta que nos hace el script es relativa al directorio de instalación. Pulsamos 1 para copiar el programa a /home/username/bin o 2 para una instalación global en el directorio /usr/local/bin. Tras esta última pregunta, el instalador ejecuta nuestro compilador, copiando el software al directorio elegido.
Primeras Impresiones. No es necesario estudiar minuciosamente la documentación o modificar los ficheros de configuración para hacernos una idea inicial del programa. El directorio examples en la carpeta del código fuente tiene cuatro scripts de ejemplo con los que se inicia Tablaunch con varias opciones, ofreciendo al usuario una introducción al funcionamiento básico del programa. Los iconos definidos en el archivo de configuración se ubican en el directorio icons. Si nos vamos al directorio de ejemplos y tecleamos ./tablauncher-buttons.sh,
deskTOPia: tablaunch • LINUX USER
Tablaunch usa esta información como una indicación cuando posamos el Figura 1: Tablauncher dispone tanto de botones simratón sobre un icono. ples, de iconos animados, así como de accesos rápiSimplemente debemos dos. sustituir “comando” con la sintaxis para el programa Tablaunch arranca en la parte superior que queramos. Sólo usaremos de la ventana y ofrece una vista combicomillas si el comando comprende nada. El programa tiene cuatro iconos ya espacios en blanco, lo que ocurrirá preparados que inician Konqueror, siempre en el caso de que tengaOpenOffice, xterm y la calculadora xcalc, mos que pasarle parámetros al además de una colección de botones programa. Figura 2: El script tablauncher-bottom sitúa los simples (véase Figura 1). Pulsando en el Las entradas icono e icono_granaccesos en la parte inferior de la pantalla y usa un primer botón, llamado Juggle, se ejecuta de son opcionales. Si no especifisegundo plano transparente. xlock para que bloquee la pantalla y camos una imagen Tablaunch usa muestre un salvapantallas del paquete unos recuadros con el nombre del promite fijar el color del primer plano. El XScreensaver. grama. Si deseamos tener algo más colométodo para cambiar el fondo de los Cuando llevamos el ratón al centro de rido, podemos pasarle el nombre de una consejos es similar: simplemente tecleala pantalla, el panel se oculta automátiimagen. Puede ser una buena idea guarmos -bg. El comando showrgb | less nos camente en segundo plano. Tenemos dar las imágenes en $HOME/.icons, ya mostrará los nombres de color que que llegar a la parte superior de la ventaque allí es donde Tablaunch las busca entiende el sistema. na para que reaparezca. Además de esta por defecto. Para mejorar el efecto zoom, Las opciones -sfg y -pfg definen los variante por defecto, tenemos también el también podemos tener disponibles imácolores de los botones, y ambas esperan script tablauncher-iconhome que pone genes más grandes: con 32x32 píxeles el nombre de un color como argumento. igualmente el panel en la parte superior está bien para iconos estándar, pero para Si preferimos no mostrar los accesos en de la ventana, pero nos muestra un iconos con zoom es preferible que sean la parte superior izquierda de la pantalla, esquema de colores en rosa chillón. Los de 48x48 píxeles. Si tenemos instalado podemos usar un comando como fondos de los iconos son transparentes KDE en nuestro equipo, encontraremos tablaunch -ignoreXRM -x 100 para en este modo, con lo que el efecto zoom una colección de fantásticas imágenes en moverlo 100 píxeles a la derecha, por para activar iconos es extremadamente los subdirectorios que cuelgan de ejemplo. Si los iconos no nos dan pistas realista. Tablauncher usa colores menos /usr/share/icons. Si tenemos Suse Linux, suficientes para averiguar qué programas chillones cuando ejecutamos el script el lugar adecuado para buscar es están detrás, podemos indicarle al protablauncher-bottom. Como sugiere el /opt/kde3/share/icons. La siguiente grama que muestre los bocadillos con nombre, el lanzador se esconde velozentrada: consejos de manera permanente. Este mente por la parte de abajo de la pantatexto se muestra en los accesos justo lla (véase Figura 2). Los puristas querrán Thunderbird "thunderbird" U encima de los iconos. Si preferimos que echar un vistazo al tablaunchnoicons, thunderbird_small.png U Tablaunch desaparezca con un poco más que propone unos accesos consistentes thunderbird_big.png de retardo que por defecto, podemos con unos sencillos botones azules. indicarle la opción -d y especificar el crea un icono para el programa de correo retardo en segundos. --dock seguido de Accesos individuales Thunderbird, por ejemplo. bottom sitúa Tablaunch en el borde infeNo importa lo bonito que sean los ejemrior de la pantalla. Multitud de Opciones plos: no queremos limitarnos a las apliPodemos usar varias combinaciones caciones predefinidas por el desarrollaCon el fichero de configuración sólo de opciones, las cuales pueden volverse dor. Tablauncher analiza su fichero de hemos visto una parte de la película. La tan complicadas que no vamos a querer configuración .tablaunch en el directorio flexibilidad de Tablaunch reside en los teclearlas cada vez que ejecutemos de usuario o en un archivo arbitrario parámetros del programa, que nos perTablaunch. En este caso, podemos para descubrir qué iconos debería mosmiten fijar el color para los bocadillos seguir el ejemplo del desarrollador y trar. Si usamos una ruta no estándar para con consejos o las transparencias de los añadir los parámetros a un script de el fichero de configuración, tendremos iconos. Podemos listar estas opciones, arranque que inicie la versión persona■ que especificar -c e indicarle el archivo al junto a una breve explicación, tecleando lizada del panel. iniciar el programa. El formato del architablaunch -help. Para impedir que la convo de configuración es extremadamente figuración se sobrescriba por un archivo RECURSOS simple. Se incluye una línea con el .Xressources de nuestra distribución, y siguiente formato para cada acceso: evitar así que Tablauncher se cuelgue, [1] YeahWM: http://phrat.de/ deberíamos añadir el parámetro [2] Tablauncher: http://sourceforge.net/ Nombre "comando" iconoU --ignoreXRM al arrancar el programa. -fg projects/tablaunch icono_grande seguido de un nombre de color nos per-
WWW.LINUX- MAGAZINE.ES
Número 11
81
LINUX USER • Celestia
De excursión excursión por por la la galaxia galaxia con con Celestia. Celestia. De
VIAJE A LAS ESTRELLAS Un viaje por el espacio, la última frontera, resulta demasiado caro para unas cortas vacaciones. Si un viaje a la Luna no está al alcance de tu bolsillo, ¿por qué no probar con Celestia, el programa libre que te trae la galaxia hasta la comodidad de tu casa? POR KRISTIAN KISSLING.
P
uedes estar suspendido por encima de la estación espacial ISS mirando cómo la Tierra gira bajo tus pies. Puedes ser testigo de excepción de cuando la sonda Cassini cruza los anillos de Saturno. Puedes ver rayos C brillar en la oscuridad cerca de la Puerta de Tanhauser. Puedes visitar los límites exteriores de la galaxia o el territorio Klingon (Figura 1). ¡Celestia te llevará hasta cada uno de estos sitios!
Una odisea en el espacio Chris Laurel desarrolló Celestia en el año 2001 para atravesar y explorar la galaxia en 3D. En los años posteriores, incontables voluntarios en Internet han ayudado a que Celestia siga creciendo. Actualmente, Celestia es uno de esos raros ejemplos de programas que, no sólo son valiosos desde el punto de vista educacional, sino que al mismo tiempo, son igualmente sobresalientes desde el punto de vista del entretenimiento. Es realmente divertido, y lo que es aún mejor, continua creciendo. El paquete estándar viene con una colección completa de objetos espaciales, y
82
Número 11
además, puedes añadirle sondas adicionales, sistemas solares remotos y naves espaciales extraterrestres simplemente descargándolos de la web de las ampliaciones. Entre otras cosas, la flota espacial completa de 2001 -Una Odisea del Espacio, está disponible como descarga. Los usuarios avanzados pueden diseñar sus propios planetas y sistemas solares de ficción. Puedes usar Celestia tanto para trabajar en clase como para trazar rutas a través de la galaxia que después puedes reproducir en modo demo.
El fin de la cuenta atrás Celestia viene con unas cuantas condiciones. El programa no es muy divertido a menos que se posea aceleración 3D. Los planetas saltan de un lado a otro de la pantalla y de las estaciones espaciales parecen pálidos y sin detalles. Necesitarás un potente y completo procesador y 512 MB de RAM, y se recomienda un adaptador gráfico con al menos 64 MB de memoria. Además, asegúrate de que posees un driver que funcione a 3D para tu adaptador de gráficos.
WWW.LINUX- MAGAZINE.ES
Puede que esto último no sea un problema trivial, aunque siempre puedes encontrar un buen número de howtos en la web. Los usuarios con SuSE, Mandrake y Fedora pueden usar el administrador de descargas de su distribución para instalar los paquetes de la versión de Celestia 1.3.2. Examina el motor de búsqueda RPM (http://rpm.pbone.net) para los RPMs. Los usuarios de Fedora necesitan adicionalmente el paquete gtkglext-1.0.6. Aunque todas estas versiones de Celestia tienen el mismo número de versión, existen ligeras diferencias entre las distribuciones. La barra de herramientas en Fedora Core 3 parece diferente de la de la versión de Suse, aunque los atajos del teclado son idénticos. Los usuarios Debian tendrán que hacerlo con una vieja versión de Celestia (1.2.2), la cual no dispone de todas las características mencionadas en este artículo. Para obtener Celestia, añade las siguientes líneas a tu lista /etc/apt/sources.list: deb http://ftp.debian.org/ U debian woody main
Celestia • LINUX USER
cerca o demasiado lejos de un planeta, por ejemplo, puedes modificar el FOV (Field of View o Campo de Visión) pulsando [.] y [,] para acercarte o alejarte de él. Si el espacio es demasiado oscuro para tu gusto, pulsando [{] podrás darle más brillo al universo, si por el contrario pulsas Figura 1: La galaxia de Celestia es extensible. No te sorprendas [}]restablecerás la cuando te encuentres con tus extraterrestres favoritos de TV oscuridad. como los Klingons o los Borg en sistemas solares remotos. Evidentemente, esta última es más realisPuedes añadir a tu lista de recursos el ta: el espacio realmente es negro en siguiente servidor FTP para obtener una extremo. nueva pero inestable versión 1.3.3.
Space cowboys
deb http://3demi.net/ U debian debs/ ./
Durante nuestra pruebas comprobamos que las barras de menú eran en general inservibles, aunque los atajos de teclado funcionaron sin ningun problema. Esta versión está hecha a la medida para los usuarios de Sarge y Sid, aunque también necesita aceleración 3D. El lugar de instalación de Celestia también difiere dependiendo de la distribución usada. Debian y Fedora Core 3 almacenan los ficheros Celestia en /usr/ share/celestia, mientras que Mandrake usa /usr/share/apps/celestia, y Suse 7opt/kde3/share/apps/celestia.
Al final del viaje vuelves a la órbita terrestre. Es hora de tomar el control. ¿Te imaginas un rápido viaje a la Luna? Pulsa [Enter]. Un campo transparente aparece inesperadamente en la ventana principal. Comienza tecleando Mo y notarás que se despliegan algunas alternativas. La lista de opciones se reduce con cada letra que escribas. Ahora pulsa [Tab] para auto-completar la palabra Moon. Confirma de nuevo tu selección
pulsando otra vez [Enter]. La palabra Moon se despliega entonces en la parte superior izquierda con detalles adicionales acerca de tu destino más abajo: la distancia, el radio del cuerpo celeste, número de horas en un día. Pero, ¿cómo llegas a la Luna? Simple: pulsa [G], el atajo de teclado para Goto, y estarás en ella. El display sobre la parte inferior derecha lee ahora Follow Moon, lo cual significa que estás en la órbita por encima de la Luna. Puedes pensar que la Luna está anclada en este lugar. ¿No debería estar rotando? De hecho, sí estña rotando, pero tan lentamente que no no se aprecia. La escala temporal está desplegada debajo de la fecha, en la parte superior derecha de la pantalla (ver la configuración etiquetada: Real Time).Afortunadamente Celestia te permite deformar el tiempo para adaptarlo a tus propias necesidades. Pulsa [L] varias veces y verás cómo la Luna comienza a rotar lentamente. Real Time despliega cambios para reflejar esto, y si tienes suerte, podrás vislumbrar a la Tierra y al Sol moviéndose lentamente en sus respectivas órbitas. Puedes pulsar [K] repetidamente para reducir la velocidad otra vez. ¿Te apetece hacer un viaje a la cara oculta de la Luna? Coge tu ratón y pulsa el botón derecho del ratón mientras lo arrastras arriba o abajo. Esto te lleva alrededor de
Perdidos en el espacio Después de completar la instalación pulsa [Alt] y [F2] y escribe celestia para iniciar el programa. Celestia arranca haciendo un barrido desde el sol a la Tierra. Puedes usar los menús o los atajos de teclado para controlar el programa (los atajos de teclado son más cómodos). Usa Configure Shortcuts en el menú Settings para configurar tus atajos de teclado personales. Para una primera y rápida impresión de Celestia pulsa [D]. Esto pone en marcha una demo que ofrece una impresionante perspectiva de las características de Celestia. Ponte cómodo y disfruta del viaje a través del sistema solar. Por supuesto que la interacción es posible. Si sientes que estás demasiado
Figura 2: Cambiar a una nueva situación, introducir la trayectoria a un nuevo objeto.
WWW.LINUX- MAGAZINE.ES
Número 11
83
LINUX USER • Celestia
También puedes acelerar gradualmente pulsando [A] múltiples veces. Pulsando [Q] difieres tu dirección de vuelo. No hay mucho que ver en ruta. A pesar de la velocidad de la luz, el vuelo dura unos 20 minutos. Las estrellas hacia las que estás volando no cambian. Un rápido Figura 3: La sonda Cassini-Huygens pasó por Saturno el vistazo al display 07.01.2004. Puedes ver cómo se muestra con Celestia, viajando Distance en AU con avances progresivos y regresivos a través del tiempo y a la (Astronomical Units), velocidad que desees. en la parte superior izquierda confirma que estás en el camino apropiado para la Luna en cualquier dirección, una llegar a Marte. Incidentalmente, un AU característica que puedes aplicar a las tiene unos 150 millones de kilómetros, sondas espaciales y a otros cuerpos ésta es la distancia entre el sol y la celestes. Tierra. Durante el vuelo puedes probar ¡Mars Attack! más características de Celestia. [Shift] y ¿Por qué no entras deprisa a tu nave [/] encienden y apagan las constelacioespacial y te das una vuelta? Establece el nes respectivamente; [Shift] y [=] muestiempo actual presionando [Shift] y [!], y tran etiquetas. Por último, [Shift] y [&] te cambia a Real Time pulsando [K] y [L]. ofrecen los nombres de los cráteres de Luego [Enter] para definir a Marte como Marte y la situación de las ciudades tu destino y haz un viaje bajo condiciosobre la Tierra. [O] enciende y apaga las nes más o menos realistas para conseórbitas para los planetas, satélites y guir un sentido de las enormes distancometas. Puedes usar Configure Celestia cias espaciales. A la velocidad estándar en el menú Settings para especificar las de los vehículos espaciales de hoy (aproórbitas que quieres visionar. ximadamnete 28.000 Km/hora) el vuelo En la aproximación a Marte,deberías tardaría unos 7 meses, así que, en su pulsar [Z] para reducir tu velocidad a lugar, deberías seleccionar la velocidad una distancia de alrededor de 1000000 de la luz. Una cosa más antes de estableKm o pulsar [S] para frenar en seco y cer tu destino objetivo. Si estás en el poder evitar chocar con el planeta. Para Sistema Solar A y estás buscando un orbitar Marte a una distancia fijada, objeto en el Sistema Solar B necesitas pulsa [Alt] y [L] y pulsa la deseada especificar un path a la dirección del Altitude. Luego haz clic sobre Apply para objeto. Por ejemplo, para ir a Marte llevar tu nave espacial a la órbita a la necesitas teclear Sol/Mars (Figura 2). altitud especificada. Para visionar la luna de Marte, Phobos, Sondas sondeantes escribe Sol/Mars/Phobos como path. Escribe Ma para Mars. De nuevo verás Junto con los bien y no tan bien conociuna lista de planetas que comienzan con dos planetas y asteroides, el espacio se esas letras. Presenta tu selección pulsanencuentra repleto de dispositivos fabricado [Tab], y confirma con [Enter]. Luego dos por la mano por el hombre, tales pulsa [C] para centrarlo en Marte y [F] como la sonda de Saturno, Cassinipara Follow. La opción final te ayuda a Huygens [2]. La sonda fue lanzada desde mantener la trayectoria de Marte dentro la Tierra el 15 de octubre de 1997, y se de su órbita. El planeta sigue moviéndoencuentra actualmente en órbita alredese. Lánzate y pulsa [F4] para alcanzar dor de Saturno. directamente la velocidad de la luz. Celestia no solamente te permite visiDeberías ver una etiqueta que indica a tar la sonda, sino que incluso te permi1000 c en la parte inferior izquierda. te seguir su trayectoria de vuelo com-
84
Número 11
WWW.LINUX- MAGAZINE.ES
pleta desde su lanzamiento hasta su destino final. Para ello, otra vez pulsa [Shift] y [!] para establecer la fecha correcta y escribe Cassini. Confirma pulsando [Enter] y luego pulsa [G] para partir de viaje a la sonda. Esta aparece inmediatamente, pero, ¿A dónde ha ido Saturno? Para presentar en el fondo al planeta necesitas pulsar el botón derecho del ratón para rotar la sonda y ponerla de cara a Saturno, o cargar Saturno pulsando [Enter], y luego, pulsando [Shift] y [C]. El planeta aparece en último término, fuera de la visión de la sonda. Ha llegado el momento de otra deformación del tiempo. Pulsa [L] para incrementar la velocidad de las cosas y [J] para volver a la escala de tiempo normal. Un signo menos indica que estás yendo hacia atrás en el tiempo. Retrasa el reloj a 07.01.2004 y retrocede. Puedes ver ahora cómo la sonda atraviesa Saturno y se acerca (Figura 3). Si disfrutaste de la visión y quieres volver atrás puedes pulsar [Alt] y [B] para crear una marca, se recolocará exactamente el mismo escenario. Retrocede ahora a 10.15.1997, la fecha en la que la sonda despegó-. Te lleva hacia atrás en el espacio a una velocidad alta, hasta que la Tierra aparece en el fondo justo después de la fecha de lanzamiento. Entonces la sonda desaparece de repente. Celestia es bastante realista, presentando solamente sondas para la duración de sus viajes. Lo mismo se aplica a otros objetos tales como el MIR o el ISS. Si obtienes un tiempo erróneo, su búsqueda no te llevará a ningún sitio. La sonda aparece de repente en la órbita terrestre desde ahora en 10.15.
Mapa de las estrellas Mientras nos encontramos próximos a la Tierra te has debido preguntar dónde se encuentra en ese momento la Estación Espacial Internacional (ISS). El Planetario Celestia puede ayudarte a encontrarla. Unos cuantos atajos de teclado te llevarán a la Tierra o a otro objeto donde podrás establecer tu planetario privado. Haz clic sobre la Tierra y selecciona Follow. Decide la hora para ver el cielo de noche y pulsa [Space] para congelar este momento. Pulsa [Alt] y [L] para especificar la situación de tu planetario, por ejemplo, Berlín. Luego ve a la Wikipedia y consulta las coordenadas de
Celestia • LINUX USER
Berlín, las cuales son 52.3100 grados el rayo de la muerte! Si no estás Norte (N) y 13.2340 grados Este (E). seguro dónde está oculto un objeto Introduce estos valores. Establece la que has instalado, puedes pulsar Altitude, por ejemplo, 3000 km y [Alt] y [C] para poner en marcha el luego haz clic sobre Apply; esto hace buscador de Celestia y chequear que tu nave espacial tome estas coorWith Planets. Esto te permite buscar denadas que has introducido. Decide manualmente sistemas solares con en que dirección quieres mirar desde planetas y naves espaciales (Figura la Tierra y redirige tu nave hacia la 4). Si tienes la versión de Celestia dirección indicada. para Fedora Core 3, tendrás que Pulsa [Ctrl] y [G] para iniciar la buscarlo en Internet. No hay manesecuencia de aterrizaje. Para ver las ra de describir los dóndes de Endor estrellas pulsa [Ctrl]+[Shift]+[A] si no tienes los detalles. Deberías para cambiar la atmósfera, y [I] para chequear las ampliaciones del fichesaltar las nubes. Comparando el cielo ro ssc para consejos, o leer el fichenocturno con los datos del planetario ro README. Motherload tiene puedes conseguir conocer las constemuchas más ampliaciones. Dentro laciones y mirar cómo pasan los satéFigura 4: El navegador de Celestia te ayuda a enconde la colección Motherload enconlites. trar naves espaciales y planetas instalados con las trarás atracciones especiales tales Para añadir tu propia ciudad cámampliaciones. Los creadores de algunas naves espacomo el Discovery de la película de biate al directorio Celestia Data. ciales y planetas de ficción los sitúan en sistemas Stanley Kubrick 2001, Star Trek o El Cámbiate a root y edita el fichero solares realmente oscuros. planeta de casa de Borg. world-capitals.ssc. Por ejemplo, pueRetorno al futuro des introducir los siguientes detalles tour, puedes seleccionar el item del La versión básica de Celestia tiene “solapara Munich: menú Open para obtener el tour. mente” unas 100.000 estrellas, pero pueLa página Motherload en [3] es el Location "Munich" "Sol/Earth" des descargar otros millones de estrellas repositorio central para las ampliacio{ de Internet [5]. Las de Celestia no son nes. El sitio Motherload te ofrece planeLongLat [11.3428 48.0823 0] únicamente puntos, sino que puedes tas reales y ficticios, texturas superfiIMportance 365.00 visitar puntualmente cada una de ellas. ciales realzadas, sondas y lanzaderas Type "City" Haz clic con el botón derecho en cualespaciales futuristas y ayuda general. Si } quier estrella y pulsa [G] para hacerle tienes un problema con una ampliauna visita. Si deseas salvar cualquiera de ción, o cualquier pregunta que hacer las realmente impresionantes vistas para Los datos de Longitud y Latitud se obtieacerca de Celestia, deberías visitar los la posteridad, puedes tomar una instannen de la Wikipedia; Importance nos foros Shatter en [4] donde los fans de tánea de la pantalla. Pulsando [F10] especifica cómo debiera ser de visible Celestia se encuentran e intercambian creas una foto y almacenas los resultauna ciudad vista desde el espacio. Por información. dos en un fichero png. Y otro consejo ejemplo, Beijing es una gran ciudad visiUniversos en expansión antes de que pongas en marcha tu propia ble desde una larga distancia, pero necemisión galáctica: si acaso te pierdes en sitas volar más cerca del planeta para ver Las ampliaciones Motherload se instalan alguna búsqueda remota de la galaxia, Munich. Cuanto mayor es el valor, más típicamente sin dificultad alguna. pulsando [H] y [G] te llevará tu casa a obvia se hace la ciudad desde el espacio. Veámoslo con un ejemplo. Descarga la nuestro pequeño y amigable sistema ampliación Tatooine, Endor and first Construyendo universos ■ solar. Death Star por Thomas Guilpain desde la Encontrarás en Internet innumerables categoria Fictional/Star Wars, y desemRECURSOS ampliaciones útiles y entretenidas para paqueta los ficheros en un directorio con Celestia. Los tours son como demos y el nombre de la ampliación. Luego da el [1] Página de inicio de Celestia: http:// representan una secuencia animada, típicomando kdesu konqueror para abrir www.shatters.net/celestia/ camente para un único planeta, mientras una segunda ventana de navegador en [2] Cassini, la sonda de Saturno: http:// que, al mismo tiempo, representan informodo root. Navega hast el directorio de en.wikipedia.org/wiki/ mación basada en texto en el fondo. Para Celestia y copia los ficheros desempaCassini-Huygens poner una demo desempaqueta los fichequetados en ese directorio. Necesitarás [3] Motherload: http://www. ros y muévelos a los directorios correctos copiar el fichero ssc desde la carpeta celestiamotherlode.net de tu máquina. Es decir colocaremos los Extras a la carpeta Extras de tu Celestia, [4] Ayuda de Celestia: http://shatters.net/ ficheros desde la carpeta Texture a tu y así sucesivamente. forum propia carpeta Texture de Celestia; ficheDespués de reiniciar Celestia pulsa [5] Estrellas: http://www. ros con la extensión *.cel, tales como [Enter], escribe Rho CrB/Endor/Death/ celestiamotherlode.net/catalog/ demo.cel, pertenecen al directorio princiStar y pulsa G para iniciar un viaje a la extrasolar_stars.php pal de Celestia. Después de instalar un Estrella de la Muerte. ¡Pero cuidado con
WWW.LINUX- MAGAZINE.ES
Número 11
85
LINUX USER • Educación
Donde se trata de si la geometria puede ser dinamica
DR GEO
Dr. Geo es una aplicación que está incluida en la totalidad de las distribuciones educativas que conozco. Se trata de un programa de geometría euclídea interactiva, intuitivo (si es que eso significa algo) y perfectamente usable en clases de primaria, pero con interesantes funcionalidades de programación, macros, uso de scripts y de figuras Scheme. Y ahora (versión 1.1.0) también incluye animaciones. POR JUAN RAFAEL FERNÁNDEZ GARCÍA.
D
r. Geo ha sido desarrollado por Hilaire Fernandes (Hilaire es francés pero de origen portugués, de ahí su apellido). Se trata de una aplicación que ha recibido varios premios y reconocimientos: por ejemplo en el año 2000 recibió el premio a la mejor aplicación didáctica concedido por la asociación francesa AFUL y ha recibido del organismo oficial italiano INDIRE la etiqueta de Qualità Didattica. ¿Le echamos un vistazo? Comencemos por una aclaración: DrGeo (DocGeo para los amigos) es el nombre actual de una aplicación que en algún momento se llamó DrGenius y es totalmente independiente de otras aplicaciones de nombre similar como la «herramienta matemática genius» o su interfaz gráfica gnome-genius. También tenemos que comentar de partida que, a diferencia de otras aplicaciones que hemos presentado aquí y con las que nos sentíamos un poco pioneros en el trabajo de documentación, DrGeo es un caso de
86
Número 11
software muy bien documentado, tanto en lo que respecta a sus funcionalidades como en las posibles utilizaciones didácticas. Por tanto nuestra tarea consistirá en sintetizar las aportaciones dispersas y en centrarlas en el caso español.
Primeros pasos con DrGeo La imagen 1 nos muestra la interfaz actual de usuario cuando vamos a crear una nueva figura. A las líneas del menú y los iconos de uso general (la barra de acciones), le sigue una segunda línea de siete iconos (las herramientas de construcción), de los que seis son entradas desplegables y personalizables: objetos (puntos, líneas y curvas, polígonos) e instrumentos (transformaciones, valores numéricos y scripts, macros, otros y ampliar). Encontramos también una fila vertical de iconos con las funciones más frecuentemente utilizadas. Desde un punto pedagógico es interesante señalar que es posible configurar («Personalizar interfaz») los botones que les aparecerán
WWW.LINUX- MAGAZINE.ES
a los alumnos: el profesor puede desactivar algunos, para evitar confusión en los alumnos de menor edad, o bien bloquear otros (con una contraseña), por ejemplo los de medida, para que sean los alumnos los que tengan que realizar las operaciones. Una línea en la parte inferior del panel principal nos va informando de la acción seleccionada y de los pasos que debemos realizar para terminarla. Nuestra primera figura será el segmento AB. Lógicamente deberemos empezar por definir los puntos A y el B, lo que se hace pulsando en el primer botón vertical (o desplegando el primer icono horizontal y seleccionando «Punto sobre un objeto o sobre el plano de fondo»; o bien pulsando el botón derecho del ratón, después «punto» y después «punto libre»). Le daremos nombre a los puntos (hay que buscar en el menú «Apariencia», que se abre de manera similar a lo tratado), seleccionaremos la herramienta de creación de segmentos y le daremos los dos puntos que necesita.
Educación • LINUX USER
Figura 1: Interfaz de DrGeo.
Figura 2: Nuestra primera figura.
¿Fácil, no? Además lo hemos pintado de grama lo abra sin problemas (lo podrerojo, para su fácil visualización. mos hacer directamente ejecutando Y ahora el primer truco: pulsamos con drgeo -f fichero.fgeo). Frederic Ferre manel ratón el borde izquierdo de la ventana tiene un útil conjunto de construcciones y vamos arrastrando hacia la derecha destinadas a Secundaria (ver los enlaces hasta descubrir un panel oculto: el llade la bibliografía) y hay varias figuras mado árbol sinóptico de la figura (imaentre los ejemplos proporcionados al insgen 2), formado con todos los elementos talar la documentación del programa. de la figura y sus dependencias internas. Además de guardar nuestras figuras ¿Como dibujaríamos un triángulo? podemos exportarlas a varios formatos: Primeramente situaremos tres puntos y de imagen vectorial como PostScript, o les daremos nombre A, B y C; seguidabitmap como .png, o de imagen programente buscaremos la herramienta polígomable en LaTeX o FlyDraw (recordemos no y marcaremos los tres puntos que lo de los primeros números de nuestra definen (la línea inferior de la interfaz nos Linux Magazine que era uno de los forirá dirigiendo en los pasos necesarios). matos gráficos que podía utilizar WIMS). ¿Cuánto mide el ángulo BAC? Es fácil, la Pero la buena noticia para nosotros los herramienta medidora de ángulos nos lo traductores, es que además el formato devuelve si seleccionamos los tres puntos .fgeo es un formato XML, y por tanto que delimitan el ángulo; en el caso de la editable (y lo que nos interesa: traducifigura 3 serán exactamente 90 grados. ble) con herramientas de texto. Podemos ahora calcular el punto medio Intentaremos explicarnos: es trivial traentre B y C, que nos servirá para crear ducir el título y los textos de una figura, una nueva semirrecta Ad. ¿Cuánto medirá bastará con un ejemplo (es la cabecera Ad? Podemos aprovechar el procedimiende una figura de Ferre) to para visualizar el teorema de Pitágoras y otras propiedades elementales de los <drgenius> triángulos. Pero la diversión empieza <drgeo name="Figure 8" scale=U ahora: si elegimos la herramienta de "30.000000"U mover objetos, podremos ir desplazando origin_x="0.000000" origin_y=U (arrastrando con el ratón) los puntos defi"1.600000"U nidos o la semirrecta, y el programa grid="False"> actualizará inmediatamente los datos (ver <point id="1C6DDB0" type="Free"U figura 4). Nos servirá para hacer evidente color="Blue" thickness=U a los alumnos que la suma de los ángulos "Thick" style=U es siempre 180º, etc. "RectangularEmpty"U Podemos guardar nuestra filled="False"U figura para utilizarla en otra masked="False" name="vue ocasión (si tenemos abiertas 3D"> varias figuras podemos guar<x>0.466667</x> dar la sesión en «Archivo» y <y>-1.266667</y> «Guardar múltiple»). Es con</point> veniente darle al fichero creaFigura 4: do la extensión .fgeo, para Modificando el triánCambiamos “Figure 8” por el que en su momento el progulo. nombre que queramos darle
WWW.LINUX- MAGAZINE.ES
Figura 3: Medidas en un triángulo.
a la figura y “Vue 3D” por “Vista en 3D” y ya hemos traducido el fragmento. Desde un punto de vista pedagógico es muy interesante el estudio de Joyant y Jeannot. Ambos analizan los problemas que se presentan en la utilización del software educativo (en su caso mayores, porque tienen que utilizar discos vivos para poder trabajar con software libre) y recogen las experiencias que realizan y los materiales creados. Voy a citar una de sus conclusiones «Gracias a este software, sólo nos preocupamos por la nociones matemáticas y no por la capacidad de dibujo de los alumnos. Cuando se efectúa una evalua-
Para saber más Decíamos que la documentación, escrita por Hilaire Fernandes y Andrea Centomo, es muy completa y clara. El sitio canónico de DrGeo es [3], e incluye enlaces, documentación e incluso videos demostrativos. No dejen de visitar la galería de DrGeo [4]. Damien Joyant y Hervé Jeannot han publicado un trabajo de fin de carrera sobre la utilización de DrGeo en Primaria, con ejemplos e ideas muy útiles. Frederic Ferre mantiene un repositorio de actividades para DrGeo destinadas a Secundaria y Bachiller en [5]. Choubane Mohamed (ver [6]) ha realizado varias presentaciones de Drgeo y ha colgado los materiales en su sitio. Destaca su explicación de la nueva funcionalidad de animación, con un ejemplo totalmente clarificador. Andrea Centomo colaboró con Fernandes en la redacción de la documentación y ha publicado varios artículos de alto nivel sobre programación en la aplicación (enlazados desde la página de DrGeo).
Número 11
87
LINUX USER • Educación
permite volver sobre las nociones sin que el alumno tenga la sensación de que está repitiendo la misma cosa.» Pero podemos ser más ambiciosos con el programa que estamos analizando: ¿habrá una forma de reutilizar construcciones y ahorrar trabajo en la elaboración de nuestras propias figuras? Pues sí la hay: las macros.
Las macros Figura 5: Un pentágono creado con una macro.figura.
Figura 6: Nuestra primera macro.
Figura 7: Un script DGS que mide cosenos.
ción en geometría, se valora la capacidad de realizar trazos correctos tanto como la comprensión de las nociones matemáticas. Ahora, con la utilización de esta herramienta informática sólo tenemos que tener en cuenta la comprensión de las nociones. Los alumnos trabajan de forma distinta en el ordenador que en la hoja de papel, ya que con la herramienta informática tienen mayor capacidad de trabajo. Esta herramienta permite trabajar las competencias de un modo diferente, pues
88
Número 11
(ver la figura 5). ¿Qué ha pasado? Que DrGeo ha almacenado los pasos que el creador de la macro siguió para construir el pentágono a partir de los elementos iniciales, y sabe aplicar los pasos a pesar de que los valores varíen. Pero habíamos prometido crear una macro. Vamos a calcular la perpendicular a un segmento que pase por su punto medio. Primero hay que crear la figura terminada (imagen 6). Seguidamente se pulsa en crear macro; la entrada será los dos puntos iniciales (se van seleccionando e incorporando al cuadro de elementos utilizados), y la salida la línea perpendicular a la línea generada por los dos puntos. Pueden comprobar que funciona. ¿Cómo se guarda? El menú «Archivo» -> «Guardar múltiple» es el único medio de guardar una macro en un archivo. ¿Eso es todo lo que puede hacerse con DrGeo? ¡En absoluto!
La documentación las define así «Una macro para una construcción es una especie de procedimiento que recibe como entrada elementos de figuras y devuelve uno o más elementos de figuras, construidas por la macro. Ellas son construidas en un modelo definido por el usuario. Esto significa que tiene que elaborar la serie de pasos para la construcción sólo una vez, a partir de entonces ordena a DrGeo grabar esta serie de pasos (…) Para grabar una serie de pasos para la Escribiendo guiones construcción, DrGeo necesita saber cuáles DrGeo es extensible de dos formas adison los elementos iniciales de la serie y cionales, que no debemos confundir: los elementos que se van a dar como mediante guiones (scripts para los que resultado. Desde luego que los elementos sólo traducen a ratos) DGS (DrGeo que se den como resultado deben depenScheme) y mediante FSD (Figuras der solamente de los elementos iniciales.» Scheme de DrGeo). Suena muy técnico, Es decir, se le proporcionan a la macro intentemos aclararlo. los elementos iniciales (estrictamente Los dos tipos implementan guiones en hablando sus parámetros), y ésta recuerGuile, GNU’s Ubiquitous Intelligent da los pasos para llegar a la construcción Language for Extension. final. Como casi siempre, Guile es un intérprete se entenderá mejor con un ejemplo. del lenguaje Scheme (un Comenzaremos por utilidialecto del Lisp) baszar una de las macros de tante utilizado en extenejemplo incluidas en el siones programables de paquete y después creaotros programas (lo usan remos nuestra propia por ejemplo aplicaciones macro. tan variadas como el Abrimos desde el software de diseño de menú abrir de la aplicacircuitos electrónicos ción pentagone.mgeo; en Geda, gnucash y el ediun primer momento el tor de partituras musicaúnico cambio es que el les lilypond). menú «Macros» se activa. Los guiones DGS son Pulsamos en él y nos apaen realidad elementos de Figura 8: Un figura prograrece la entrada Pentágono figuras como cualquier mada FSD. regular y su descripción: otro elemento geométriConstruire un pentagone régulier à partir co. Reciben como entrada las referencias d’un sommet et son centre. Para utilizar a los elementos de figura seleccionados la macro trazaremos un círculo a partir por el usuario y dan como resultado un de dos puntos (que definen su radio) y valor numérico, que se inserta en la figumarcamos el punto que toca el círculo y ra. Son, en efecto, funciones injertadas el centro del pentágono: automáticamenen una figura, y son evaluadas en cada te DrGeo generará el pentágono incluido actualización de la figura (i.e. cada vez
WWW.LINUX- MAGAZINE.ES
Educación • LINUX USER
Figura 10: DrGeo integrado en Squeak.
que el programa debe volver a dibujar la figura). Lo ilustraremos con la figura 7 (coseno de curva tangente), nuestra reproducción -traducida- del ejemplo incluido en la documentación. Se ejecuta moviendo el punto «Muéveme» a lo largo de la línea horizontal. Para ver los scripts seleccionamos el botón propiedades y pulsamos en los textos en azul: nos aparecerá una ventana con el código Guile. Carguemos otro de los ejemplos, tilings.scm. Se trata de un ejemplo de FSD (figura 8). La carga se realiza desde la opción «Evaluar» del menú principal «Archivo» (o desde
(nueva-figura "Prueba") (sea Punto "A" libre 1.2 -2)
Este FSD define una figura con un punto libre A de coordenadas iniciales (1,2 ; -2). Fácil, ¿no? No dejen de consultar la documentación para leer una detallada exposición del lenguaje y ejemplos comentados. Pero la figura 9 nos da una pista importante: hay una herramienta de ayuda a la programación de las FSD, el plugin DrGeo de TeXmacs, creado conjuntamente por Hilaire Fernandes y Adrián Soto. Se lanza abriendo desde el menú de TeXmacs una sesión DrGeo (en el sitio de OFSET hay un video, texmacs.mpeg, que ejemplifica una de estas sesiones).
Nuevas y futuras funcionalidades La versión 1.1.0 de DrGeo ha introducido una nueva funcionalidad: las animaciones. Choubane Mohammed ha realizado un video (ver [1]) que presenta la
WWW.LINUX- MAGAZINE.ES
nueva utilidad, a él nos remitimos en lugar de multiplicar el número de capturas de pantalla. Es posible configurar la velocidad con la que se ejecutará un guión, lo que permite la visualización inmediata de los cambios de valores de una figura. La utilidad pedagógica de todo esto es evidente. Pero nos esperan grandes sorpresas a los seguidores de DrGeo. La figura 10 es una captura de un video fascinante por lo que tiene de revolucionario: ¡Hilaire Fernandes está trabajando en una nueva versión de DrGeo para Squeak! En [2] pueden ver una demostración completa.
Y en el próximo número… En nuestro artículo sobre ATNAG hicimos una breve reseña de las aplicaciones educativas relacionadas con el alumnado de Infantil y primeros años de Primaria. En su momento hicimos una crítica a Gcompris que es posible que en adelante sea injusta. ¿Lo vemos en el próximo ■ número?
RECURSOS [1] Animación con Dr. Geo: http:// mchoubane.free.fr/IMG/avi/ animation.avi [2] Dr. Geo integrado en Squeak: http:// documentation.ofset.org/drgeo/ videos/drgeo-squeak.avi [3] Sitio web de Dr. Geo: http://www. ofset.org/drgeo/ [4] Galería de Dr. Geo: http://community. ofset.org/wiki/Dr_Geo_gallery [5] Repositorio de actividades. http:// www.infx.info/quidnovi/rubrique. php3?id_rubrique=112 [6] Presentaciones: http://mchoubane. free.fr
EL AUTOR
Figura 9: El plugin DrGeo de TeXmacs.
la línea de órdenes con drgeo -e figura.scm). Las Figuras Scheme de DrGeo consisten en un archivo de texto que contiene una figura geométrica completamente escrita en el lenguaje de programación Scheme. La potencia de este modo de crear una figura radica en permitir una construcción usando programación funcional (de esta forma DrGeo puede ser utilizado para la introducción a la programación, con las ventajas de que la sintaxis de Scheme es bastante intuitiva y la salida del código es visible inmediatamente). ¿Cómo se crean estas figuras? Evidentemente no vamos a hacer aquí una introducción al lenguaje, pero sí vamos a examinar un par de ejemplos básicos. El conjunto de palabras clave utilizadas en Scheme para describir una figura simple son adaptables, de modo que aparezcan en español, francés, inglés, etc. O sea que escribiremos en castellano
Juan Rafael Fernández García es profesor de educación secundaria y tiene una larga experiencia en la traducción y documentación del software libre. Ha sido coordinador 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. Juan Rafael también es miembro de OFSET.
Número 11
89
LINUX USER • Línea de comandos
El calendario de la línea de comando
¿A QUÉ ESTAMOS HOY? Las venerables herramientas Unix de calendario y fecha ayudan a los usuarios a mantenerse al tanto de la hora y de la fecha. Puedes incluso cambiar la hora del sistema con un simple comando de la shell. POR HEIKE JURZIK
L
os calendarios de pared, con sus dibujitos de payasetes o vírgenes de los desamparados con su pedrería en relieve, son muy decorativos, y los PDAS son manejables y muy funcionales, pero nada como Linux para ayudar a mantenerte al tanto del día y la hora. Linux te ofrece una rápida perspectiva de la fecha y de la hora con las herramientas de la línea de comandos cal and date. Puedes usar cal para conseguir una hoja de calendario o una perspectiva de un año completo en una ventana de terminal, además date no solamente produce la fecha y la hora en varios formatos, sino que incluso puede ajustar la hora del sistema, suponiendo que tienes privilegios de administrador.
deseas es obtenerla para un año completo, simplemente añade la opción -y. Con la opción -3 presenta el mes en curso junto con los meses previos y los siguientes (Figura 1). cal te muestra un mes específico si añades al comando 1 ó 2 dígitos numéricos (tales como 6 ó 06), y un año si se trata de 4n (ejemplo: 2005). Así, si deseas visualizar el mes de Junio de 2005 deberías introducir:
Un calendario para todo
Esta fecha te daría el mes de Junio del año 5 DC. Por defecto, en algunas versiones Linux, cal comienza la semana en Domingo. Si prefieres comenzarla en Lunes, añade -m al comando cal.
La herramienta cal reproduce un calendario en la línea de comando. Al introducir cal sin ningún parámetro adicional te da una vista del mes en curso elegantemente formateada. Si lo que
90
Número 11
El parámetro -j le dice a cal que cuente los días desde principio de año hasta la fecha especificada: <B>$ cal -j<B> June 2005 Su Mo Tu We Th Fr Sa 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 ...
Esto te dice que el día 1 de Junio es el día número 152 del año, por ejemplo.
Los héroes del tiempo El programa date no tiene solamente una función calendario, sino que además puede decirte más cosas sobre la hora. Si escribes el comando en el prompt de la shell sin especificar ninguna opción, te ofrecerá la fecha y la hora actuales.
cal 06 2005
Como cal empieza a contar desde el 1 de Enero del año 0001, no puedes escribir el año como un número de 2 dígitos. Por ejemplo: cal 06 05
WWW.LINUX- MAGAZINE.ES
<B>$ date<B> Sun Jun 19 18:38:15 EDIT 2005
Si la salida se produce en un lenguaje que no entiendes, puedes usar el comando echo para comprobar el valor de la variable de entorno LC_TIME y establecer la variable con el valor apropiado (escribiendo locale -a se te muestra los valores locales específicos disponibles para tu sistema). $ <B>echo $LC_TIME<B> $ <B>export LC_TIME=es_ES<B>
Línea de comandos • LINUX USER
$ <B>date<B> dom oct 2 09:34:00 CEST 2005
Puedes usar date con la variable TZ (“zona horaria” o “time zone”) para presentar la fecha y la hora en curso en un país diferente. El directorio /usr/share/ zoneinfo lista todas las zonas horarias del mundo (algunas de ellas en subdirectorios). Si quieres conocer la hora de Nueva Zelanda, podrías establecer temporalmente la variable TZ para una llamada a date. <B>$ TZ=NZ date<B> Mon Jun 20 11:00:44U NZST 2005
Tiene sentido usar estas opciones cuando necesitas parte de una fecha y hora en curso. Por ejemplo, podrías usar esos parámetros en combinación Figura 1: cal -3 presenta el mes en curso, el previo y el siguiente. con tar y date para crear automáticamente backups diarios, para el vas (next, ago, etc.) que nos ayudan a mes o el año en el que fueron creados. devolver fechas (09 Junio 1973, 09 Jun 73, etc.), días de la semana (Monday, $ tar cvfj U Tuesday, etc.) y períodos de tiempo (día, backup_-_$(date +'%d')_$U año, semana, mes, etc.). Así que podrías (date +'%m')_$(date +'%y')U obtener la fecha de ayer escribiendo: .tar.bz2 *
Si tienes amigos o parientes en el extranjero y quieres evitar despertarlos en mitad de la noche, puedes ahorrarte todos esos tecleos mediante la definición de un alias para el comando completo. Para definir un alias, añade algo como el comando siguiente a tu ~/.bashrc: alias nz='TZ=NZ date'
date -d '1 day ago'
El mañana nunca llega Puedes usar la opción -d para especificar la salida de date. Este parámetro permite introducir toda una serie de palabras claves y números, permitiéndote el uso descripciones en lenguaje casi natural, como tomorrow y <yesterday>, para conseguir la fecha buscada. Por ejemplo:
luego, re-analiza el fichero como sigue, source ~/.bashrc
o simplemente desconéctate y vuelve a conectarte. La próxima vez que necesites conocer qué hora es en Nueva Zelanda, puedes escribir nz para conocerla.
$ date -d tomorrow lun oct 3 14:52:18 CEST 2005 $ date -d yesterday sáb oct 1 14:52:24 CEST 2005
Existen más palabras clave que soportan referencias relati-
Si usas diversas diversas palabras claves tal y como se ve en el ejemplo, es aconsejable usar comillas simples (‘) o dobles (“). Combinadas con las opciones de formato de salida podrías obtener el mes pasado: $ date -d "1 month ago" +"ElU mes pasado: %B" El mes pasado: septiembre
o buscar qué día de la semana fue el 3 de Enero $ date -d 'third January' +%A lunes
El reloj parlante El comando date tiene unos cuantos parámetros de formato de salida útiles. Precedidos por un signo + (más), distintas combinaciones de porcentajes y letras te darán el formato que necesitas. $ date "+Hoy es elU día %d del mesU de %B del año %Y." Hoy es el día 02U del mes de octubreU del año 2005.
%d te permite un formato de dos dígitos para el día, %B escribe el nombre completo del mes, y %Y da el año (expresado en cuatro dígitos). La tabla 1 muestra un conjunto de las etiquetas para formatos más importantes.
WWW.LINUX- MAGAZINE.ES
Número 11
91
LINUX USER • Línea de comandos
$ echo $ ((1-1)) 0
Para conocer el número de días que faltan hasta el vencimiento de tu plazo necesitas dos expresiones de fecha en el paréntesis: la fecha del plazo y la de hoy, la cual será sustraída: $ echo $((`date -d '29 U September 2005' +%j`U -`date +%j`)) 102
La opción de formato + %j le dice a date que cuente los días. Se deja como ejercicio para el lector calcular lo que falta hasta el día de hoy. La sintaxis solamente funciona si los dos días corresponden a un mismo año,
pero hay un truco para evitar esta limitación. Cambiamos el contador de días (%j) con el de la hora Unix (%s), el cual cuenta el número de segundos desde 01.01.1970 (0:00 horas). Luego divide la diferencia en segundos por 60*60*24 = 86400 para convertir los resultados a días: $ echo "$((`date -d U '19 June 2006' U +%s`-`date +%s`))U / 86400" | bc -l 364.21625000000000000000
Cuando llegó su hora Como administrador puedes usar date para obtener una aproximación conveniente para establecer la hora del sistema, simplemente puedes escribir la fecha y la hora como un gran número simple siguiendo el comando date (sin el signo + -más-). Las reglas para escribir la fecha y la hora son bastante estrictas: primero, necesitas el mes (2 dígitos), luego el día (2 dígitos), la hora (2 dígitos), y opcionalmente los primeros 2 dígitos del año (por ejemplo, 19), los últimos 2 dígitos del año (por ejemplo,
Tabla 1: Formato salida del comando date %H %I %M %S
Horas (00 a 23) Horas (01 a 12) Minutos (00 a 59) Segundos (00 a 60); actualmente tiene 60 en vez de 59 segundos debido al salto del segundos am o pm (AM, PM) Reloj de 12 horas (hh:mm:ss AM/PM) Reloj de 24 horas (hh:MM.ss), %H:%M Segundos después del 1 de Enero de 1970 Zona horaria en curso (GMT, EDT. etc) Forma reducida del día de la semana (Lun, Mar, etc) Forma extendida del día de la semana (Lunes, Martes, etc.) Forma reducida del día del mes (Ene, Feb, etc.) Forma extendida del día del mes (Enero, Febrero, etc.) Día con dos dígitos (01, 03, etc) Día (dígito simple, ej. 7) Formato de fecha mm/dd/yy Muestra el día del año que es 1 para Enero y 365 (excepto en años bisiestos) para el 31 de Diciembre Muestra el día de la semana (1 a 7) Muestra la semana del calendario (1 a 53) Año, con dos dígitos (00 a 99) Año, con cuatro dígitos (ej. 1973) Imprime un signo de porcentaje Final de línea Tabulador
%p %r %R %s %Z %a %A %b %B %d %e %D %j %u %U %y %Y %% %n %t
92
Número 11
WWW.LINUX- MAGAZINE.ES
73) y los segundos (2 dígitos). Para establecer la hora 08:13 del día 9 de Junio de 1973, primero deberías entrar como root con su, y luego escribir lo siguiente: # date 060908121973 Sat Jun 09 08:13:00 EDT 1973
Como alternativa, podrías establecer el parámetro -s y usar las llaves y números descritos en la sección previa titulada El mañana nunca llega. Por ejemplo, el comando siguiente podría retrasar dos minutos el reloj: date -s '+2 minutes'
Es igual de fácil retrasar el calendario un día: date -s 'yesterday'
Observa que cambiando la hora, tu reloj CMOS no se ve afectado. Los ordenadores personales tienen un reloj interno de batería que guarda la fecha y la hora incluso cuando están apagados. Cuando dicho reloj está localizado en el mismo chip que la RAM CMOS, nos referimos a él como el reloj CMOS. También se le llama reloj hardware, RTC (Reloj de Tiempo Real) o reloj BIOS. Para cambiar el reloj hardware a la hora del sistema actual, de nuevo, trabajando como root, escribir el siguiente comando: hwclock -w
Algunos programas no aceptan de buen grado saltos de hora grandes. Por ejemplo, este es el caso de la herramienta xchat IRC . Si quieres experimentar con date, deberías descubrir lo que necesitas para restablecer algunos programas. ■
LA AUTORA
Para los que necesitáis respetar los plazos, se pueden calcular los días que faltan hasta la fecha límite de la entrega del proyectousando un simple comando. Esto significa echar mano de las legendarias herramientas aritméticas de Bash: la expresión que queremos calcular se encuentra en dos juegos de paréntesis, por ejemplo,
Heike Jurzik estudió alemán, inglés y Ciencia Informática en la Universidad de Colonia, Alemania. Descubrió Linux en 1996 y desde entonces ha estado fascinada con la línea de comando de Linux. En su tiempo libre se le puede encontrar en sesiones de folk irlandés o visitando Irlanda.
LINUX LOCAL
LINUX LOCAL Leyenda inux Local es tu directorio de servicios y empresas de Linux cerca de ti. ¿Necesitas soporte, hardware, formación? Consulta Linux Local y encuentra quién ofrece qué y dónde. El directorio se divide en regiones autónomas para ayudarte a localizar las empresas que ofrecen servicios cerca de ti. Utiliza la leyenda de la derecha para encontrar la empresa que ofrece el servicio que precises. Linux Local es tu guía de servicios Linux.
L
1.- Hardware 2.- Software / Desarollo 3.- Formación 4.- Soporte / Consultoría 5.- Servidores 6.- Redes 7.- Migración 8.- Hospedaje
Andalucía Logo
Empresa
Correo-e
Web
1
2 3 4 5 6
Gesinfo
info@gesinfoweb.com
www.gesinfoweb.com
BitRock
info@bitrock.com
bitrock.com
Properly Software
info@properly.es
www.properly.es/site
Empresa
Correo-e
Web
IWS
iws@iws.es
www.iws.es
Empresa
Correo-e
Web
Mono::labs
contacte@monolabs.com
www.monolabs.com
Datum
info@datum.ws
www.datum.ws
7 8
Cataluña Logo
1
2 3 4 5 6
7 8
Madrid Logo
1
2 3 4 5 6
7 8
¿Por qué no está su empresa en este 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 info@linux-magazine.es
WWW.LINUX- MAGAZINE.ES
Número 11
93
EVENTOS
LinuxWorld Conf. & Expo NL
LinuxWorld C.& Expo Frankfurt
OSWC 2006
Fecha: 9-10 Noviembre
Fecha: 15-17 Noviembre
Fecha: 15-17 Febrero
Ciudad: Utrecht, Paises Bajos
Ciudad: Frankfurt, Alemania
Ciudad: Málaga, España
Sitio Web: www.linuxworld expo.nl
Sitio Web: www.linuxworld expo.de
Sitio Web: http://www.opensourceworldconference.com
Calendario de Eventos Evento Versteckte Computer Unkontrollierbare... International PHP Conference 2005 LinuxWorld Conference & Expo NL Comtec 2005 LinuxWorld Conference & Expo Frankfurt Technology 2005 FOSS.IN / Linux Bangalore linux.conf.au 2006 Southern California Linux Expo OSWC 2005 O'Reilly Emerging Technology Conference LinuxWorld Conference & Expo Australia LinuxWorld Conference & Expo Boston LinuxWorld & NetworkWorld Canada LinuxWorld Conference & Expo SA LinuxWorld Conference & Expo Brazil LinuxWorld Conference & Expo Japan 6º Fórum Internacional Software Livre LinuxWorld Conference & Expo
Fecha 5-6 Noviembre 6-9 Noviembre 9-10 Noviembre 9-11 Noviembre 15-17 Noviembre 15-18 Noviembre 29 Noviembre - 2 Dic. 23-28 Enero 06 11-12 Febrero 06 15-17 Febrero 06 06-06 Marzo 06 28-30 Marzo 06 3-6 Abril 06 24-26 Abril 06 16-19 Mayo 06 23-25 Mayo 06 31 Mayo - 6 Junio 06 4-6 Junio 06 5-7 Junio 06 J
Ciudad Munich,Alemania Frankfurt,Alemania Utrecht,Paises Bajos Dresde, Alemania Frankfurt, Alemania Yokohama, Japan Bangalore, India Dunedin, Nueva Zelanda Los Angeles, CA, EE.UU Málaga, España San Diego, CA, EE.UU Sydney, Australia Boston, MA, EE.UU Toronto, Canada Johanesburgo, S. África Sao Paulo, Brasil Tokio, Japón Porto Alegre, Brazil Korea Seúl, Korea
Sitio Web www.fiff2005.de www.phpconference.com www.linuxworldexpo.nl www.messe-comtec.de www.linuxworldexpo.de http://www.insidechips.com/ET.htm http://foss.in/2005 http://lca2006.linux.org.au www.socallinuxexpo.org www.opensourceworldconference.com http://conferences.oreillynet.com/etech www.linuxworldexpo.com.au www.linuxworldexpo.com www.lwnwexpo.plumcom.ca www.linuxworldexpo.co.za www.linuxworldexpo.com www.linuxworldexpo.com http://fisl.softwarelivre.org www.linuxworldkorea.com
Información de Contacto Director Paul C. Brown
Director Editorial Paul C. Brown
Coolaboradores Paul C. Brown, Jose Manuel González Vida, Juan Rafael Fernández, Pedro Orantes, José María Ruíz, Alberto Planas, Jose A. García, Ana Mª Ferreiro
Director de Producción Sergio Hardasmal anuncios@linux-magazine.es
Traductores Paqui Martín Vergara, Paul C. Brown, Antonio Rueda, Víctor Tienda.
Subscripciones: www.linux-magazine.es/ magazine/subs
Maquetación Sergio Hardasmal Diseño de Portada Pinball info@pinball-werbeagentur.de Publicidad www.linux-magazine.es/pub/ Para España Expresando Comunicaciones info@exprecom.com Tel.: (+ 34) 952 216 406 Fax.: (+ 34) 952 217 115 Paul C. Brown pbrown@linux-magazine.es Tel.: (+ 34) 951 010 556 Fax.: (+ 34) 951 010 516 Para el Resto del Mundo Brian Osborn ads@linux-magazine.com Tel.: (+49) 6509 910 495 Fax.: (+49) 6509 910 497
94
Número 11
Precios Subscripción España: Europa: Resto del Mundo - Euros: Resto del Mundo - Dólares U.S.A.:
49,50 € 59,90 € 79,90 € $ 94,90
Tel.: (+34) 951 010 556 Fax.: (+34) 951 010 516 subs@linux-magazine.es Linux Magazine Linux New Media Spain, S.L. Avda. Juan López Peñalver, 21 29590 - Campanillas Málaga ESPAÑA info@linuxnewmedia.es Tel.: (+34) 951 010 556 Fax.: (+34) 951 010 516
www.linux-magazine.es - España www.linux-magazine.com - Mundo www.linux-magazine.de - Alemania
WWW.LINUX- MAGAZINE.ES
Si bien se toman todas las medidas posibles para garantizar la precisión del contenido de los artículos publicados en Linux Magazine, la editorial no se hace responsable de imprecisiones aparecidas en la revista. Asimismo, Linux Magazine no comparte necesariamente las opiniones vertidas por sus colaboradores 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 escrupulosamente para confirmar que está libre de virus y errores. Copyright y Marcas Registradas © 2004 Linux New Media Spain, S.L. Linux New Media Spain S.L. prohíbe la reproducción total o parcial de los contenidos de Linux 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
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 se requiere 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 domicilio cada mes.
Si por cualquier motivo decides dejar de leer Linux Magazine, puedes cancelar tu subscripción en cualquier momento. Te abonaremos el precio de 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.
PRÓXIMO NÚMERO
Enero 2005: Número 12
PRÓXIMO NÚMERO DISEÑO WEB La tarea de crear y mantener un sitio web es cada vez más sencilla. El mes que viene mostramos cómo llevar la creación de contenidos más allá del HTML y las herramientas Linux que nos ayudan a hacerlo. Empezamos nuestra sección de portada explicando cómo crear una tienda online y cómo montarla utilizando la aplicación de código abierto OsCommerce. OsCommerce es un sistema de catálogo y carrito de la compra que posee una gran cantidad de características. A continuación nos metemos de lleno en el mundo de las hojas de estilo en cascada (CSS), que nos permitirán darle un aspecto profesional a nuestro sitio. Siguiendo con el diseño de páginas con aspectos sorprendentes, demostramos una vez más la flexibilidad de the GIMP en el artículo “Pintando la Web”, dedicado a mostrar como el programa de diseño favorito de la comunidad también sirve para crear páginas HTML. … Y además: Flash bajo Linux, comparativa de editores HTML, edición sencilla con FCKEditor y mucho más.
FILTRADO DE WEB
LINUX USER
Siguiendo todos los buenos consejos de la sección de portada del número 12 de Linux Magazine, ya tenemos en marcha nuestro nueva y flamante web. Pero ¿cómo protegerse de los otros sitios web? ¿Cómo evitar los popups, el javascript no deseado, los cookies y las visitas a páginas inadecuadas? La solución pasa por un filtrador de contenidos es la solución. El mes que viene veremos un par de soluciones que pueden ser la respuesta a estos problemas.
Le damos un poco de color a escritorios aburridos con Zufall y genbg, dos programas que cambian automáticamente el tapiz de fondo de nuestra estación de trabajo. Posteriormente descubriremos nuestras raíces con GRAMPS, un programa para trazar la historia de una familia, crear árboles genealógicos y mucho más. El formato PDF es práctico, pero las herramientas que lo manipulan podrían serlo más. En el número 12 de Linux Magazine,
le echamos un vistazo a pdftk, el PDF Toolkit, un juego de herramientas que nos permitirá manipular documentos de las maneras más insospechadas. Tal vez una de las herramientas de la línea de comandos más misteriosas para el usuario novel de Linux sea sed, el editor de textos no interactivo. Sin embargo, una vez se comprende el funcionamiento básico de este potente programa, uno se pregunta como puede haber sistemas operativos que no lo incluyan.
A LA VENTA: DICIEMBRE 2005 98
Número 11
WWW.LINUX- MAGAZINE.ES
¡Hazte con tus ejemplares atrasados! #1
¡pídelos ya!
#2
#5
#8
¡pídelos ya!
#3
#6
o d a t o g a
#9
¡pídelos ya!
#4
#7
#10
W W W. L I N U X - M A G A Z I N E . E S