Klik LINUX MAGAZINE
Instalación de Software en un solo paso
Edición en Castellano
Última versión de Mandriva Linux
NÚMERO 17
Incluye opción LIVE CD DVD exclusivo Linux Magazine
NÚMERO 17 • P.V.P 6,95 €
Twisted
SCRIPTS
Bash
Scripts
Técnicas para scripts inteligentes
Asterisk Dota a tu empresa de una centralita digital IP p61
Asterisk
Interfaz UNO
Portátiles
Twisted: Aplicaciones de red con Python p16 Optimización de scripts Bash p19 VisualBasic para Linux: RealBasic p21 Scripts TCL para OpenOffice p23
RealBasic
PyUNO Generación de documentos OpenOffice con Python p50
Pelis PSP
NetFilter
Cine PSP Utiliza Linux para cargar películas en tu PlayStation Portátil p77
Klik
ArchLinux
Portátiles
Mudbag
Ponemos a prueba tres portátiles de bajo precio con LINUX p30 WWW.LINUX- MAGAZINE.ES
Limpieza Elimina datos sin dejar ni rastro p41
EDITORIAL
OLI
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.
Estimado Lector de Linux Magazine
omer con Oliver es un auténtico fastidio. No porque no sea buen tío, que lo es, sino porque se pasa la comida señalando con su largo y huesudo dedo teutón cosas sobre la mesa y enunciando con su fuerte acento bávaro: “Ración de 200 gramos de uvas importadas de Suráfrica, número de litros de fuel consumidos en su transporte: 4 . Lata de aluminio para refresco, número de kilos de residuos generados en su producción: 1.7”. Y así sucesivamente. Lo primero que pensé era que sufría una especie de Asperger que sólo le afectaba en la cafetería, lo que me daría material suficiente para escribir un artículo para Nature sobre él. Pero no. Lo único que pasa es que tiene una licenciatura en Ciencias Medioambientales. Podría parecer, pues, que Oli es de aquella subespecie de personas peñazo que, al estilo de Richard Stallman, se divierten haciéndote sentir culpable mientras intentas disfrutar de un cigarrillo o cuando paladeas un tierno filete. Pero, tampoco, más que nada porque las uvas o la lata de refresco (es un compulsivo bebedor de cola) pueden estar perfectamente en su bandeja. Simplemente se dedica a recitar un hecho demostrado en voz alta con su obsesión de Asperger crónico. Puede que se trate de una válvula de seguridad dispuesta para aliviar la presión de su cráneo que se activa cada vez que la información acumulada en su cerebro llega a una masa crítica. (Nota personal: No he de descartar ese artículo para Nature). La cuestión es que, una vez en modo vomita-datos, es difícil resistirse a seguirle el juego. Es como una máquina CIRSA para geeks: metes un sólo dato, tiras de la palanca y te devuelve doscientos. Siempre toca, señora. Claro que puede que te enteres de cosas que no te gustan, como por ejemplo, de que tu teléfono móvil genera 750 veces su peso en CO2 en el transcurso de su vida útil, lo que sig-
C
nifica que contribuyes al aumento del calentamiento global cada vez que llamas a casa desde el super para saber qué marca de champú has de comprar (y eso que tu señora te insistió que lo apuntaras antes de salir). O que para fabricar el ordenador de 25 kilos que tienes en tu puesto de trabajo se generaron 63 kilos de residuos tóxicos, entre los que encontraríamos cantidades nada despreciables de metales pesados como el cadmio, o productos altamente contaminantes como el arsénico. Me gustaría creer que, con lo que acabas de leer, te lo plantearás dos veces antes de cambiar de equipo sólo porque el que posees ahora no puede correr lo último en juegos 3D. Oli también aplica sus conocimientos al panorama político-económico donde está inmerso, ya que también tiene una licenciatura en Ciencias Políticas, lo que le permite combinar sus conocimientos científicos sobre el entorno natural a la macroeconomía y a las políticas sobre software libre de las administraciones españolas. Es un tema que muchos miembros de la comunidad observan con escepticismo, pero Oli es categórico, levanta las palmas hacia arriba y sentencia “A mí me parece muy bien” y pasa a desgranar el porqué. La financiación de proyectos de software libre, como los de las distros a medida, obligan a las compañías designadas a hacer una inversión sustancial en personal. La materia prima (la distro “base”) es gratuita, por tanto no hay desembolso a ninguna empresa extranjera para eso. La inversión en personal fomenta el empleo. Ya tenemos unos pocos programadores menos cobrando el paro. Las ganancias de las empresas y de los trabajadores generan ingresos para el erario público en forma de impuestos que, a no ser que se viva en Marbella, suele repercutir positivamente en la
WWW.LINUX- MAGAZINE.ES
sociedad. Además, una empresa no trabaja en el vacío, lo que obliga a terceras empresas a adoptar o a acomodar el software libre en sus infraestructuras, lo que ayuda a su difusión a nivel corporativo. Nada de esto ocurre si se compra el software de siempre directamente a un proveedor extranjero. Se habla de “dispersión de esfuerzos”, pero en el fondo todo es Linux ¿no? LinEx es Debian, Guadalinex es Ubuntu y así sucesivamente. Si “vestir las distros de folclóricas”, como diría un buen amigo, hace felices a nuestros gobernantes, déjalos que disfruten, ¡criaturas! Aparte de los beneficios económicos que repercuten de forma indirecta en la sociedad, LinEx ha colocado a Extremadura en el mapa tecnológico español, el equipo de desarrollo de Guadalinex ha creado un instalador gráfico para Ubuntu y podemos esperar modificaciones y mejoras en cada nueva distro que saque cada comunidad autónoma, ayuntamiento o pedanía ¿qué más quieres? La diversidad es la vida del software libre. Una distro para cada ocasión y una ocasión para cada distro sería mi lema… si tuviera lema. Sí señor. Tengo que comer más menudo con Oli.
Paul C. Brown Director
Número 17
3
CONTENIDOS • Linux Magazine nº 17
PORTADA 15 Scripting Incluso los expertos son conscientes de que siempre queda algo más por aprender cuando se trata de scripting. En la sección de portada de este mes mostraremos entre otros temas una infraetructura de red para Python y algunas herramientas muy útiles relacionadas.
16 Twisted El entorno de trabajo Twisted facilita enormemente la creación de aplicaciones en red para Python. Twisted soporta los principales protocolos, desde email hasta chat, y admite encriptación. Os mostramos cómo configurar un servidor para páginas Web personales con Twisted.
PRÁCTICO 21 RealBasic Realbasic proporciona una sencilla solución para la conversión de programas en Visual Basic a Linux.
23 TCL para OpenOffice OpenOffice viene de serie con su propio dialecto Basic, un potente lenguaje de macros. Pero no Basic es del gusto de todo el mundo. Los que prefieren Tcl pueden usar este lenguaje para controlar su Office. Con Tcluno e Itcluno se obtienen informes listos para imprimir y tablas con datos a partir de cualquier tipo de fuente.
EVALUACIÓN
19 Bash En los viejos tiempos, las shells tan sólo eran capaces de realizar llamadas externas a programas y ejecutar algunos comandos básicos, los comandos internos. Sin embargo, con todas las novedades añadidas a la última versión de Bash, rara vez hará falta el apoyo de los programas externos.
29 Libros Analizamos el título “Classic Shell Scripting” de la editorial O’Reilly.
30 Portátiles Hemos tomado tres ejemplos de la cosecha actual de portátiles para comprobar cuál se comporta mejor bajo Linux.
6 8 10 11 12 14 94 94 95 97 98
4
Editorial DVD Linux Magazine Inseguridades Noticias Productos Noticias Kernel Correo Eventos Información de Contacto Subscripciones Linux Local Próximo Número
Número 17
Si se busca un sistema estable y rápido sin las capacidades de una GUI, entonces hay que probar Arch Linux.
38 Mudbag Si necesitas una base de datos rápida y sencilla, que sea accesible a través de un navegador Web, échale un vistazo a Mudbag.
41 Limpieza El tema de las copias de seguridad es algo común, pero rara vez se oye a alguien hablando del borrado de datos seguro.
DESARROLLO 45 Perl: Calendarios Debido a que las reglas del calendario están influenciadas por decisiones históricas y políticas, la manipulación de fechas está plagada de trampas. El módulo DateTime de Perl se sabe todos los trucos.
50 Python para OpenOffice ¿Has visto alguna vez a los brokers de bolsa? ¿Recuerdas sus sofisticados y caros programas para ver las cotizaciones de las empresas en bolsa en tiempo real? Nosotros haremos lo mismo con 70 lineas de código Python, OpenOffice y la tecnología UNO de OpenOffice.
LINUX MAGAZINE 3
34 ArchLinux
WWW.LINUX- MAGAZINE.ES
ADMINISTRACIÓN 55 Charly: Webalizer ++ Webalizer es una herramienta para analizar los ficheros de registros de los servidores web. Un nuevo parche le proporciona a los administradores la posibilidad de ver lo que no hay.
56 NetFilter L7 Si se necesita una herramienta para filtrar los protocolos que no dependen de un puerto, entonces hay que probar L7, un parche para IPTables que opera basándose en expresiones regulares.
61 Asterisk Si tu centralita no da para más, sólo necesitas un ordenador para montar una nueva centralita IP con servicios avanzados de telefonía.
LINUX USER 66 Ktools: Klik Klik nos trae la instalación cómoda al escritorio de KDE.
69 Chat con Irssi El cliente chat de la consola Irssi es poderoso aun siendo frugal en el uso de recursos. Su capacidad para correr scripts hacen que sea en un gigante entre todas las herramientas de chat.
72 Desktopia: Wmii Si prefieres gobernar el escritorio desde el teclado, te aconsejamos que le eches un vistazo del potente administrador de ventanas Wmii.
77 Películas PSP Con Linux se pueden cargar películas en una consola de juegos Playstation Portátil (PSP).
■
La última versión de Mandriva Linux
■
Instalación asistida y configuración gráfica sencilla
■
Centro de control para administración simplificada
■
Kernel 2.6.12
■
KDE 3.4.3, Gnome 2.10.2, GCC 4.0.1
■
Incluye funcionalidad de DVD Live
79 Educación Es el momento de preguntarnos si Squeak es la herramienta que facilitará un cambio copernicano en la escuela. Y de intentar responder a una pregunta tan ambiciosa examinando primero actividades creadas con Squeak. .
84 Linea de Comandos: Cat Herramientas prácticas como cat, less, y head son ideales para visionar (y modificar) textos.
86 Juegos: Lugaru Contrastando con la inmejorable calidad gráfica que mostramos el mes pasado con Quake 4, este mes os traemos un título que precisamente no destaca por sus gráficos. Pero de vez en cuando conviene recordar que el aspecto visual no lo es todo en un buen juego, y Lugaru viene dispuesto a demostrarlo.
MÁS DETALLES EN LA Pág 6
COMUNIDAD 88 Konsultorio Si tienes algún problema de configuración, o simplemente quieres conocer mejor cómo funciona Linux, Klaus Knopper, el creador de Knoppix, te ayuda.
91 Opinion Julián Coccia, presidente de Linux Español, denuncia los abusos que cometen ciertas corporaciones con la comunidad del software libre.
WWW.LINUX- MAGAZINE.ES
Número 17
5
DVD LINUX MAGAZINE
MANDRIVA ONE D
esde la fusión de Mandriva y Conectiva, los ingenieros de la nueva compañía, reabautizada con el nombre de Mandriva, han estado trabajando en una nueva distribución con lo mejor de ambas distros de tan buena reputación. La suma posterior de Lycoris añadió aún más picante a la mezla, haciendo de Mandriva una de las distribuciones más versátiles. Mandriva Linux llega con varias versiones y se encuentra disponible en un amplio rango de precios y contratos de servicio. La distribución Mandriva One incluída en este DVD es una versión 100% código abierto de Mandriva, sin aplicaciones o drivers propietarios de código cerrado. Nos sentimos orgullosos de poder ofrecerte Mandriva One 2006 en el DVD de Linux Magazine de este mes.
Ahora Live Mandriva One puede instalarse directamente desde este DVD, pero también
Requerimientos del Sistema
puede arrancarse desde el dispositivo de DVD sin que se vean afectados los contenidos del disco duro. El DVD de Mandriva One sirve tanto como disco de instalación como DVD live. Esta última opción, como DVD live, permite probar Mandriva One en el ordenador antes de decidir sobre su instalación permanente.
Contenido Mandriva One viene con kernel 2.6.12 y X.org 6.9.0. Puede elegirse entre el escritorio KDE 3.4.3 o Gnome 2.10.2. Incluída en este DVD se encuentra una importante colección de las mejores aplicaciones de código abierto. Además de Open Office y Gimp, encontrarás algunas de las favoritas como Firefox 1.0.6, KOffice 1.4.2, Kontact 3.4.2 y Evolution 2.2.3. También incluye AmaroK 1.3.1, K3b 0.12.3 y Kaffeine 0.7, además de herramientas de desarrollo y un surtido de uilidades administrativas.
Instalación Procesador Pentium o mejor Memoria 128 MB mínimo; recomendado 256 MB Disco Duro Partición de 12 GB para la instalación completa del DVD Otros: Lector de DVD autoarrancable (ver la Lista de Compatibilidad Hardware de Mandriva [3] para información adicional o hardware compatible.
Mandriva es fácil de instalar para usuarios finales. Su instalador sigue siendo uno de los mejores de la industria. Soporta unos 50 idiomas y configura automáticamente un amplio espectro de hardware. La instalación incluye algunas opciones de configuración avanzadas y un modo rescate para salvar el sistema en caso de fallo.
Figura 1: Mandriva viene con una simple pero efectiva interfaz de usuario.
6
Número 17
Centro de Control de Mandriva Mandriva Linux 2006 incluye Mandriva Linux Control Center, una de las mejores y más poderosas herramientas de configuración de todo Linux. Este Centro de Control es el lugar central para la configuración del sistema Linux. Desde una única interfaz de usuario se puede administrar software, configurar dispositivos de hardware, establecer conexiones a redes, configurar servicios, añadir o eliminar usuarios, administrar puntos de montaje, configurar cortafuegos de protección personales y establecer opciones de arranque del sistema. Entre las ventanas del Centro de Control encontrarás docenas de herramientas basadas en GUI simples e intuitivas para administrar tu sistema. Muchas de esas herramientas vienen con asistentes que te ayudarán en la configuración.
Pruébalo Ahora El DVD Mandriva One de Linux Magazine arranca fácilmente desde el lector del DVD. La nueva opción de DVD live permite probar la distro de Mandriva sin tener que cambiar la configuración actual. Ahora tienes la oportunidad de explorar esta estimable y altamente considerada distribución Linux con su larga historia y con su nuevo y brillante futuro. ¡Prueba el DVD Mandriva One de Linux ■ Magazine hoy mismo!
Figura 2: Instalando la distribución live de Mandriva One.
WWW.LINUX- MAGAZINE.ES
DVD LINUX MAGAZINE
DESTACADOS Kernel Linux 2.6.12 X.og 6.9.0 KDE 3.4.3 Gnome 2.10.2 GCC 4.0.1 glibc 2.3.5 Gimp 2.2.8 OpenOffice 1.1.5 KOffice 1.4.2 Abiword 2.4.1 Evolution 2.2.3 Kontact 3.4.2 Fiefox 1.0.6 AmaroK 1.3.1 K3b 0.12.3 Kaffeine 0.7 Perl 5.8.7 KDevelop 3.2.2 Python 2.4.1 ¿DVD DEFECTUOSO?
Rosegarden 4.1
Si tu DVD está defectuoso será reemplazado por uno nuevo. Por favor envía un email a dvd@linux-magazine.es
Scribus 1.3.0 Evince 0.4.0
RECURSOS
AYUDA Y SOPORTE
[1] Mandriva: http://www.mandriva.com Mandriva ofrece algunas fuentes de ayuda y soporte. Comienza con los sitios web listados en el cuadro titulado “Recursos Adicionales”. Otras fuentes de ayuda incluyen los foros de Mandriva: http://club.mandriva.com/xwiki/bin/ Forum/ y su documentación oficial: http://club.mandriva.com/xwiki/bin/KB/ OfficialDocumentation. Mandriva One es un producto 100% código abierto que no incluye drivers propietarios.
Figura 3: El Centro de Control de Mandriva facilita la administración del sistema.
[2] Club Mandriva: http://club.mandriva. com [3] Base de Datos Hardware de Mandriva: http://wwwnew.mandriva.com/ hardware
Figura 4: En el Club Mandriva encontrarás atualizaciones y apoyo técnico.
WWW.LINUX- MAGAZINE.ES
Número 17
7
INSEGURIDADES LINUX USER Schlagwort sollte hier stehen
INSEGURIDADES ■ ClamAV ClamAV es un escáner de virus bajo licencia GPL. Zero Day Initiative (ZDI) informó de una serie de fallos de vulnerabilidad. La vulnerabilidad se debe a una comprobación de incorecta del límite de los datos suministrados por el usuario al copiarlos a un búfer de memoria de tamaño insuficiente. Esta vulnerabilidad ocurre cuando la aplicación intenta manipular ficheros UPX comprimidos.
Por ejemplo, enviando un fichero maliciosamente manipulado a un servidor de correo que integra con ClamAv, podría ejecutar código suministrado por un atacante remoto con privilegios escalados. El Proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE – http://cve.mitre.org) ha asignado a este problema el nombre CVE-2006■ 0162.
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 17
WWW.LINUX- MAGAZINE.ES
Referencia Debian: DSA-947-2 Referencia Gentoo: GLSA-200601-07 Referencia Mandriva: MDKSA-2006:016 Referencia Suse: SUSE-SR:2006:001
■ TeTeX TeTeX es una implementación de TeX. TeX es una utilidad que toma un fichero de texto y un juego de comandos de formateo como entradas, y crea como salida un fichero de documento tipográfico independiente .dvi (DeVice Independent). Se han descubierto algunos errores en la librería de procesamiento PDF de TeteX. Un atacante conocedor de estos fallos podría crear un fichero PDF cuidadosamente manipulado que podría hacer que TeTeX ejecutara código arbitrario o que el sistema se colgara cuando el fichero se abriera. El Proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE – http://cve.mitre.org) ha asignado a estos problemas los nombres CVE2005-3191, CVE-2005-3192, CVE-20053193, CVE-2005-3624, CVE-2005-3625, CVE-2005-3626, CVE-2005-3627 y CVE-2005-3628. ■ Referencia Debian: DSA-937-1 Referencia Mandriva: MDKSA-2006:011 Referencia Red Hat: RHSA-2006:0160-14
■ kdelibs kdelibbs contiene librerías para el K Desktop Environment (KDE). Se descubrió un error de pila que afectaba a kjs, un motor de intérprete usado por Konqueror y otras partes de KDE. Un atacante remoto podría crear una web maliciosa conteniendo código JavaScript que podría provocar este fallo y posiblemente dar lugar a que se ejecutara código arbitrario. El Proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE – http://cve.
INSEGURIDADES
mitre.org) ha asignado a este problema el nombre CVE-2006-0019. ■ Referencia Debian: DSA-948-1 Referencia Red Hat: RHSA-2006:0184-11 Referencia Suse: SUSE-SA:2006:003
■ OpenSSH Se descubrió un error en la implementación de la copia local-a-local scp donde los ficheros que contienen los metacaracteres de la shell o los espacios, se expanden dos veces, lo cual podría hacer que se ejecutaran comandos arbitrarios si un usuario local es inducido hasta utilizar scp con un nombre de fichero especialmente manipulado. Las actualizaciones suministradas suponen un avance con respecto a la última versión de OpenSSH editada, la 4.3p1. Existen un importante número de diferencias entre ellas, en primer lugar trata con autenticación PAM respecto a la versión incluida en Corporate 3.0 y MNF2. En particular, el
predeterminado sshd_config ahora solamente acepta conexiones al protocolo 2, mientras que UsePAM se encuentra por defecto deshabilitado. Sobre sistemas que usan métodos de autenticación alternos (por ejemplo, LDAP) que hacen uso de la pila PAM para la autenticación, será necesario habilitar UsePAM. A destacar que el fichero predeterminado /etc/pam.d/sshd file también ha sido modificado para usar el módulo pam_listfile.so, el cual denegará el acceso a cualquier usuario listado en /etc/ssh/denyusers (por defecto, éste es el superusuario solamente). Esto es requerido para preservar el comportamiento esperado y habitual cuando se usa “PermitRootLogin without-password”; por otra parte, sería posible obtener el login de la línea de comando y el login sin tener que usar ■ claves. Referencia Mandriva: MDKSA-2006:034 Referencia Suse: SUSE-SR:2006:003
■ gd El paquete gd contiene una librería gráfica usada para la creación dinámica de imágenes tales como PNG y JPEG. gd permite la generación de imágenes utilizando diversos lenguajes como PHP, Perl, Python y C/C++. Es muy utilizado para la generación de imagenes embebidas en páginas web. Se encontraron algunos fallos de desbordamientos de búfer en el modo en el que gd asigna la memoria. Un atacante podría crear una imagen cuidadosamente manipulada que provocaría la ejecución de código arbitrario malicioso cuando fuera abierta por la víctima usando un programa vinculado a la librería gd. El Proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE – http://cve.mitre.org) ha asignado a este problema el nombre CVE-2006-0941. ■ Referencia Red Hat: RHSA-2006:0194-4 Referencia Suse: SUSE-SR:2006:003
NOTICIAS LINUX USER
Schlagwort sollte hier stehen
Comisión del Mercado de Telecomunicaciones, Secretaria de Estado de Telecomunicaciones, Jurado de la Publicidad y Ministerio de Industria, Google es culpable de que…
NOTICIAS GOOGLE Y MICROSOFT EN LA PICOTA (OTRA VEZ) Nota a Google: cambiar lema a “Don’t infringe on other people’s trademarks”, y aplicarlo en todos los países incluso en España, por muy del tercer mundo que se nos considere. Por si no ha quedado claro, la palabra Linux no es una palabra como “silla”, “mesa” u “ornitorrinco”, sino que es una marca registrada que pertenece a Linus Torvalds y que administra el Linux Mark Institute (ver enlace al pie de esta noticia), un organismo sin ánimo de lucro que vigila que no se abuse del término sin sufrir las consecuencias, que hay mucho listo suelto… Como los de Google España, que no han tenido mejor idea que “vender” el vocablo Linux a nada menos que a Microsoft, como plataforma de su campaña “Conozca los hechos”. Si uno, a día de hoy (3 de abril del 2006), introduce la palabra “linux” en el buscador Google.es, lo primero que aparece es un enlace al sitio de Microsoft. Esto representa una clara violación de la marca de Torvalds. Y así lo ha denunciado Jose María Lancho, abogado y coordinador de la Asociación Legalventures. En palabras de la denuncia presentada ante La
10
Número 17
En ningún caso aparezca la palabra publicidad [sino] patrocinio [creando] una confusión para el usuario y consumidor medio que no advierte hasta mucho más tarde que se trata de publicidad. Asimismo, ningún titular legítimo de derechos sobre la marca LINUX ha contratado o autorizado a GOOGLE semejante campaña publicitaria. Para más adelante señalar que… La empresa GOOGLE INC ha sido ya condenada en varios países europeos por […]: 1) violación de la propiedad industrial (marcas) e intelectual 2) publicidad irregular 3) Inducción a error a los consumidores sobre la identidad del prestador de servicios En cuanto a Microsoft y su Conozca los Hechos, según la denuncia, la campaña no es que raye la ilegalidad, sino que se planta de llena en ella ya que: [se] considera desleal la publicidad comparativa, “cuando no se apoye en características esenciales, afines y objetivamente demostrables de los productos o servicios, o cuando se contrapongan bienes o servicios con otros no similares o desconocidos, o de limitada participación en el mercado” y que…
WWW.LINUX- MAGAZINE.ES
La publicidad comparativa exige: 1.- Identificar que la publicidad es publicidad, lo que no ocurre en la página de MICROSOFT IBÉRICA, S.L. 2.- Que la publicidad no sea engañosa. En el presente asunto concurre asimismo que el caso estrella de la publicidad comparativa de MICROSOFT es el de la denominada migración de la empresa TOMMY HILFIGER que sustituyó el sistema Red Hat Linux por Windows Server y “mientras adquiría nuevas actitudes de negocios y ahorraba entre un 25 y un 30 por ciento de sus costes de IT”. Pues bien, esto es incierto y se narra de una forma completamente engañosa. A continuación, la denuncia describe con todo lujo de detalles, y gracias a la labor de peritaje de Julián Coccia, presidente de Linux Español y colaborador habitual de Linux Magazine, cómo en realidad las tiendas online del señor Hilfiger están servidas desde máquinas Linux que corren OpenCMS sobre Apache. En una entrevista telefónica entre Lancho y Linux Magazine, el abogado señaló que “a pesar del desconocimiento que impera sobre la red en el ámbito de los juristas, a ésta deben aplicarse las mismas reglas que a los otros medios en lo que se refiere a publicidad. No es de recibo el abuso que hacen ciertas corporaciones de ella.” Aaaaamén Linux Mark Institute: http://www. linuxmark.org/ Conozca los (des)hechos: http://www. microsoft.com/spain/servidores/hechos/ default.mspx
PRODUCTOS
PRODUCTOS LINUX INDOLORO (E INODORO) Según la rumo-red dedicada a estas cosas, la Junta de Andalucía pondrá en marcha en breve un proyecto que, por usar la jerga política, acercará aún más el uso de las tecnologías libres a los hogares andaluces… Bueno, de hecho a cualquier hogar que cuente con un mínimo de ancho de banda. Siguiendo la premisa de que el ordenador es la red (o viceversa), lo que se pretende es equipar a todo el mundo, indiferentemente de la plataforma, prestaciones de la máquina o del software
… Y MÁS DE LO PARECIDO Michael Robertson, el hombre tras Linspire, Gizmo, el concurso para portar Linux a la Xbox y mil y otros inventos más (inventos que, en muchos casos, son más humo que prácticos), se ha decantado por lo último que limpia, fija y da esplendor a la web. Correcto: Ajax. Robertson es famoso, entre otras cosas, por ser un recalcitrante dolor en el culo para ciertas empresas con aspiraciones monopolistas, pero también por arriesgarse a implementar ideas alocadas, a menudo a medio cocer, pero con un gran impacto
instalado nativamente, de una serie de aplicaciones, tanto ofimáticas como corporativas, para su explotación remota. Me explico: a través de un cliente NX, los usuarios podrán acceder a servidores (implementados sobre Guadalinex, of course) de aplicaciones dispuestos a tal fin. ¿Que no tienes un procesador de textos? No problema. Accedes al cluster de la Junta, se te abre tu escritorio (GuadaLinex) remoto y a teclear. ¿Que necesitas una solución ERP para tu negocio? Pues lo mismo y a pasar facturas. Lo que no tenemos claro es cómo se resuelve el problema de los ficheros
mediático. Y su entrada a la web 2.0 no ha sido diferente: Robertson promete, con su nuevo proyecto, ajaxLaunch.com, poner en línea una nueva aplicación a la semana, hasta completar una suite ofimática completa que no necesitará ningún tipo de instalación, será multiplataforma y ofrecerá una interfaz similar a las de las aplicaciones con las que ya estamos familiarizados. En el momento de escribir la presente reseña, ha puesto a disposición de los internautas ajaxWrite, un procesador de textos al
Figura 1: Diseña gráficos vectoriales online con el programa AjaxSketch.
12
Número 17
generados. Si NX los guarda en el sistema remoto ¿cómo accederá el usuario a ellos para imprimirlos, grabarlos en su pendrive, etcétera? Y el otro asunto, es que queda por ver si este tipo de acciones realmente ayudan a la difusión del software libre o más bien la obstaculizan al no obligar a los usuarios a migrar de plataforma. En todo caso como servicio al ciudadano no está nada mal. Se nos ocurren muchas otras maneras más tontas de gastar el dinero del contribuyente.
estilo Write de OpenOffice, y ajaxSketch, un programa de diseño vectorial al estilo de Inkscape. Según Robertson, ajaxWrite puede abrir y guardar documentos en varios formatos, incluyendo los de Microsoft Office, mientras que ajaxSketch implementa las funcionalidades esenciales de un programa de diseño… Bueno, más o menos: según nuestras pruebas, los documentos guardados desde y cargados en ajaxWrite, contenían errores de formato. También las prestaciones de ajaxSketch son tirando a muy limitadas. Sin embargo, como muchas de las cosas que emprende el CEO de Linspire, los resultados son cuando menos sorprendentes y pueden verse como otro paso más en el camino hacia el ordenadores-la-red. El sitio de AjaxLaunch: http://www. Figura 2: Utiliza el procesador de textos basado en ajaxlaunch.com/ web AjaxWrite para crear documentos.
WWW.LINUX- MAGAZINE.ES
NOTICIAS LINUX USER
Schlagwort sollte hier stehen
Comisión del Mercado de Telecomunicaciones, Secretaria de Estado de Telecomunicaciones, Jurado de la Publicidad y Ministerio de Industria, Google es culpable de que…
NOTICIAS GOOGLE Y MICROSOFT EN LA PICOTA (OTRA VEZ) Nota a Google: cambiar lema a “Don’t infringe on other people’s trademarks”, y aplicarlo en todos los países incluso en España, por muy del tercer mundo que se nos considere. Por si no ha quedado claro, la palabra Linux no es una palabra como “silla”, “mesa” u “ornitorrinco”, sino que es una marca registrada que pertenece a Linus Torvalds y que administra el Linux Mark Institute (ver enlace al pie de esta noticia), un organismo sin ánimo de lucro que vigila que no se abuse del término sin sufrir las consecuencias, que hay mucho listo suelto… Como los de Google España, que no han tenido mejor idea que “vender” el vocablo Linux a nada menos que a Microsoft, como plataforma de su campaña “Conozca los hechos”. Si uno, a día de hoy (3 de abril del 2006), introduce la palabra “linux” en el buscador Google.es, lo primero que aparece es un enlace al sitio de Microsoft. Esto representa una clara violación de la marca de Torvalds. Y así lo ha denunciado Jose María Lancho, abogado y coordinador de la Asociación Legalventures. En palabras de la denuncia presentada ante La
10
Número 17
En ningún caso aparezca la palabra publicidad [sino] patrocinio [creando] una confusión para el usuario y consumidor medio que no advierte hasta mucho más tarde que se trata de publicidad. Asimismo, ningún titular legítimo de derechos sobre la marca LINUX ha contratado o autorizado a GOOGLE semejante campaña publicitaria. Para más adelante señalar que… La empresa GOOGLE INC ha sido ya condenada en varios países europeos por […]: 1) violación de la propiedad industrial (marcas) e intelectual 2) publicidad irregular 3) Inducción a error a los consumidores sobre la identidad del prestador de servicios En cuanto a Microsoft y su Conozca los Hechos, según la denuncia, la campaña no es que raye la ilegalidad, sino que se planta de llena en ella ya que: [se] considera desleal la publicidad comparativa, “cuando no se apoye en características esenciales, afines y objetivamente demostrables de los productos o servicios, o cuando se contrapongan bienes o servicios con otros no similares o desconocidos, o de limitada participación en el mercado” y que…
WWW.LINUX- MAGAZINE.ES
La publicidad comparativa exige: 1.- Identificar que la publicidad es publicidad, lo que no ocurre en la página de MICROSOFT IBÉRICA, S.L. 2.- Que la publicidad no sea engañosa. En el presente asunto concurre asimismo que el caso estrella de la publicidad comparativa de MICROSOFT es el de la denominada migración de la empresa TOMMY HILFIGER que sustituyó el sistema Red Hat Linux por Windows Server y “mientras adquiría nuevas actitudes de negocios y ahorraba entre un 25 y un 30 por ciento de sus costes de IT”. Pues bien, esto es incierto y se narra de una forma completamente engañosa. A continuación, la denuncia describe con todo lujo de detalles, y gracias a la labor de peritaje de Julián Coccia, presidente de Linux Español y colaborador habitual de Linux Magazine, cómo en realidad las tiendas online del señor Hilfiger están servidas desde máquinas Linux que corren OpenCMS sobre Apache. En una entrevista telefónica entre Lancho y Linux Magazine, el abogado señaló que “a pesar del desconocimiento que impera sobre la red en el ámbito de los juristas, a ésta deben aplicarse las mismas reglas que a los otros medios en lo que se refiere a publicidad. No es de recibo el abuso que hacen ciertas corporaciones de ella.” Aaaaamén Linux Mark Institute: http://www. linuxmark.org/ Conozca los (des)hechos: http://www. microsoft.com/spain/servidores/hechos/ default.mspx
PRODUCTOS
PRODUCTOS LINUX INDOLORO (E INODORO) Según la rumo-red dedicada a estas cosas, la Junta de Andalucía pondrá en marcha en breve un proyecto que, por usar la jerga política, acercará aún más el uso de las tecnologías libres a los hogares andaluces… Bueno, de hecho a cualquier hogar que cuente con un mínimo de ancho de banda. Siguiendo la premisa de que el ordenador es la red (o viceversa), lo que se pretende es equipar a todo el mundo, indiferentemente de la plataforma, prestaciones de la máquina o del software
… Y MÁS DE LO PARECIDO Michael Robertson, el hombre tras Linspire, Gizmo, el concurso para portar Linux a la Xbox y mil y otros inventos más (inventos que, en muchos casos, son más humo que prácticos), se ha decantado por lo último que limpia, fija y da esplendor a la web. Correcto: Ajax. Robertson es famoso, entre otras cosas, por ser un recalcitrante dolor en el culo para ciertas empresas con aspiraciones monopolistas, pero también por arriesgarse a implementar ideas alocadas, a menudo a medio cocer, pero con un gran impacto
instalado nativamente, de una serie de aplicaciones, tanto ofimáticas como corporativas, para su explotación remota. Me explico: a través de un cliente NX, los usuarios podrán acceder a servidores (implementados sobre Guadalinex, of course) de aplicaciones dispuestos a tal fin. ¿Que no tienes un procesador de textos? No problema. Accedes al cluster de la Junta, se te abre tu escritorio (GuadaLinex) remoto y a teclear. ¿Que necesitas una solución ERP para tu negocio? Pues lo mismo y a pasar facturas. Lo que no tenemos claro es cómo se resuelve el problema de los ficheros
mediático. Y su entrada a la web 2.0 no ha sido diferente: Robertson promete, con su nuevo proyecto, ajaxLaunch.com, poner en línea una nueva aplicación a la semana, hasta completar una suite ofimática completa que no necesitará ningún tipo de instalación, será multiplataforma y ofrecerá una interfaz similar a las de las aplicaciones con las que ya estamos familiarizados. En el momento de escribir la presente reseña, ha puesto a disposición de los internautas ajaxWrite, un procesador de textos al
Figura 1: Diseña gráficos vectoriales online con el programa AjaxSketch.
generados. Si NX los guarda en el sistema remoto ¿cómo accederá el usuario a ellos para imprimirlos, grabarlos en su pendrive, etcétera? Y el otro asunto, es que queda por ver si este tipo de acciones realmente ayudan a la difusión del software libre o más bien la obstaculizan al no obligar a los usuarios a migrar de plataforma. En todo caso como servicio al ciudadano no está nada mal. Se nos ocurren muchas otras maneras más tontas de gastar el dinero del contribuyente.
estilo Write de OpenOffice, y ajaxSketch, un programa de diseño vectorial al estilo de Inkscape. Según Robertson, ajaxWrite puede abrir y guardar documentos en varios formatos, incluyendo los de Microsoft Office, mientras que ajaxSketch implementa las funcionalidades esenciales de un programa de diseño… Bueno, más o menos: según nuestras pruebas, los documentos guardados desde y cargados en ajaxWrite, contenían errores de formato. También las prestaciones de ajaxSketch son tirando a muy limitadas. Sin embargo, como muchas de las cosas que emprende el CEO de Linspire, los resultados son cuando menos sorprendentes y pueden verse como otro paso más en el camino hacia el ordenadores-la-red. El sitio de AjaxLaunch: Figura 2: Utiliza el procesador de textos basado en http://www. ajaxlaunch.com/ web AjaxWrite para crear documentos.
WWW.LINUX- MAGAZINE.ES
Número 17
11
NOTICIAS DEL KERNEL LINUX USER Schlagwort sollte hier stehen
NOTICIAS DESDE EL KERNEL ESTADO DE LA ELIMINACIÓN DE OSS Desde hace algún tiempo, Adrian Bunk ha estado ocupado en la eliminación del driver obsoleto OSS . Uno a uno, va cazando esos drivers, trabaja en la mejora de sus equivalentes ALSA, reúne información y elimina cada driver OSS procurando que no afecte negativamente al resto del sistema. Hace poco emitió otra petición de ayuda. Los tres casos que desea identificar son, en primer lugar, drivers ALSA plenamente funcionales para el mismo hardware que dispone de drivers OSS, en segundo lugar, drivers ALSA rotos o problemáticos para hardware que dispone de drivers OSS, y por último, drivers OSS que no disponen de equivalentes ALSA. Para los drivers de la primera categoría, planea un programa agresivo de eliminación de equivalentes OSS. Para drivers de la segunda categoría, plantea un marco temporal en el cual se informarán de errores en los drivers ALSA. Todos los drivers OSS sin equivalentes ALSA se mantendrán en el kernel. Cada una de estas peticiones de llamada ha tenido como resultado progresos significativos. Existen aproximadamente 50 drivers que todavía han de ser eliminados, arreglados o portados a ALSA por alguien.
CONFUSIÓN DE LICENCIAS EN CÓDIGO ANTIGUO Greg Kroah-Hatman ha descubierto un cierto número de ficheros que han estado en el kernel durante años (o al menos desde antes de la utilización de BitKeeper) y que portan destacados avisos de restricciones de copyright que dicen cosas como: “este es código fuente propietario y sin publicar de Motorola”. Resulta que el código posee una licencia correcta tipo GPL, tal y como reza un LEEME en el mismo directorio. Pero Greg y otros piensan que el lenguaje utilizado en los ficheros fuente podría resultar confuso para todo aquel que no supiera la verdad del asunto. El verdadero dueño del código resulta ser Freescale, un spin-off de Motorola desde julio del 2004. Matt Waddel de Freescale, se ha ofrecido a modificar los avisos de copyright para que resulten menos confusos. Pero tal y como ha indicado Alan Cox, nunca ha existido un problema con los avisos de copyright, por tanto las modificaciones de Matt serán simplemente para tranquilizar a los desarrolladores. No cambia el significado legal de los avisos.
CONFIGURACIÓN SATA Randy Dunlap ha remitido recientemente un parche para mover la configuración SATA desde la zona SCSI a su propia sección. La razón para esto es que los
La lista de correo del kernel de Linux comprende lo principal de las actividades de desarrollo de Linux. El volumen del tráfico es inmenso, alcanzándose a menudo los diez mil mensajes semanales. Mantenerse al día de todo lo que sucede en el desarrollo del kernel es casi imposible para una sola persona. Sin embargo Zack Brown es uno de los pocos valientes que lo intentan y a partir de ahora, podrá leerse lo último de las discusiones y decisiones con respecto del kernel de Linux llevados de la mano de este experto. Zack ha publicado un resumen online semanal llamado “The Kernel Traffic Newsletter” durante cinco años. Linux Magazine te trae ahora la quintaesencia de las actividades del kernel de Linux del mayor especialista en el tema.
12
Número 17
WWW.LINUX- MAGAZINE.ES
usuarios no necesitan saber de esta configuración SCSI para poder utilizar SATA. Aunque esta idea no sea completamente obvia, la reacción de los desarrolladores del kernel ha sido en general muy positiva, con contribuciones de gente que han presentado varias sugerencias para el parche. Pero ha sido el mismo Randy quien ha echado el freno a futuros desarrollos del parche de configuración SATA propuesto, alegando que lo que más le interesaba era saber la opinión de otros miembros sobre la propuesta, no que se aceptara el parche en el kernel. A pesar de ello, parece que la idea en sí es bastante sólida y con el soporte de otros desarrolladores, es casi inevitable que un parche como éste acabe formando parte del kernel de Linux.
ESTADO DE LA INCLUSIÓN DE REISER 4 La actitud de muchos desarrolladores hacia la inclusión de Reiser 4 en el kernel parece ser la de una estudiada indiferencia. Según muchos de ellos, los desarrolladores de Reiser simplemente han de “someterlo a un estado en que se posibilite su inclusión”, lo que sugiere que la comunicación entre los desarrolladores del kernel, por un lado, y de Reiser, por el otro, se ha derrumbado. Según los desarrolladores del kernel, se ha explicado de manera suficientemente detallada lo que la gente de Reiser ha de hacer y lo único que queda es que vayan y lo hagan. Cosa que todavía no ha ocurrido. Habitualmente, cuando alguien de la lista escribe un mensaje preguntando por el estado de una característica del kernel, cualquiera con los conocimientos suficientes da una estimación del estado de esa característica. Con ReiserFS, no sólo la gente de Reiser no parece dispuesta a adelantar una estimación, sino que la gente del kernel sólo llega a especular de manera vaga.
NOTICIAS DEL KERNEL
Las peticiones para más información se refieren a los archivos históricos de la lista, lo que sugiere que el progreso se encuentra en un punto muerto, o al menos así es como lo perciben los desarrolladores del kernel. Parece que, al menos de momento, las dos partes han caído en un diálogo de sordos. Si el desarrollo del kernel sigue como hasta ahora, algún día la gente de Reiser remitirá más parches, y estos parches serán evaluados por quien esté dispuesto a evaluarlos o serán ignorados si los problemas descritos con anterioridad no se resuelven.
ESTADO DEL RAW DRIVER Adrian Bunk ha hecho un esfuerzo por eliminar el driver Raw del árbol 2.6 del kernel. Este driver se marcó como obsoleto y se erigió en candidato para ser eliminado desde la versión 2.6.3, pero puede que sea más difícil de quitar de lo que se pensó en un principio. El driver Raw permite que se ejecuten entradas y salidas en bruto sobre dispositivos de bloques. Pasando O_DIRECT a la llamada del sistema open() realiza una función similar , constituyéndose en la técnica
recomendada, por lo que se tomó la decisión de hacer obsoleto y eliminar el driver en diversos pasos a lo largo del tiempo. Sin embargo, muchos proveedores de software siguen sin haber convertido su código a O_DIRECT y, hasta que lo hagan, habrá una activa resistencia a la eliminación del driver. Tal y como dijo Alan Cox: “el convertir en obsoleto cosas que son internas de la configuración de la distribución es un tema, pero las cosas relacionadas con llamadas al núcleo del sistema son otra historia”. A pesar de las razones para no eliminar el driver, la confusión que provoca este problema es un gran inconveniente para Adrian, quien se encarga de limpiar el kernel de forma habitual, y que ahora se encuentra con que parte de su trabajo ha sido en vano. Estas cosas suceden. Puede que el driver Raw no pueda ser nunca eliminado. A menudo ocurre que una decisión sobre tal o cual característica del kernel se toma de manera precipitada, de modo que cuando los desarrolladores se dan cuenta ya es demasiado tarde, a pesar de que el mundo de los usuarios dependa de ella.
En el peor de los casos, si se hace un intento por rescindir una mala decisión, y ese intento falla, ambos estados se han de mantener durante mucho tiempo. En otros caso no tan desafortunados, el marcar algo como “obsoleto” ha sido suficiente para que la mayor parte del mundo de los usuarios hayan convertido su código al mejor de ambos sistemas. Puede que la conversión a O_DIRECT tenga éxito y Adrian pueda eliminar el driver.
DRIVER DEL FRAMBUFFER Michael Hanselmann ha remitido un parche para eliminar un driver para el framebuffer ATI Radeon, que ya había sido sustituido por uno más moderno. El driver eliminado se había marcado como “obsoleto” y no había recibido actualizaciones de importancia desde el 2002. La reacción entre los desarrolladores del kernel más importantes ha sido totalmente positiva, a pesar de que el nuevo driver todavía presenta algunos problemas. Tal y como ha señalado David Miller, la rutina de blanqueado de la pantalla puede confundir al sistema X Windows, haciendo que sea más difícil recuperar la pantalla.
CORREO LINUX USER
Schlagwort sollte hier stehen
Correo del Lector
ACCESO DE ESCRITURA Estimados amigos de Linux Magazine, Trabajo en el departamento de informática de un empresa dedicada a la administración de fincas. tenemos sucursales por toda la región y la infraestructura TI está basada íntegramente en sistemas Windows. Estaba pensando en hablar con mi jefe para intentar convencerle de migrar nuestros sistemas a Linux. Yo quisiera que la migración se aplicara tanto a nivel de servidor como de escritorio. Para los servidores voy a proponer Debian y para los clientes Suse o Mandriva. Pero creo que voy a encontrar bastante resistencia a mi propuesta y quisiera saber si tenéis algún consejo para enfocarlo de manera que aprueben mi idea. Un saludo Jose Antonio
LM Estimado Antonio, Todo depende de quién sea tu “jefe”. Si por tu jefe te refieres al responsable del departamento TI, puede que sea más fácil, por que podrás explicarle ventajas técnicas que tal vez la administración de la empresa no alcance a entender. Tu jefe, puede llegar a convertirse en tu aliado y podrá traducir tus argumentos a términos digeribles para los responsables de la administración. Si por tu jefe, te refieres al JEFE, pues lo tienes más difícil, puesto que probablemente no tenga ninguna preparación técnica y tendrás que vertebrar tus argumentos en función del ahorro y la productividad. Si no puedes reducir tu propuesta a estos dos puntos, ningún responsable te dará luz verde. Independientemente de con quién tengas que hablar, a continuación te damos unas cuantos consejos para cuando presentes tu plan:
14
Número 17
Olvídate del factor “libre” en el software libre No menciones “libertad” y “filosofía”. Tu empresa, de la única “libertad” que entiende es de la libertad de hacer dinero y la única “filosofía” que aplica es la de los beneficios. Es duro decirlo, pero si mencionas la palabra “libre”, los problemas están garantizados. Habla de la funcionalidad de Linux, habla de aplicaciones, pero olvídate de “libre”. Ni siquiera las grandes empresas supuestamente abanderadas del software libre le dan importancia a la libertad del código a no ser que estén ante un auditorio de 1000 geeks de la comunidad. A tus jefes ni siquiera les interesará saber nada del “código abierto”. Si no se es une empresa de desarrollo, no tiene ningún sentido disponer del código fuente, y si mencionas que todo el mundo le puede meter mano al código, inmediatamente se imaginarán programas repletos de virus, troyanos y puertas traseras. Ninguna explicación sobre auditorías y controles de versiones ayudarán a disipar esa imagen. No vendas la idea de que Linux es gratis Más que nada por que no lo es. Puede que no se cobre una licencia (y eso depende de la distribución, ver punto siguiente), pero la inversión que se ha de hacer en tiempo y formación no es despreciable. Nadie puede cambiarle un sistema operativo a una máquina instantáneamente y el tiempo que se utiliza en la instalación, configuración y ajustes es tiempo que se ha de pagar. Por tanto, de gratis, nada. ¿Que se ahorrarán una pasta en licencias? probablemente, pero tu jefe tendrá que hacer una inversión inicial por otro lado. Haz tus cuentas para medio y largo plazo y, si te salen, tendrás un fuerte argumento a tu favor. Escoge una distro con soporte Dices que la empresa tiene varias sucursales repartidas por la región. Pues bien, si dispones de un departamento de soporte informático con al menos un administrador de sistemas ducho en Linux y dispuesto a jugarse su puesto (y tú estás dispuesto a
WWW.LINUX- MAGAZINE.ES
jugarte el tuyo) en cada sucursal de la empresa, puede que sea factible tu plan de instalar Debian. Si no es así, olvídalo. Escoge una distro con soporte técnico telefónico y/o presencial para cuando las cosas vayan mal. Tendrás que elegir una empresa que cobrará una licencia por sus servicios, pero el precio no debería ser un factor tremendamente determinante si la solución es claramente superior ¿verdad? Además, tu posición en la empresa no correrá riesgos. Elige bien tu caballo de batalla No entres con el argumento “Linux es mejor”. Eso sólo funciona en los anuncios de detergentes… bueno, de hecho incluso esos anuncios esgrimen argumentos más sólidos. Examina la infraestructura actual y escoge un punto donde Linux puede ofrecer un mejor servicio tangible y que la mejora sea tan clara, que no migrar sería una irresponsabilidad. Imaginemos que tienemos un servicio colaborativo en red que funciona sobre un servidor con un sistema operativo propietario que inhibe la productividad por que hay que reiniciarlo dos o tres veces por semana. Los clientes sólo pueden visualizar las páginas con Explorer, lo que supone un problema de seguridad, y que sólo admite conexiones con un tipo de base de datos (también propietario). Si tu puedes demostrar que puedes habilitar un sistema similar (Plone, por ejemplo) que permita el acceso desde cualquier plataforma (Windows, Linux y Mac), con cualquier navegador, con un uptime superior y que tiene una mejor integración con una mayor variedad de bases de datos (incluyendo el que utiliza tu empresa en ese momento), tienes buenas posibilidades de que te digan que adelante. Si dices: “Cambiemos todo a Linux”, lo normal es que salgas con un palmo de narices.
Puedes enviar tus comentarios y sugerencias a: correo@linux-magazine.es
www.almogon.de
Migrar no es tan fácil
Secretos de Scripting • PORTADA
Nuevas Nuevas herramientas herramientas yy técnicas técnicas para para guiones guiones Linux Linux
SECRETOS DE SCRIPTING Incluso los expertos son conscientes de que siempre queda algo más por aprender cuando se trata de scripting. En la sección de portada de este mes mostraremos entre otros temas una infraetructura de red para Python y algunas herramientas muy útiles relacionadas. POR JOE CASAD a escritura de guiones siempre ha sido fácil en Linux. El diseño del sistema fomenta la automatización y existen docenas de herramientas de scripting disponibles de manera gratuita gracias a la siempre inventiva comunidad de Código Abierto. El arte del scripting es casi tan antiguo como el arte de trastear con los ordenadores. La mayoría de los usuarios Linux están más o menos familiarizados con las técnicas de escritura de guiones. Entonces, ¿por qué insisitimos en hablar de ello? Pues por la sencilla razón de que este viejo arte está sufriendo cambios, e incluso los expertos saben que han de mantenerse al día. En el número de este mes nos centraremos en herramientas Linux para scripting. En las páginas que siguen, echaremos una ojeada a Twisted, una infraestructura para la creación de aplicaciones de red en Python. Twisted resuelve los archiconocidos problemas de direccionamiento de redes, permitiéndonos concentrarnos en los detalles críticos. La infraestructura de Twisted dispone de módulos para protocolos SSH, SFTP, HTTP y NNTP, así como para POP3, IMAP y otros. También se hablará sobre Realbasic, un entorno de desarrollo visual que nos ayuda a correr aplicaciones Visual Basic
L
en Linux. Mostraremos las características de Visual Basic que funcionan en Linux y contaremos los sitios donde aún queda trabajo por hacer para conseguir la compatibilidad total. Seguiremos nuestro estudio sobre scripting con un repaso a las técnicas de mejora en Bash que ayudarán a conseguir que nuestros scripts corran más rápidamente. Seguidamente veremos cómo utilizar Tcl para la generación programática de hojas de cálculo y diagramas en OpenOffice, algo que sin duda será de gran utilidad a los que necesiten crear grandes volumenes de documentos con distintas colecciones de datos de manera habitual. Finalizaremos nuestro repaso a las técnicas de scripting con una incursión en un clásico del género: awk, el lenguaje de proce-
samiento de texto omnipresente en los sistemas Unix/Linux. En portada este mes tratamos de nuevas herramientas, trucos nuevos para viejas herramientas, extensiones para herramientas familiares y otras técnicas que resaltan la superioridad y flexibilidad de Linux sobre otros sistemas. Se aconseja su lectura, y probablemente se descubrirá algo necesario para el arsenal de secretos de scripting que todo programador y administrador nece■ sita.
TEMA DE PORTADA Twisted . . . . . . . . . . . . . . . . . . . . . . . . . .16 Bash Tuning . . . . . . . . . . . . . . . . . . . . . . .19 Realbasic . . . . . . . . . . . . . . . . . . . . . . . . .21 OpenOffice . . . . . . . . . . . . . . . . . . . . . . . .23
WWW.LINUX- MAGAZINE.ES
Número 17
15
PORTADA • Twisted
Crear aplicaciones en red con Twisted
SERPIENTES El entorno de trabajo Twisted facilita
enormemente
la
creación de aplicaciones en red
para
Python.
Twisted
soporta los principales protocolos, desde email hasta chat, y admite encriptación. Os mostramos cómo configurar un servidor para páginas Web personales con Twisted. POR MARKUS FRANZ
gramador (baterías incluidas, según la jerga Python), algunas aplicaciones especiales pueden requerir paquetes externos. Twisted [1] es una potente y bien organizada colección de módulos para añadir funcionalidades de red a los programas en Python. Si estamos codificando un cliente de correo electrónico con soporte multiprotocolo (POP 3, SMTP, IMAP), el entorno de trabajo Twisted nos librará de tener que empezar desde cero. Twisted Mail incluye todos los protocolos importantes. Twisted tiene también módulos listos para usar de SSH, SFTP, HTTP (incluyendo HTTP/ 1.1), DNS, NNTP y Jabber. Si aún así queremos re-inventar la rueda implementando nuestros propios protocolos, los módulos twisted.cred y twisted.spread nos pueden ayudar a simplificar el trabajo.
L
cuando se llaman. La aplicación continúa ejecutándose hasta que se le comunica que ya está disponible la información requerida. Aunque las librerías estándar de Python soportan esto (el módulo asyncore tiene funcionalidades básicas para conmutar entre múltiples canales I/O dentro de un hilo), Twisted implementa este diseño a un nivel mayor en sus protocolos, interfaces y componentes. Esto permite a los programadores escribir aplicaciones de red que funcionan sin necesidad de procesos e hilos adicionales, controlando al mismo tiempo múltiples canales I/O.
Altamente modular Para crear con Twisted nuestro propio software orientado a red, tendremos que determinar en primer lugar qué parte del marco de trabajo necesitamos. Los desarrolladores dividieron Twisted en varios subproyectos cuando se pasó de la versión 1 a la 2, con el objetivo de añadir más claridad. La Tabla 1 tiene una lista de los elementos más importantes, y existe una lista completa en [2].
a mayoría de los programadores Conectar Asíncronamente se encuentran tarde o temprano con la tarea de añadir funcionaliTwisted es, básicamente, un marco de dades de comunicación a sus aplicatrabajo para comunicaciones asíncronas. ciones. Si se trata simplemente de modiAl contrario que otras librerías, las funficar el contenido de una página Web, ciones de Twisted no provocan bloqueo existeN soluciones sencillas. Pero funcionalidades más Tabla 1: Secciones Man complejas, como añadir twisted Marco de trabajo para aplicaciones asíncronas, la base de todos los subproyectos Twisted capacidad de correo electwisted.conch Implementación de los protocolos SFTP y SSH para clientes y servidores trónico o un servidor Web twisted.web Protocolo HTTP para clientes y servidores completo, requieren un twisted.web2 Soporte para el protocolo HTTP/ 1.1 como marco de trabajo del servidor. Este paquete está esfuerzo mucho mayor. aún en desarrollo, y no debería usarse para aplicaciones críticas Aunque la librería estándar twisted.mail Implementación de los protocolos SMTP, IMAP y POP para clientes y servidores de Python tiene módulos para twisted.names Soporte para protocolo DNS para clientes y servidores la mayoría de los requerimientwisted.news Protocolo NNTP para clientes y servidores tos de la vida diaria de un protwisted.words Módulo para chat o aplicaciones de mensajería instantánea
16
Número 17
WWW.LINUX- MAGAZINE.ES
Twisted • PORTADA
Twisted requiere el módulo Zope Interface, que implementa interfaces de los que carece el núcleo del lenguaje Python. Si sólo vamos a usar un único proyecto, como Twisted Web o Twisted Mail, podemos descargar el módulo requerido de la página del proyecto. Alternativamente, Twisted Sumo [3] tiene todos los módulos (estables), incluyendo una interfaz de Zope. Tras descomprimir el paquete, tecleamos python setup.py install. Si la interfaz Zope no está instalada, el instalador mostrará un mensaje de error y terminará. El módulo twisted.cred controla la autenticación en las comunicaciones cliente-servidor. Permite que múltiples protocolos se conecten al sistema, para autenticarse y para intercambiar información. Por ejemplo, el soporte para POP 3 en Twisted proporciona una combinación de nombre de usuario y contraseña para abrir el buzón de correo solicitado. El llamado Perspective Broker es de vital importancia aquí. El broker proporciona acceso a objetos remotos e implementa copia, referenciado y cacheo de objetos.
Conexión a Base de Datos twisted.enterprise proporciona una interfaz de base de datos que es compatible con la DB-API 2.0 de Python. Esto hace del acceso a bases de datos MySQL, Oracle o PostgreSQL un juego de niños. El módulo usa una interfaz asíncrona, que puede ejecutarse en múltiples hilos sin perder la seguridad del hilo en un bucle principal basado en eventos de Twisted. El bucle principal tiene lugar dentro del módulo twisted.internet, conocido como el reactor. Implementa el bucle infinito del programa en el que Twisted controla varios eventos. El reactor proporciona la interfaz subyacente a las principales funcionaliddaes internas de Twisted, como las conexiones de red, manejo de hilos o control de eventos. Otros módulos raramente son necesarios en aplicaciones prácticas, como twisted.protocols o twisted.manhole. Conch implementa la versión 2 del protocolo Secure Shell para Twisted. El documento “Cómo” existente en [5] explica la implementación de un cliente SSH con Conch en unos pocos y sencillos pasos. Los campos de aplicación más interesantes para Twisted son probablemente
la Web y las aplicaciones para servidores, mediante el uso de twisted.web o twisted.web2. La potente plantilla para esta tarea se llama Nevow [6]. Este entorno de trabajo tiene también un conjunto completo de funciones necesarias para programar clientes HTTP. La API twisted.web soporta múltiples capas de abstracción: desde servidores web sencillos, pasando por soporte de sesiones, hasta servidores de aplicaciones interactivas y páginas web distribuidas: las posibilidades son numerosas. Cuando una solicitud de un cliente llega a un servidor Web, el servidor crea un objeto de solicitud y lo controla hasta el sistema con los recursos, donde se crea la respuesta (véase Figura 1). Además de twisted.web, tenemos también el modulo twisted.web2, que está aún en desarrollo. Las principales mejoras son las siguientes: • Soporte para HTTP 1.1 • Filtros internos y de salida predefinidos, para servir páginas Web comprimidas con gzip • Separación del manejo de peticiones de alto y bajo nivel. • Análisis correcto de cabeceras HTTP. • Reescritura enormemente mejorada de URL, si se usa en combinación con un proxy. A pesar de que hay mejoras muy importantes en twisted.web2 en comparación con la versión anterior, los desarrolladores no recomiendan usar el nuevo módulo de momento, entre otras cosas porque el módulo nuevo es más lento que su predecesor. El último módulo de importancia es Twisted Mail, que implementa SMTP, POP3 e IMAP4. Además de estos protocolos, el módulo es capaz de leer y escribir en formato Maildir de buzones de correo. Existe también una combinación preconfigurada de SMTP y POP3 para servidores de correo y sistemas de hosting virtual. Y Twisted Mail entiende la mayoría de las opciones de Sendmail, que pueden ser útiles para aplicaciones compatibles de descarga.
Congelar el servidor El marco de trabajo Twisted tiene una colección de programas en línea de comandos que preparan a las aplicaciones de Twisted para escenarios particulares [7]. Las herramientas mktap y tapconvert crean archivos en formato
WWW.LINUX- MAGAZINE.ES
Figura 1: Proceso de petición Web dentro del marco de trabajo Twisted.
Tap, Tas o Tax desde el código fuente en Python. El código puede entonces usarse en los distintos servidores de Twisted, como Web, FTP o IRC. La herramienta twistd devuelve la vida a los archivos Tap. Estrictamente hablando, twistd no es necesario para ejecutar las aplicaciones Twisted, pero hace las cosas más fáciles, ya que toma el control del reactor y controla el inicio y el apagado del programa. Además twistd admite la selección de un tipo de reactor diferente, permitiendo que una aplicación pueda ejecutarse en modo demonio o que escriba archivos de log. Los programas tap2deb y tap2rpm comprimen las aplicaciones de servidor terminadas para su distribución en paquetes con formato Debian o RPM. Las herramientas generan automáticamente scripts para la instalación y la eliminación del servidor. El Listado 1 muestra un servidor Web sencillo y demuestra la potencia de Twisted. Podríamos usar este código para habilitar la configuración basada en Web de nuestra aplicación. Las dos primeras líneas cargan los módulos requeridos. La línea 6 crea un servidor nuevo con un directorio raíz para los documentos HTML /var/www/htdocs en nuestro ejemplo. La siguiente instrucción le indica al reactor que se quede a la escucha de peticiones en el puerto 7777. La llamada reactor.run() inicia el servidor Web.
Número 17
17
PORTADA • Twisted
El Listado 2 muestra un servidor Web que añade un buen número de opciones al marco de trabajo básico del Listado 1.
Listado 1: Servidor Web Sencillo 01 # Load modules 02 from twisted.internet import reactor 03 from twisted.web import static, server 04 05 # Set root directory 06 my_server = static.File('/var/www/htdocs' ) 07 08 # Launch web server on port
En primer lugar, las líneas 9 a 11 habilitan el soporte para scripts Perl: queremos que el servidor entregue los archivos con extensión .pl al intérprete Perl, /usr/bin/perl y que devuelva el resultado. El soporte para PHP y otros lenguajes puede habilitarse fácilmente en este punto. El método putChild() de la línea 14 fija el directorio CGI a /var/www/cgi-bin, permitiendo de esta manera el acceso a los scripts en http://servername:7777/cgis. El método especifica también la ruta del directorio doc, /var/www/doc. La variable indexNames especifica qué archivos busca el servidor en una petición al directorio. La orden se define por los nombres de archivo especificados. Las siguientes herramientas de Twisted podrían usarse como alternativa al código del servidor Web:
7777 09 reactor.listenTCP(7777, server.Site(my_server)) 10 reactor.run()
mktap web U --path /var/www/htdocs U --port 7777 twistd --file web.tap
Listado 2: Servidor Web Ampliado 01 # Load modules 02 from twisted.internet import reactor 03 from twisted.web import static, server, twcgi 04
mktap crea un archivo Tap preconfigurado. En este caso, mktap fija el directorio raíz a /var/www/htdocs y el puerto a 7777. El resultado acaba en el archivo web.tap, que es usado como parámetro por el servidor twisted. Tras el arranque, el servidor, el archivo de logs, twistd.log y el archivo PID (que puede usarse para matar al servidor con kill 'cat twistd.pid') se ubican en el directorio en uso. mktap web -help nos ofrece más información de las opciones disponibles.
Sencillo Pero Potente Este artículo nos da sólo una fugaz visión general de Twisted. Este marco de trabajo, junto con Twisted Mail, Conch, Twisted Web(2) y los demás subproyectos, forman la base de muchas aplicaciones de red comerciales. Hasta la NASA usa Twisted Matrix [8]. Ayudar a las aplicaciones en Python a que alcancen las estrellas hace la vida mucho más fácil a los saturados programadores aquí en la Tierra. Twisted reduce claramente el esfuerzo que supone desarrollar un cliente o servidor eliminando la necesidad de implementar protocolos conocidos. Esto acerca a los programadores aplicaciones en red seguras, rápidas, estables ■ y flexibles, a un golpe de ratón.
05 # set root directory 06 my_server = static.File('/var/www/htdocs')
RECURSOS
07 08 # Evaluate Perl scripts 09 class PerlScript(twcgi.FilteredScript): 10 filter = '/usr/bin/perl' # path to Perl interpreter 11 my_server.processors = {'.pl': PerlScript} 12
14 my_server.putChild('cgis', twcgi.CGIDirectory('/var/www/cgi-bin')) 15 16 # Directories for other targets 17 my_server.putChild('doc', static.File('/var/www/doc')) 18 19 # Index files 20 my_server.indexNames = ['index.html', 'index.htm', 'index.pl'] 21 22 # Launch web server on port 7777 23 reactor.listenTCP(7777, server.Site(my_server)) 24 reactor.run()
Número 17
[2] Vista general de todos los proyecots Twisted: http://www.twistedmatrix. com/projects [3] Twisted Sumo: http://twistedmatrix. com/projects/core
13 # Set and enable CGI directory
18
[1] Página del proyecto Twisted Matrix: http://www.twistedmatrix.com
WWW.LINUX- MAGAZINE.ES
[4] Interfaz Zope: http://www.zope.org/ Wikis/Interfaces [5] Cliente SSH con Conch: http:// twistedmatrix.com/projects/conch/ documentation/howto/conch_client. html [6] Nevow (sistema de plantillas): http:// divmod.org/projects/nevow [7] Herramientas: http://twistedmatrix. com/projects/core/documentation/ howto/basics.html [8] Usuarios de Twisted: http:// twistedmatrix.com/services/success
Programación Bash • PORTADA
Perfeccionando los scripts en Bash
PROGRAMANDO SCRIPTS En los viejos tiempos, las shells tan sólo eran capaces de realizar llamadas externas a programas y ejecutar algunos comandos básicos, los comandos internos. Sin embargo, con todas las novedades añadidas a la última versión de Bash, rara vez hará falta el apoyo de los programas externos. POR MIRKO DÖLLE
M
En el Banco de Pruebas
uchos scripts tratan con Bash como si sólo fuera capaz de poco más que llamar a programas externos. Esto es sorprendente, desde la versión 2 de la shell por defecto hay disponible un conjunto de comandos que abarcan de todo, desde la manipulación compleja de las cadenas de caracteres, pasando por las expresiones regulares, hasta los arrays; lo que hace que sean redundantes las llamadas a los programas externos. La principal ventaja de las funciones internas es que la shell no tiene que lanzar un proceso nuevo, lo que ahorra tiempo de proceso y memoria. Esta capacidad puede ser importante, particularmente si hace falta ejecutar un programa como grep o cut en un bucle, ya que el consumo de tiempo y memoria del script puede dispararse si no se tiene cuidado. Este artículo describe algunas técnicas simples para acelerar los scripts Bash.
El Listado 1 muestra una solución que utilizan muchos scripts Bash. La llamada a cat en la Línea 3 lee primero el fichero de registro entero, y trabaja con él en el bucle for como si se tratara de una lista de parámetros, con lo que Bash tiene
Listado 1: Evaluación Externa de los Registros
Listado 2: Evaluación Interna de los Registros
Los siguientes scripts evalúan un fichero de registro de Apache de un sitio web para realizar una comparativa. Si está interesado en conocer qué páginas han sido solicitadas, hay que aislar la cadena GET del fichero de registro, como la siguiente: 84.57.16.30 - - U [21/Oct/2005:04:18:26 +0200] U "GET /favicon.ico HTTP/1.1" U 404 209 "-" "Mozilla/5.0 U (X11; U; Linux i686; de-DE; U rv:1.7.5) Gecko/20041122 U Firefox/1.0"
que mantener en la caché el contenido del primer fichero. En la Línea 5, Listado 1, se continúa realizando una llamada al programa externo cut por cada línea del fichero de registro. La ejecución del script en una máquina Pentium III a 750Mhz tardó 18,5 segundos en el análisis de un fichero de registro de 600Kbyte de Apache. Por otro lado, el script del Listado 2 tan sólo tardó 3.3 segundos, casi seis veces más rápido: utiliza el descriptor de ficheros 3 para abrir el fichero y hace uso de la variable Request para procesar una línea en cada vuelta del bucle, con lo que Bash tan sólo necesitará mantener en la caché una única línea del fichero de registro. A continuación, el script elimina los caracteres del comienzo de la línea, hasta que aparece GET, incluido este, y todos los caracteres del final de la línea hasta HTTP/, incluido.
Listado 3: Grep Interno 01 #!/bin/bash 02 exec 3<$2
01 #!/bin/bash
01 #!/bin/bash
03 while read -u 3 line; do
02 IFS=$'\n'
02 exec 3<access.log
04 if [ -z "${line/*${1}*}" ];
03 for l in `cat access.log`; do
03 while read -u 3 Request; do
04 IFS=" "
04 Request="${Request##*GET }"
05 echo "$line"
05 echo "${l}" | cut -d" " -f7
05 echo "${Request%% HTTP/*}"
06 fi
06 done
06 done
07 done
WWW.LINUX- MAGAZINE.ES
then
Número 17
19
PORTADA • Programación Bash
Listado 4: Funciones de Cadena de Caracteres 01 02 03 04 05 06 07 08 09 10 11
12 13 14 15
#!/bin/bash function GetIP() { while read -u $1 Request; do tmp="${Request%% *}" IP[1]="${tmp%%.*}" IP[4]="${tmp##*.}" tmp="${tmp%.*}" IP[3]="${tmp##*.}" tmp="${tmp%.*}" IP[2]="${tmp##*.}" printf "%03d.%03d.%03d.%03d\n" ${IP[1]} ${IP[2]} ${IP[3]} ${IP[4]} done } exec 3<access.log GetIP 3 | sort | uniq
Se puede ahorrar otra décima de segundo eliminando todos los caracteres que van hasta el blanco del final de la petición, ya que se simplifica la comparación de la cadena por la función interna de Bash.
Funciones de Sustitución Las herramientas basename y dirname son fácilmente sustituibles con las funciones Bash. Para realizar esta operación se necesita la función de cadena ${Variable%Patrón}, que elimina la cadena más corta que coincida con el patrón de la parte final de la cadena y ${Variable##Patrón}, que elimina la cadena más larga que coincida con el patrón de la parte inicial de la cadena. Con un simple alias se reemplaza realmente dirname: alias dirname=echo ${1%/*};
La función basename no es mucho más compleja, aunque hay que considerar que basename puede eliminar la extensión del fichero, por ello hay que combinar las dos funciones de cadena: function basename() { B=${1##*/} echo ${B%$2} }
Es más eficiente almacenar los resultados de la cadena truncada en la variable B que establecer el primer parámetro y pasarle el segundo parámetro.
20
Número 17
No tiene sentido reemplazar cada llamada a un programa con los comandos internos. El Listado 3 es un buen ejemplo de ello: implementa un grep rudimentario. Aunque el script comprende tan sólo unas cuantas líneas de código y podría parecer eficiente a simple vista, tarda unos dos minutos en buscar un nombre de fichero en los 600Kbytes del fichero de registro del servidor web (grep lo realiza en 0,1 segundos). Si se encuentra una coincidencia, la línea analizada del fichero se borra completamente por una “búsqueda y reemplazo” en la Línea 4. El patrón de búsqueda, *${1}*, le indica a Bash que busque cada carácter individual de la línea en busca de una coincidencia. Si se utiliza #*${1}* como patrón de búsqueda, diciéndole a Bash que busque al comienzo de la línea únicamente, Bash solamente realiza la comparación una vez por línea reduciendo el tiempo del script a menos de tres segundos.
Diseccionando IPs Pero existe una forma más elegante y rápida de diseccionar las cadenas en algunos escenarios. Por ejemplo, si hay que ordenar las direcciones IP por las que fueron originadas, no se puede utilizar la función sort o una simple función de ordenación léxica. Ya que pondría a 217.83.13.152 antes que 62.104.118.59. Por el contrario, hace falta extraer los bytes individuales de la dirección IP, convertirlos a un formato ordenable, ordenarlos y por último mostrar los resultados sin los duplicados. Los Listados 4 y 5 muestran dos soluciones posibles con características de rendimiento completamente diferentes. El script del Listado 5 comienza analizando el fichero de registro línea por línea (Línea 3) y luego extrae la primera dirección IP en la Línea 4. De la Línea 6 a la 10 se elimina un octeto cada vez de la parte final de la dirección IP y se almacena el byte de la dirección como un decimal en el array IP. En la Línea 11, la llamada a printf, que es también un comando interno de Bash, imprime los cuatro octetos de la dirección IP separados por puntos, tres dígitos decimales con relleno de ceros. La última línea encauza la salida al programa externo sort, antes de eliminar los duplicados. El Listado 4 tarda unos 2,6 segundos en procesar el fichero de registro de 600KBytes de Apache.
WWW.LINUX- MAGAZINE.ES
Listado 5: Funciones de Cadena de Caracteres 01 02 03 04 05
06 07 08 09
#!/bin/bash function GetIP() { IFS=". " while read -u $1 -a IP; do printf "%03d.%03d.%03d.%03d\n" ${IP[0]} ${IP[1]} ${IP[2]} ${IP[3]} done } exec 3<access.log GetIP 3 | sort | uniq
Funciones de Compactación El programa del Listado 5 realiza el mismo trabajo del Listado 4, pero tan sólo tarda 1,6 segundos, una mejora de casi el 40 por ciento. Las funciones de cadena de la Línea 4 a la 10 del Listado 4 son las que causan la diferencia en los tiempos de ejecución: en vez de extraer primero las direcciones IP y luego utilizar siete llamadas a funciones para diseccionarlas, el Listado 5 llama a la función interna read de Bash con la variable especial IFS. Bash trata los caracteres almacenados en IFS como parámetros separadores. Por defecto son caracteres espacio, tabulador y línea nueva. La Línea 3 del Listado 5 define el punto y el espacio en blanco como separadores. Llamando a read con el parámetro -a se le indica a la función que no almacene una línea completa en la variable, sino que haga uso del separador IFS y que escriba los elementos de la entrada uno a uno en la variable array IP. Los octetos que conforman la dirección IP se almacenan en las variables que van desde la IP[0] hasta la IP[3] de la llamada a read. Además, una única llamada a la función en el Listado 5 reemplaza las líneas de la 3 a la 10 del Listado 4. Se pueden reemplazar las llamadas externas a sort y uniq por funciones Bash, pero no se puede esperar que Bash sea capaz de igualar a sort, un programa C, en eficiencia. Como en la vida real, algunos ajustes en los scripts Bash pueden ser sorprendentes, pero programar en busca de la eficiencia también puede pagarse a la ■ larga.
RECURSOS [1] Programas de ejemplo: http://www. linux-magazine.com/Magazine/ Downloads/64/bash
Programación RealBasic • PORTADA
Portar aplicaciones Visual Basic a Linux
PUERTA ABIERTA Realbasic proporciona una sencilla solución para la conversión de programas Visual Basic a Linux. POR FRANK WIEDUWILT
V
isual Basic es ciertamente popular en el mundo Windows como lenguaje fácil de aprender y con un código sencillo de leer. Los usuarios que migraban a Linux a menudo tenían que reescribir sus programas de Visual Basic a otro lenguaje diferente. Las alternativas libres de Basic, como Gambas [1], HBasic [2] o WXBasic [3] están demasiado alejadas de VB para portarlas sin más. Kbasic [4] promete compatibilidad sintáctica completa con Visual Basic, pero aún se encuentra en un estado beta después de muchos años de desarrollo. Real Software ha presentado recientemente Realbasic [5], una herramienta comercial diseñada para tomar proyectos en Visual Basic y dar la oportunidad al usuario de ejecutarlos bajo Linux y Mac Os X. El modelo de licencia de Realbasic es poco común. Además del derecho a usar el programa, el usuario compra también el derecho a la corrección de bugs y a otras mejoras por un periodo de tiempo determinado. Trascurrido ese periodo, el
cliente mantiene la licencia pero no recibe las mejoras. Real Software promete lanzar una nueva versión cada 90 días, por lo que los usuarios con licencia pueden esperar nuevas características a intervalos regulares. La Standard Edition para Linux es gratuita. La Professional Version tiene un coste de 330 Euros (399,95 US$) con seis meses de actualizaciones. También existen otros tipos de acuerdos con las licencias. La Tabla 1 muestra las diferencias entre las dos versiones. La versión Professional de Realbasic para Linux puede crear programas para cualquier versión de Windows desde la 95 a la XP. Los programas no requieren ningún archivo DLL adicional, y los programas Realbasic en Linux se reducen a un único ejecutable. La versión Standard puede también generar binarios para probar en Windows y Mac OS, aunque el tiempo de ejecución del programa está restringido a cinco minutos.
Instalación
Figura 1: Realbasic es fácil de usar y ofrece un amplio abanico de funcionalidades.
Los paquetes binarios son fáciles de instalar. Los usuarios de Red Hat Desktop y Novell Desktop Linux pueden descargar los RPMs de Realbasic. Existe también un archivo TGZ. Ambas variantes funcionan perfectamente en cualquier distribución reciente. La documentación en formato PDF está también disponible desde la página de Realsoftware. La primera vez que lo ejecutamos, el programa nos pide que introduzcamos nuestro nombre y correo electrónico antes de poder descargar la llave de la licencia.
WWW.LINUX- MAGAZINE.ES
Figura 2: El cursor de retícula facilita el posicionado correcto de los elementos de la interfaz gráfica.
GUI La interfaz gráfica de usuario de Realbasic mantiene el tipo frente a muchos otros entornos de desarrollo modernos (véase Figura 1). Para los programadores que migren desde Visual Basic no les será complicado adaptarse, así como los de otras IDEs. El editor soporta remarcado de sintaxis y autocompletado de palabras clave, variables, clases y métodos. El editor también puede esconderse o mostrar bloques de código bajo petición para ayudar a los desarrolladores a llevar la cuenta de proyectos de gran envergadura. El editor de formularios proporciona widgets para las tres plataformas soportadas. Tiene también elementos OLE que permiten al desarrollador incrustar objetos de Microsoft Word y Excel. Por supuesto, esto no funcionará en Linux, que no evita que estas utilidades se muestren en la caja de herramientas.
Número 17
21
PORTADA • Programación RealBasic
Aunque es muy sencillo modificar las palabras clave que son ligeramente diferentes o los distintos tipos de datos (Tabla 1), los desarrolladores que migran a Realbasic suelen tener problemas si han utilizado intensivamente componentes ActiveX u otro tipo de controles más raros. Realbasic proporciona controles para realizar las tareas llevadas a cabo por algunos componentes ActiveX. La documentación describe estas funciones, dándonos Figura 3: El conversor de Visual Basic migra oportunidad de ver las desventajas Figura 4: El conversor registra los problemas y los proyectos al formato Realbasic, aunque antes de decidir su compra. las soluciones en un archivo HTML. sólo desde Windows. Como ejemplo, ListBox de Realbasic hace el trabajo del popular Flex Grid de lenguaje de peticiones preferido, las aplicaDisponemos de un cursor tipo retícula, Visual Basic. Real Software ofrece una heciones desarrolladas con la base de datos que facilita al desarrollador posicionar y rramienta de conversión [7] (véase Figura interna deberían funcionar también con alinear los elementos en la pantalla, pues 3) para ayudar al desarrollador a convertir los demás backends. podemos mostrar una línea verde para archivos de proyecto de Visual Basic, Si estamos migrando de Visual Basic a realzar los bordes de otros objetos y tammódulos y formularios a proyectos de Realbasic, no tenemos que preocuparnos bién podemos encajar así elementos en su por las diferencias entre los dialectos SQL: Realbasic basados en XML. lugar correspondiente cuando forman 90 el programa de conversión cuida de este Desafortunadamente, la herramienta sólo grados con un elemento de referencia aspecto. funciona bajo Windows. (véase Figura 2). El software descubre y elimina los Conclusiones errores de sintaxis durante este proceso, Portar Código Existente Realbasic permite a los desarrolladores pero falla si las etiquetas de control conProbablemente nos preguntamos si es portar aplicaciones Visual Basic a Linux tienen caracteres no estándar: trunca los posible usar proyectos existentes de Visual con muy poco esfuerzo. Sin embargo, nombres en cuanto aparece el primer Basic en Realbasic. La respuesta es un probablemente necesitemos Windows carácter no estándar. Los archivos de log vago “Básicamente, sí”. La página de Real para ejecutar el conversor. Si no hemos de la conversión registran cualquier proSoftware contiene un HOWTO para desausado intensivamente controles ActiveX, blema aparecido, y las posibles soluciones, rrolladores en Visual Basic [6] que controles propios o controles de cajas de en un archivo HTML (véase Figura 4). El describe los problemas al portar. herramientas, deberíamos ser capaces de nuevo código fuente contiene comentarios migrar nuestros proyectos Visual Basic sin con los consejos hacer demasiados cambios. Estos prograreferentes a la Tabla 1: Versiones Estándar y Profesional mejora del código. mas se podrán ejecutar bajo Linux, Standard Pro Windows, Mac OS X, e incluso antiguos Crear programas Linux (procesadores x86) Sí Sí Bases de ■ Mac OS. Crear programas Linux, Mac OS y Windows Convertir e importar proyectos Visual Basic Única base de datos integrada Acceso a bases de datos externas (Access, PostgreSQL, MySQL, ODBC) Soporte SSL
Sí Sí
Sí Sí Sí
-
Sí Sí
Tabla 2: Tipos de Datos Entero 16 Bit 32 Bit Entero 32 Bit Single Double String Currency 8-Bit Booleano Color Variant Objeto
22
Visual Basic Entero
Realbasic No suportado, usa Entero
Long Single Double String Currency Byte Booleano No suportado Variant Objeto
Entero Single Double String Bloque de Memoria Bloque de Memoria Booleano Color Variant Objeto
Número 17
Datos
La Standard Version de Realbasic sólo usa una base de datos interna basada en SQLite. En contraste con esto, la Professional Version usa plugins que permiten el acceso a bases de datos MySQL, MS SQL y MS Access. Para poder soportar más interfaces, Realsoftware proporciona un Plugin Development Kit de manera gratuita en [8]. Como SQL es el
WWW.LINUX- MAGAZINE.ES
RECURSOS [1] Gambas: http://gambas.sourceforge. net [2] HBasic: http://hbasic.sourceforge.net [3] WXBasic: http://wxbasic.sourceforge. net [4] KBasic: http://www.kbasic.org [5] Realbasic: http://www.realbasic.com [6] Howto para programadores de Visual Basic: http://www.realbasic.com/ support/whitepapers/ portingvisualbasic [7] Conversor Visual Basic: http:// highspeed.realsoftware.com/ REALbasic55/VBPC.zip [8] Realbasic Plugin SDK: http:// highspeed.realsoftware.com/ REALbasic2005r4/PluginsSDK. zip
TCL y OpenOffice • PORTADA
Tcluno y Itcluno: Extensiones para automatizar OpenOffice
TOMANDO EL CONTROL OpenOffice viene de serie con su propio dialecto Basic, un potente lenguaje de macros. Pero no Basic es del gusto de todo el mundo. Los que prefieren Tcl pueden usar este lenguaje para controlar su Office. Con Tcluno e Itcluno se obtienen informes listos para imprimir y tablas con datos a partir de cualquier tipo de fuente. POR CARSTEN ZERBST
P
ara muchos usuarios el procesador de textos y la hoja de cálculo pertenecen a los programas más importantes del escritorio. Pero a veces es preciso generar documentos automáticamente o retocar partes controladas por programas. En este caso sería útil poder utilizar el lenguaje script con el que se trabaja habitualmente en vez de usar el Basic integrado.
Office desde la distancia Gracias a Arnulf Wiedman y Wolfgang Großer disponemos de una extensión de Tcl, Tcluno [1], que permite a los scripts un acceso pleno a todas las funcionalidades de OpenOffice para generar y cambiar documentos. El potente modelo de componentes de UNO (veáse el recuadro “Universal Network Objects”) dispones de las funcionalidades necesarias para controlar OpenOffice a distancia desde otros programas. El resultado es un documento OpenOffice que se puede exportar también a Winword/Excel, PDF o bien imprimirse. Las fuentes de Tcluno se encuentran en Sourceforge [2]. Los desarrolladores trabajan bastante en su proyecto; mientras
que las primeras versiones se basaban en las bibliotecas C++ de OpenOffice, la versión actual es una extensión del script que no requiere compilación. Por ello es suficiente depositar la extensión en cualquier parte del ordenador y cambiar la ruta de búsqueda de Tcl respectivamente. En el servidor de Linux Magazine [3] se encuentran un paquete preparado con los ejemplos de este artículo y una versión probada de la extensión.
acceso a OpenOffice con estas propiedades. Quien necesite esta funcionalidad más a menudo, puede registrar el soporte de red de manera permanente en el archivo de configuración. Para esto hay que añadir tres líneas en Setup.xcu en la rama XML node oor:name="Office", son las líneas 9 a 11 con la propiedad ooSetupConnectionURL en el listado 1.
Procesos enlazados
Según la versión, distribución e instalación usadas, el archivo de configuración se encuentra en sitios distintos. En OpenOffice 2.0 el archivo de configuración específico del usuario está en ~/.openoffice.org2/user/registry/data/org/o penoffice/Setup.xcu, el archivo de configuración de todo el sistema, por ejemplo, en /usr/lib/ooo-2.0/share/registry/data/org/ope noffice/Setup.xcu. En la versión más antigua 1.1 el archivo específico del usuario se llama ~/OpenOffice.org1.1/user/registry/data/org /openoffice/Setup.xcu, para todo el sistema /usr/lib/ooo-1.1/share/registry/data/org/ope noffice/Setup.xcu.
La comunicación entre OpenOffice y Tcluno se realiza a través de la red, incluso si ambos procesos corren en la misma máquina. OpenOffice trabaja entonces como servidor. El programa tiene que estar arrancado para que Tcl pueda consultarlo. Desgraciadamente OpenOffice arranca por defecto sin soporte de red. Una llamada con la opción accept lo cambia: ooffice "-accept=socket,U host=localhost, port=2002;urp;"
Sólo los clientes (o sea scripts Tcl) que corren en la misma máquina obtienen
WWW.LINUX-MAGAZINE.ES
Acceso permitido
Número 17
23
PORTADA • TCL y OpenOffice
Universal Network Objects Cuando la empresa Star Division empezó a desarrollar el Star Office a mediados de los noventa, eligió a C++ como lenguaje de programación. Pero le faltó un modelo de componentes para dividir las grandes aplicaciones en trozos pequeños independientes de la plataforma. Entonces Star Division desarrolló su modelo de componentes UNO siguiendo el ejemplo de las ideas del OLE (Object Linking and Embedding) y del OMG CORBA (Object Management Group, Common Object Request Broker [4]) de Microsoft. UNO significa Universal Network Objects (esto es, Objetos de Red Universal). Descripción de interfaces UNO usa un lenguaje propio (parecido a CORBA) para describir métodos y propiedades de las clases disponibles. Comparable con OLE de Microsoft, los objetos soportan varias interfaces, un cliente las consulta en tiempo de ejecución y se decide por una de ellas. La implementación para una hoja de cálculo (“SpreadsheetImplementation” Figura 1) conoce por ejemplo varias interfaces. Un programa de Java las consultaría de la siguiente manera: XStorable
xStorable
=
(XStorable)U UnoRuntime.queryInterface(U XStorable.class, spreadsheet); xStorable.storeAsUrl( ... ); XPrintable xPrintable = (XPrintable)U UnoRuntime.queryInterface(U XPrintable.class, spreadsheet); xPrintable.print( ... );
para el resto del código fuente, porque éste solo usa las interfaces disponibles y no el objeto en sí. La agrupación proporciona una vista general Para no perder la vista general con tantas interfaces, es posible agruparlas en unidades más grandes, llamadas “services” (servicios). En UNO un simple constructor no es suficiente para generar un objeto, el programa más bien tiene que solicitarlo al “Servicemanager” (o Administrador de servicios, también llamado “factory” o fábrica). Es curioso que la empresa francesa Dassault Systèmes use un entorno casi idéntico en Catia V5. Desgraciadamente la versión Linux de este sistema CAD no está disponible todavía. Tal y como sugiere la palabra “Network” de las siglas UNO, el acceso a las interfaces de los componentes funciona también a través de la red. Éste es el camino más sencillo para controlar OpenOffice desde lenguajes de programación ajenos. Quien quiera escribir sus propios objetos UNO, tiene que usar actualmente C++ o Java. Quien sólo quiera usar las funcionalidades existentes de OpenOffice, puede usar también otros lenguajes como Tcl, Python, Dotnet o OpenOffice Basic. Ojeada en tiempo de ejecución Especialmente práctico para lenguajes script: se pueden consultar las interfaces disponibles en tiempo real a través de la introspección. Tcluno aplica y solicita por sí mismo las interfaces necesarias. Los propios programadores de Java o C++ tienen que afanarse en este paso antes de poder aplicar métodos a un objeto. Si los programadores de Tcl conocen las interfaces de una implementación, entonces pueden aplicarlas directamente.
La ventaja del modelo de componentes es que el desarrollador puede elegir libremente durante la implementación las interfaces a disposición de un nuevo objeto. El principio se parece a las interfaces de Java. Al contrario de C++, evita las herencias múltiples. Si se cambia la impleFigura 1: Gracias a UNO la implementación y la inferfaz mentación de un objeto, están separadas, un objeto suele soportar varias interfaces. no tiene consecuencias
Puro UNO Los objetos OpenOffice funcionan para programadores de Tcl igual que los de Tk o Itcl. En Tcl están listos como objetos, según la tradición de Tk el script pasa los
24
Número 17
métodos definidos en la descripción del interfaz al objeto. El listado 2 sólo usa una de las 2600 clases de OpenOffice para llenar una hoja de cálculo y exportarla en formato Excel.
WWW.LINUX-MAGAZINE.ES
Listado 1: Soporte de red 01 <?xml version="1.0" encoding="UTF-8"?> 02 <oor:component-data xmlns:oor="http://openoffice.o rg/2001/registry" xmlns:xs="http://www.w3.org/20 01/XMLSchema" oor:name="Setup" oor:package="org.openoffice"> 03 <node oor:name="L10N"> 04 <prop oor:name="ooLocale" oor:type="xs:string"> 05 <value>en-US</value> 06 </prop> 07 </node> 08 <node oor:name="Office"> 09 <prop oor:name="ooSetupConnectionURL " oor:type="xs:string"> 10 <value>socket,host=localhost,p ort=2002;urp</value> 11 </prop> 12 <prop oor:name="ooSetupInstCompleted " oor:type="xs:boolean"> 13 <I>[...]<I>
Los comandos lappend en las líneas 3 y 4 amplían la ruta de búsqueda de Tcl con la instalación de Tclurtp y Tcluno. Para la comunicación con OpenOffice, los ejemplos trabajan con una solución de script Tclurtp pura. Pero en la versión actual Tcluno usa la variante Tclurtp solamente si el script corre con la opción -urtp. La línea 7 procura que la variable ::argv contenga siempre esta cadena, independientemente de lo que el usuario indicó en la línea de comandos. A continuación el código empieza a solicitar la extensión para la hoja de cálculo. La línea 12 intenta establecer el contacto con OpenOffice con ::tcluno_soffice::initDesktop. Si esto falla, las siguientes llamadas puts stderr generan un amplio mensaje de error. En caso de éxito la variable desktop contiene el objeto de arranque central. Por cierto, en Tcluno el programador no tiene que preocuparse por consultar la referencia de objeto solicitada antes de poder usarla (como sucede en Java o C++). No obstante estas consultas son posibles y dan sentido para informarse sobre las interfaces soportadas por un objeto. Las líneas 23 hasta 26 lo muestran; el resultado se puede ver en la figura 2.
TCL y OpenOffice • PORTADA
Tipos de datos La mayoría de los comandos UNO esperan entradas simples como cadenas, números o listas. Pero hay también unos tipos de datos especiales, que no tienen equivalentes en Tcl. Tcluno lo compensa con unos comandos auxiliares, por ejemplo, para la secuencia tan usada del tipo Any (línea 29). Este contenedor genérico puede recibir cualquier tipo de datos. El objeto desktop sirve de generador de documentos. El método loadComponentFromURL abre un documento (línea 32). El primer parámetro indica su URL. El URL normal es suficiente para documentos ya existentes (por ejemplo file:/home/cz/test.odt). Pero para cada tipo de archivo existe además un URL especial: • private:factory/swriter • private:factory/scalc • private:factory/sdraw • private:factory/simpress
Generan un documento nuevo y vacío. El segundo parámetro indica la ventana en la que aparece el documento. _blank proporciona una ventana nueva. Los últimos dos argumentos no se usan y son valores predeterminados. El resultado de lo anterior es un objeto nuevo, cuya referencia termina en $spreadsheet; se trata de un documento de hoja de cálculo. La línea 36 solicita la lista de todas las hojas de este documento, y la línea 37 elige de ellas la primera página. El título de esta hoja se llama por defecto tabla1. La línea 39 lo cambia a Números_aleatorios.
Navegación documento
en
el
OpenOffice conoce dos técnicas para dirigirse a las celdas de una hoja: bien como se puede ver en la línea 44, a través de getCellByPosition con el índice de la columna y la fila como número, o
bien como en la línea 51, con getCellRangeByName y la combinación común de letra y cifra. Cuidado: el índice para getCellByPosition empieza con 0, mientras que la primera fila en getCellRangeByName lleva el número 1. Con setValue el programa pone los valores de las cifras en las celdas (línea 46). Además de valores numéricos, las celdas pueden contener también fórmulas o textos. Esto se consigue con setFormula, como se puede ver en las líneas 56 (texto) y 58 (fórmula). Hay que procurar que las fórmulas estén en forma inglesa, por ejemplo =median(A1:A2) (línea 62) y no =mediana(A1:A2), que sólo está permitido desde el GUI. Para guardar el documento terminado (figura 2b), el programa tiene que decidir entre todos los formatos soportados por OpenOffice, por ejemplo Excel, Star Calc o CSV (Comma Separated Values). Normalmente, para estas
Listado 2: Tcluno 01 #!/usr/bin/tclsh 02 03 lappend auto_path [file join [pwd] tclurtp] 04 lappend auto_path [file join [pwd] tcluno ] 05 06 # Solicitar versión Tcl-Only de Tcluno 07 set ::argv "-urtp" 08 # Cargar extensión 09 package require tcluno_scalc 10 11 # Establecer contacto con OpenOffice 12 if {[catch {::tcluno_soffice::initDesktop } desktop]} { 13 puts stderr "Conexión con OpenOffice fallado!" 14 puts stderr "Error fue:" 15 puts stderr $desktop 16 puts stderr "" 17 puts stderr "Por favor, arrancar OpenOffice con soporte de red:" 18 puts stderr "ooffice \"-accept=socket,host=localhos t,port=2002;urp;\"" 19 exit 1 20 } 21 22 # Mostrar interfaces 23 puts "»desktop« tiene los siguientes interfaces:" 24 puts [join [$desktop getTypes] "\n"] 25 puts "\n»desktop« es el servicio siguiente:" 26 puts [$desktop
getSupportedServiceNames] 27 28 # Crear lista vacía 29 set filterSequence [$desktop tcluno::createUnoSequence Any] 30 31 # Nuevo documento en hoja de cálculo 32 set spreadsheet [$desktop loadComponentFromURL \ 33 "private:factory/scalc" "_blank" 0 $filterSequence] 34 35 # Encontrar primera página 36 set sheets [$spreadsheet getSheets] 37 set sheet [$sheets getByIndex 0] 38 puts "\nLa tabla se llama: [$sheet getName]" 39 $sheet setName "Números_aleatorios" 40 41 # Llenar tabla con números aleatorios 42 for {set col 0} {$col < 10} {incr col} { 43 for {set row 0} {$row < 10} {incr row} { 44 set cell [$sheet getCellByPosition $col $row] 45 set value [expr {rand() * 100}] 46 $cell setValue $value 47 } 48 } 49 50 # Dirección de la celda 51 set cell [$sheet getCellRangeByName "A12"]
WWW.LINUX-MAGAZINE.ES
52 puts "\nDirección completa: [$cell getCellAddress]" 53 54 # Fórmulas y textos 55 set cell [$sheet getCellRangeByName "A12"] 56 $cell setFormula "Suma:" 57 set cell [$sheet getCellRangeByName "B12"] 58 $cell setFormula "=sum(B1:B10)" 59 set cell [$sheet getCellRangeByName "A13"] 60 $cell setFormula "Mediana:" 61 set cell [$sheet getCellRangeByName "B13"] 62 $cell setFormula "=median(B1:B10)" 63 64 # Exportar como hoja de cálculo Excel 65 set filterSequence [$::desktop tcluno::createUnoSequence Any] 66 set msExcelFilter [$::desktop tcluno::createUnoStructHelper \ 67 com.sun.star.beans.PropertyVal ue \ 68 {FilterName -1 {MS Excel 97} 0}] 69 $::desktop tcluno::appendUnoSequence $filterSequence $msExcelFilter 70 71 $spreadsheet storeAsURL "file:[file normalize ~/prueba.xls]" $filterSequence
Número 17
25
PORTADA • TCL y OpenOffice
Figura 2: El script Tcl ha cambiado el nombre de la primera tabla. La ha llenado de números aleatorios y ha insertado el cálculo de la suma y el valor medio.
configuraciones se usa una secuencia Any. La línea 65 genera una lista vacía de este tipo genérico. Para guardarlos como Excel, la lista tiene que contener una estructura del tipo com.sun.star.beans.PropertyValue. La función de ayuda createUnoStructHelper es la responsable de ello en Tcluno (línea 66 hasta 68). Espera como parámetros el nombre y el contenido de la estructura. La función de ayuda appendUnoSequence incorpora en la línea 69 la estructura nueva en la secuencia vacía, lo cual aprovecha la línea 71 para guardar el documento nuevo bajo el nombre prueba.xls en la carpeta home.
Más cómodo Itcluno está aún mejor adaptado al mundo de componentes orientado a objetos de OpenOffice que Tcluno. Ahorra mucho trabajo minucioso al programador. Como el nombre indica, Itcluno se basa en la extensión de Tcl orientada a objetos Itcl [5], pero necesita también la extensión Tclvfs (Virtual File System o Sistema de Ficheros Virtual[6]). Ambos faltan en muchas distribuciones de Tcl. Active Tcl de Activestate [7] es una manera fácil de cosneguirlos. Con Itcluno, un programa no usa los objetos UNO directamente como en el
listado 2, sino de manera indirecta a través de un surtido de clases Itcl, fáciles de usar. Actúan como la capa superior, que encapsula los objetos OpenOffice. Así un script consigue realizar su tarea con menos comandos. El ejemplo en el listado 3 genera un documento nuevo con Itcluno, lo llena de valores registrados y produce con ellos un diagrama.
Clases de hoja de cálculo La clase SpreadSheet es la responsable de la hoja de cálculo. Sus aproximadamente 30 métodos se ocupan de casi todo lo relacionado con la hoja de cálculo. Sólo
Listado 3: Itcluno 01 #!/usr/bin/tclsh 02 03 lappend auto_path [file join [pwd] tclurtp] 04 lappend auto_path [file join [pwd] tcluno ] 05 lappend auto_path [file join [pwd] itcluno] 06 07 # Solicitar la versión Tcl-Only de Tcluno 08 set ::argv "-urtp" 09 # Cargar extensión 10 package require itcluno 11 12 # Generar documento 13 set spreadsheet [::itcluno::SpreadSheet #auto] 14 $spreadsheet renameSheet Tabla1 Valores 15 16 # Poner valores 17 $spreadsheet setCellValue Valores [list 0 0] \ 18 {{Fecha Hora Altura}} 19
26
Número 17
20 # Altura del mar en Cádiz, 23.3.2006 21 # Fuente: http://indamar.ieo.es/ (Mareas | Acceso a datos | Cádiz) 22 set datos [list \ 23 [list 21.03.06 00:00 13.25 ] \ 24 [list 21.03.06 01:00 15.33 ] \ 25 [list 21.03.06 02:00 18.80 ] \ 26 [list 21.03.06 03:00 22.51 ] \ 27 [list 21.03.06 04:00 26.31 ] \ 28 [list 21.03.06 05:00 29.00 ] \ 29 [list 21.03.06 06:00 29.57 ] \ 30 [list 21.03.06 07:00 27.78 ] \ 31 [list 21.03.06 08:00 24.66 ] \ 32 [list 21.03.06 09:00 20.14 ] \ 33 [list 21.03.06 10:00 16.33 ] \ 34 [list 21.03.06 11:00 14.35 ] \ 35 [list 21.03.06 12:00 14.24 ] \ 36 [list 21.03.06 13:00 15.58 ] \ 37 [list 21.03.06 14:00 18.40 ] \ 38 [list 21.03.06 15:00 21.73 ] \ 39 [list 21.03.06 16:00 25.16 ] \ 40 [list 21.03.06 17:00 27.85 ] \ 41 [list 21.03.06 18:00 28.89 ] \ 42 [list 21.03.06 19:00 28.60 ] \
WWW.LINUX-MAGAZINE.ES
43 44 45 46 47 48
[list 21.03.06 20:00 25.95 [list 21.03.06 21:00 21.81 [list 21.03.06 22:00 17.77 [list 21.03.06 23:00 14.92 [list 21.03.06 24:00 13.75 $spreadsheet setCellValue Valores [list 0 1] $datos
] \ ] \ ] \ ] \ ]]
49 50 # Generar diagrama 51 $spreadsheet createChart Valores \ 52 [list 12 1 12 12 cm] \ 53 [list hasRowHeader 1 hasColumnHeader 1 \ 54 title "Altura del mar en Cádiz" \ 55 type LineDiagram] \ 56 Valores [list 1 1 2 26] 57 58 tcluno_soffice::windowTitle \ 59 [$spreadsheet cget -desktop] \ 60 "Altura del mar en Cádiz" 61 62 $spreadsheet exportToPdf altura.pdf
TCL y OpenOffice • PORTADA
con el constructor en la línea 13 se establece el contacto con OpenOffice y se genera un documento nuevo. La línea 14 da un nombre a la tabla, y la línea 17 pone los primeros valores en la tabla con setCellValue. El código es el siguiente: $spreadsheet setCellValueU Nombre_de_tabla {ColumnaComienzoU FilaComienzo} {{Valor11 Valor12}U {Valor21 Valor22}}
Figura 3: Sólo siete comandos Itcluno bastan para generar esta tabla completa. En el listado 3 el programa genera una nueva hoja de cálculo, lo llena con los datos registrados de la marea y produce con ellos un diagrama de líneas.
Los valores en la lista embebida pueden ser números, textos o fórmulas. A los títulos de las columnas les siguen los datos, que esta vez provienen del Instituto Español de Oceanografía (RED DE INFORMACIÓN DE DATOS OCEANOGRÁFICOS) [8]. Las líneas 23 hasta 47 contienen directamente los valores; pero un script podría consultar los valores directamente desde una página web. La línea 48 introduce este bloque de datos en OpenOffice. Un diagrama proporciona una mejor vista general de los cambios de la altura del mar: Las líneas 51 hasta 56 generan
Lo último La combinación de base de datos y Tcl parece ser muy adecuada para el desarrollo rápido de aplicaciones. Como prueba, casi no hay una base de datos sin extensión de Tcl. Unas usan Tcl hasta como herramienta de prueba en el desarrollo. Jerry LeVan acaba de publicar su nueva versión 1.6 de PgBrowser [10]. Se trata de un navegador de bases de datos bastante potente para PostgreSQL. La extensión Tile proporciona un mejor aspecto para las aplicaciones Tk, pero todavía no tiene tantas funcionalidades como Tk. Para una transición suave, los desarrolladores integran ahora Tile paso a paso al Tk normal. El nuevo kit de herramientas mezcladas se llama Ttk [11].
Aquí los Tclkits [13] son una gran ayuda, porque contienen en un único archivo el intérprete completo de Tcl y no necesitan derechos de root. En combinación con la consola TK [14] desarrollada por Jeffrey Hobbs, se arranca un entorno de desarrollo práctico en cuestión de segundos. Esto funciona no solamente en plataformas LinuxX86, sino también en entornos menos dotados como Linux-S390, HP-UX, Solaris o OSF-Alpha.
En la caja de herramientas falta ahora sólo una aplicación que vigila cualquier comunicación TCP/IP de navegador o Telnet. Esto es lo que hace Sockspy (figura 4 y [15]) y cabe en un dispositivo de memoria USB para urgencias. Se pueden registrar las transferencias grabadas de manera cómoda y también mostrarlas como volcado hexadecimal. Sockspy no ofrece las posibilidades del líder Ethereal, pero en cambio no requiere derechos root.
Websh [12] es un entorno avanzado para aplicaciones web. La versión 3.6.0b3 contiene parches para errores y es compatible con Apache 1.3 y 2.0 y con Tcl 8.4 y 8.5. Miradas curiosas Cuando hay que solucionar un problema con clientes o en máquinas ajenas, muchas veces sólo queda disponible el korn-shell o tal vez sólo cmd.exe. No es una buena base para resolver pequeños problemas y otros más grandes en un tiempo razonable.
Figura 4: Sockspy se coloca entre cliente y servidor para escuchar las transferencias TCP/IP y mostrarlo en orden cronológico.
WWW.LINUX-MAGAZINE.ES
Número 17
27
PORTADA • TCL y OpenOffice
Figura 5a: Unospection muestra una estructura de árbol de las interfaces UNO de OpenOffice. El usuario puede ver todos los métodos para un objeto y llamarlos directamente.
herramienta útil para probar scripts propios y para buscar en el API de OpenOffice. La herramienta es una mezcla entre navegador de objetos (Figura 5a) y visor de ayuda con documentación integrada (Figura 5b). Si lo pide, el desarrollador ve el texto de ayuda para todos los métodos viables para un objeto, y puede llamar el método directamente de prueba. Unospection merece la pena ya sólo por su navegador de ayuda. Esta función se encuentra en el menú Edit | Search Methods. La herramienta contiene la documentación para todas las clases y todos los métodos. Unospection todavía tiene algunos errores por subsanar, pero tiene toda la base para ser un ayudante práctico para desarrollar scripts para OpenOffice. Los dos autores Wolfgang Großer y Arnulf Wiedman han hecho un buen trabajo, que se merece más que un vistazo para la automatización de Office. ■
RECURSOS [1] Página del proyecto Tcluno: http:// www.tugm.de/Projekte/TCLUNO/ index.html.en Figura 5b: Especialmente práctico: la herramienta lleva consigo la documentación completa del API de OpenOffice.
el diagrama de líneas (figura 3). La línea 58 pone el título y la 62 exporta el documento como PDF. Gracias a Itcluno todo ha costado sólo 7 comandos (líneas 13, 14, 17, 48, 51, 58 y 62). Itcluno incluye una amplia colección de ejemplos útiles, que abarcan desde tareas sencillas de formato hasta una extensa tabla de Pivot.
El programa completo Tcluno proporciona a los scripts Tcl el API completo de OpenOffice. Los desarrolladores generan con ello documentos y modifican su contenido sin aprender un lenguaje nuevo. Los ejemplos de este artículo tratan solamente de generar hojas de cálculo, pero tanto Tcluno como Itcluno incluyen un procesador de textos, aplicaciones de diseño y presentaciones. Itcluno lleva más rápido al éxito en muchas tareas, porque cubre las posibilidades esenciales con poco esfuerzo de aprendizaje. El comienzo,
28
Número 17
en cambio, puede resultar bastante penoso, porque el API de OpenOffice es difícil de entender con sus aproximadamente 2600 clases y 6000 métodos. Por suerte suelen bastar 20 clases, pero hay que aprenderlos también.
Documentación La documentación de OpenOffice proporciona un buen comienzo. Se puede encontrar en línea y en el kit de desarrollo de OpenOffice [9]. Además de los secciones de introducción, vale la pena leer los capítulos 7 hasta 10, que explican con muchos ejemplos el manejo de los distintos tipos de documentos. Los ejemplos están pensados para Java, pero quien recorre todas las líneas con queryInterface, puede usar el resto para Tcluno.
Navegación por la jungla API Tcluno contiene también junto con Unospection (Figuras 5a y 5b) una
WWW.LINUX-MAGAZINE.ES
[2] Tcluno en Sourceforge: https:// sourceforge.net/projects/tcluno/ [3] Programas de este artículo: http:// www.linux-magazine.es/Magazine/ Downloads/17 [4] OMG Corba: http://es.wikipedia.org/ wiki/Corba [5] Incr Tcl: http://incrtcl.sourceforge.net/ itcl/ [6] Tclvfs: http://sourceforge.net/projects/ tclvfs [7] Activestate Tcl: http://www. activestate.com/Tcl.plex [8] Instituto Español de Oceanografía, “Mareas | Acceso a datos | Cádiz”: http://indamar.ieo.es/ [9] Kit de desarrollo de software OpenOffice (SDK): http://www.openoffice.org/ dev_docs/source/sdk/ [10] PgBrowse: http://homepage.mac. com/levanj/TclTk/ [11] Tile Tk: http://wiki.tcl.tk/14796 [12] Websh: http://tcl.apache.org/websh/ [13] Tclkit: http://www.equi4.com/pub/tk/ downloads.html [14] Tkcon: http://tkcon.sourceforge.net [15] Sockspy: http://sockspy.sourceforge. net/sockspy.html
Libros • EVALUACIÓN
LIBROS CLASSIC SHELL SCRIPTING Es apropiado que en un número dedicado al scripting hagamos una reseña del libro que nos ocupa. Classic Shell Scripting es el manual que necesitará cualquier administrador de sistemas Unix (ya sea de Linux, Solaris, AIX o HP-UX, arquitecturas todas ellas contempladas por el volumen) si desea sacar el máximo rendimiento a su sistema operativo.
El Poder de la Línea de Comandos A diferencia de otros entornos cuyo principal medio de comunicación con el usuario, administrador o programador es un medio gráfico, en los sistemas basados en Unix, los terminales de texto son de una gran importancia. La mayoría de las aplicaciones gráficas Unix y todas las que se ocupan de la administración del sistema operativo recurren en cierta medida a sus homólogos de texto y, si bien el entorno gráfico a menudo es suficiente para muchas tareas, el control granular que ofrecen las instrucciones y aplicaciones que se ejecutan desde la línea de comandos con sus múltiples opciones, no tiene igual en sus equivalentes basados en GUI. Asimismo, a menudo ocurre que en otras plataformas hay una clara distinción entre el programador, el administrador y el usuario final. Sin embargo, en los entornos GNU/Linux, lo más normal es que el administrador también programe, que el programador administre y que el usuario final también microadministre en cierta medida su sistema. Así las cosas, un conocimiento del entorno de texto Unix y las prestaciones que ofrece, es de gran valor para todos los que lo utilicen. En este sentido, el volumen que nos ocupa podría ser una de la mejores inversiones que pueda hacer uno que quiera adquirir un profundo conocimiento sobre las distintas shells. Nótese que digo “profundo conocimiento”, porque Classic Shell Scripting, es eso: un examen en profundidad y exhaustivo de casi todas las instrucciones y aplica-
POR PAUL C. BROWN
ciones que podemos correr desde la línea de comandos. Es casi imposible, cuando se describen programas o instrucciones individuales, evitar caer en la manitis, es decir, que la explicación de las funcionalidades de un comando se solapen con las que ofrece la página man de ese mismo comando. Y, en cierta medida, Classic Shell Scripting cae en este problema en varias secciones. Los autores lo compensan complementando con lo que a menudo falta en las páginas man, es decir, una serie de buenos ejemplos que ayudan a entender las opciones y funcionalidades de cada una de las instrucciones que se estudian. Asimismo, ya metidos en las entrañas del volumen, Robbins y Beebe ilustran la potencia de la línea de comandos con una serie de programas que muy bien se podrían utilizar en entornos de producción. Entiéndase que no estamos hablando aquí de programas a lo “Hola Mundo”, sino verdaderas aplicaciones, como un buscador de instrucciones en las rutas establecidas por PATH, un script que ayuda a la compilación e instalación de paquetes en paralelo o un corrector ortográfico que utiliza AWK. Mención especial merece el apartado dedicado a AWK. Los autores expresan una especial predilección por este analizador y modificador de cadenas, y lo justifican dedicándole todo un capítulo en el que demuestran hasta donde se puede llegar con este potente lenguaje. El libro incluye además un análisis de varios tipos de shell, aparte del omnipresente Bash, destacando las fuerzas y debilidades del Z shell, Korn y otros. Asimismo, existe un capítulo dedicado a scripts seguros, donde se apuntan los problemas que puede causar un script deficientemente escrito y las soluciones para evitarlos. Classic Shell Scripting concluye con apéndices sobre el formato utilizado para escribir páginas man, imprescindibles para documentar correctamente un programa, un apartado sobre el sistema de ficheros Unix y por ultimo, un listado de los comandos más importantes clasificados según su
WWW.LINUX-MAGAZINE.ES
funcionalidad (implícitos, manipulación de texto, manipulación de ficheros, control de procesos, etc.).
A Destacar El volumen que nos ocupa sigue la línea habitual de O’Reilly en lo que se refiere a excelentes manuales técnicos magníficamente diseñados. Merece la pena destacar el buen diseño y la usabilidad de este manual que tiene detalles tales como poner en cada página par, al pie, el título del capítulo, y en cada página impar el título de la sección, lo que ayuda a encontrar fácilmente la información que interesa. Esta característica, unido a un completo glosario y el citado índice de instrucciones temático, hace que Classic Shell Scripting sea un placer de consultar.
Conclusión Un volumen sobre el uso y programación desde la línea de comandos no es algo que la mayoría de los usuarios de Linux pueda obviar. Se pueden elegir los manuales de aplicaciones según las aplicaciones que se utilicen. También pueden elegirse los manuales de programación según los lenguajes en los que se desarrolle. Pero, en lo que a la línea de comandos se refiere, no hay mucha alternativa. Tarde o temprano todo usuario de Linux acaba en la shell, y para navegar por ella sin perderse, Classic Shell Scripting tal vez sea el mejor de los mapas que uno pueda encontrar. Autores: Arnold Robbins y Nelson H.F. Beebe Idioma: Inglés Formato: 531 páginas Editorial: O’Reilly ISBN: 0-596-00595-4 Precio: 31,00 euros
Número 17
29
EVALUACIÓN • Portátiles con Linux
Comparativa de portátiles bajo Linux
PORTÁTILES A EXAMEN Hemos tomado tres ejemplos de la cosecha actual de portátiles para comprobar cuál se comporta mejor bajo Linux. POR MIRKO DÖLLE
L
os ordenadores portátiles presentan muchos retos para el sistema operativo. Los chipsets y tarjetas gráficas varían enormemente de los modelos usados en PCs estándar. Las funcionalidades de ahorro de energía de la CPU y los periféricos son una dificultad más. Hemos investigado cómo responden bajo Linux tres portátiles actuales de los fabricantes Acer, Dell y Samsung. Estas máquinas están pensadas para sustituir PCs estándar de escritorio, por lo que un requerimiento básico fue una resolución de más de 1024x768 píxeles. Además, quisimos que los portátiles tuvieran grabadora de DVD y discos duros de gran capacidad. Probamos una instalación estándar de Suse Linux 10 en los equipos. Las funcionalidades 3D se probaron con Tuxracer, instalando los drivers propietarios de ATI en el Dell Latitude D180 y en el Samsung X50. Hemos usado, así mismo, un testeador de teclados para comprobar el rendimiento de la batería. El testeador presiona caracteres a una velocidad de 60 por minuto, durante 30 segundos, y luego espera otros 30
30
Número 17
segundos. También realiza una pausa de 4 minutos y 30 segundos cada cinco tandas, y luego comienza de nuevo. Esto simula el uso habitual con un portátil, que suele ser revisar documentos existentes, por ejemplo. Los resultados y las características técnicas de los portátiles se muestran en la tabla “Comparativa de Portátiles”.
Acer Travelmate 4652LMi El Acer Travelmate 4652LMi es el candidato más asequible, incorpora una CPU Centrino y está sorprendentemente bien equipado. La pantalla de 15’‘ tiene una resolución de 1400x1050 píxeles, con una CPU Pentium M bastante rápida a una velocidad de 1.73 GHz. La grabadora de DVD soporta todos los formatos de DVD, incluyendo el DVD+R de doble capa. El único problema con la unidad es que el mecanismo de resorte falla al expulsar la bandeja si el portátil no esta completamente nivelado, sino que está inclinado a la derecha. En este caso, tendremos que sacar la bandeja de manera manual para extraer el disco.
WWW.LINUX-MAGAZINE.ES
Bajo Precio, pero Bueno Los 80GB de disco duro tienen un conector paralelo ATA. (Samsung es el único que instala un disco X50 SATA, que cuesta más del doble). Acer no instala una cara tarjeta gráfica de ATI o Nvidia. Esto significa que el Travelmate no está pensado para juegos 3D complejos como Quake o Unreal, pero funciona bien con Tuxracer, gracias al soporte 3D integrado en el chipset gráfico. Podemos conectar una pantalla externa al puerto DVI o VGA, aunque la tarjeta gráfica no soporta el modo dual-head. Podemos únicamente ver la misma imágen en el monitor y en la pantalla del portátil. Acer va por su cuenta en lo referente al teclado y ratón. El teclado está ligeramente curvado para proporcionar una escritura más ergonómica. Desafortunadamente, Acer ha movido las teclas de “mayor que” y “menor que”, así como el símbolo de tubería al otro lado del teclado, lo que puede resultar molesto si estamos acostumbrados al teclado tradicional, ya que esto nos obliga a mirar las teclas hasta que nos acostumbremos a su disposición. El portátil de Acer no tiene un bloque de teclas separadas, sino dos teclas con
Portátiles con Linux • EVALUACIÓN
autonomía: la batería, de 80 vatios-hora, aguantó tres horas y media en nuestra prueba de tecleo. Con una batería opcional en la unidad de DVD conseguiríamos otras dos horas extra.
Teclado Ejemplar
Desafortunadamente, Dell usa dos módulos DIMM de 512MB, (al igual que Samsung). Sin embargo, mientras que se puede acceder a ambos slots para RAM desde unas cubiertas bajo el Samsung X50, sólo podemos acceder a uno de los módulos en el Latitude. Obviamente, esto reduce la capacidad de memoria máxima del portátil Dell a 1536 MB en lugar de los 2048 MB que anuncia el fabricante.
El equipo de Dell brilla realmente en el apartado de WLAN y Bluetooth teclado y ratón. El teclado no Figura 1: EL Acer Travelmate 4652LMi no es sólo el más sólo tiene un bloque de El Latitude D180 usa una combinación de barato de la comparativa, sino que tiene el mejor cursores separado, sino que [Fn]+[F2] para habilitar las interfaces rendimiento de batería, lo que lo convierte en el ganador. tiene teclas de inalámbricas WLAN y Bluetooth. Sin desplazamiento encima de las embargo, el estado de los LEDs encima del símbolos de moneda. teclas numéricas, como el esquema teclado no siempre muestran una Desafortunadamente estas teclas no habitual en un PC. Los usuarios indicación veraz del modo en uso. Por devuelven códigos de escaneo, como las acostumbrados a teclados normales de ejemplo, el LED Wifi se mantiene cuatro teclas extra de la parte superior PC deberían poder adaptarse al teclado encendido incluso si hemos deshabilitado del teclado, por lo que resultan inútiles. de Dell sin problemas. Dell monta tanto las funciones inalámbricas. En nuestro El touchpad que monta Acer para touchpad como trackpoint como laboratorio, encontramos que sólo el LED sustituir al ratón es el único que tiene sustitutos del ratón, lo que debería dejar del Bluetooth era fiable. Ambas rueda entre los botones, y lo que es más, contentos a ambos frentes. conexiones WLAN y Bluetooth la rueda permite desplazamiento vertical El modelo Latitude presenta algunos funcionaban cuando estaba encendido, y y horizontal. pequeños defectos en su uso como no funcionaban si estaba apagado, aunque portátil. Las rejillas de ventilación para la el LED del Wifi estuviese encendido. No Buen Rendimiento de la CPU y la tarjeta gráfica están hubo manera de habilitar el Bluetooth y Batería fundamentalmente debajo del equipo, y WLAN de manera independiente, un gran El Acer Travelmate tiene un buen soporte por tanto podemos taparlas si tenemos el inconveniente en comparación con el Acer para Linux. Tanto el Bluetooth como la ordenador en nuestro regazo o si lo Travelmate. Al menos la BIOS nos permite WLAN funcionaron a la primera, y se ponermos sobre una superficie blanda. seleccionar si habilitamos la interfaz configuraron fácilmente desde la La interfaz para la base de docking con inalámbrica al arrancar. instalación de Suse Linux 10. Dos sus señales y voltajes está totalmente No fue fácil conseguir soporte para botones iluminados en la parte frontal desprotegida en la parte inferior del aceleración 3D por hardware con el chipset del portátil permiten al usuario equipo. Al menos el Samsung X50 tiene ATI Radeon X600, ya que el driver binario deshabilitar el Bluetooth y la WLAN de dos pinzas para evitar que cuerpos no estaba disponible en el momento de forma independiente. El resto de extraños como clips o grapas provoquen escribir este artículo. El modo de portátiles de la prueba habilitan o un cortocircuito en el bus PCI o causen suspensión a RAM funcionó tras la deshabilitan ambas de manera conjunta. cualquier otro daño. Y por último, las instalación, aunque no era estable al Las características de gestión de inusuales posiciones de los topes hacen 100%: el portátil falló al despertar en un consumo de Acer funcionaron es su que sea difícil colocar el portátil sobre par de ocasiones. mayor parte, lo cual ayudó al Travelmate superficies irregulares. a conseguir una duración de la batería de Unidad DVD cuatro horas y media. Ocho horas de Equivocada autonomía parecen una propuesta muy razonable si colocamos una batería extra De acuerdo con la orden de en el zócalo de la unidad óptica. Los compra, el Dell Latitude D180 drivers gráficos dieron problemas al debía tener una grabadora de habilitar el modo suspensión a RAM: al DVD para discos +R y -R. En reanudar el trabajo, la pantalla seguía en realidad, Dell nos proporcionó negro. una unidad combo DVDROM/CD-RW, que Dell Latitude D180 normalmente no está La pantalla que monta Dell en su disponible con este modelo. Figura 2: El Dell Latitude D180 tiene una pantalla de 15,4 Latitude D180 es del mismo tamaño que No tuvimos manera de saber pulgadas de alta definición, con una resolución de 1680 x la pantalla de Samsung, aunque no si la unidad era capaz de 1050 píxeles. Sin embargo, el puerto para la docking station muestra tanto brillo. grabar DVDs de doble capa, o situado en la parte inferior del portátil es susceptible de sufrir Desafortunadamente, esto afecta a la si soporta DVD-RAM. daños.
WWW.LINUX-MAGAZINE.ES
Número 17
31
EVALUACIÓN • Portátiles con Linux
Samsung X50 WMV 2130 El Samsung X50 es el más caro de los candidatos, pero es también el único de ellos que presenta una carcasa de magnesio de primera categoría. No sólo mejora la estabilidad: también lo hace mucho más ligero. De hecho el X50 pesa cerca de medio kilo menos que el Acer. El X50 está bien equipado. La pantalla alcanza unos fantásticos 1680x1050 píxeles, y el Pentium Mobile 2.13 GHz fue el más rápido en las pruebas de CPU. Así mismo, el X50 es el único portátil del test que incorpora disco duro SATA. Sólo hay tres cosas criticables: el conector VGA para monitores externos no es precisamente tecnología de vanguardia. Un puerto combinado DVI con señal analógica o dos puertos para pantallas, como en el Acer, habrían sido más útiles, especialmente si consideramos que el Samsung X50 soporta dual-head con imágenes distintas en pantallas TFT externas. También encontramos grandes dificultades para añadir una ampliación de memoria, ya que el Samsung usa dos DIMM de 512 MB, en lugar de un módulo de 1 GB, y esto bloquea ambos slots RAM. También resulta imposible sacar la unidad de DVD: algunas líneas aéreas no le dejarán usar el portátil en vuelo. Y es una pena, porque el X50 viene con un sistema multimedia AV Station, que reproduce videos, DVDs y música independientemente del sistema operativo que tengamos instalado.
Pobre Rendimiento de la Batería La batería estándar con capacidad de 50 vatios-hora mantienen al portátil con vida durante dos horas y media. El hecho de que el modelo de Samsung no tenga una unidad de DVD extraíble, contrariamente al Travelmate, significa que no podemos instalar una segunda batería. Samsung ofrece una batería de mayor capacidad, de 80 vatios-hora, aunque la batería sobresale de la parte trasera del portátil, y no nos dará más de cuatro horas de autonomía. La distribución del teclado es correcta, pero el touchpad es algo pequeño. Tiene una altura de 1,5 pulgadas, que es un tercio de pulgada más pequeño que otros touchpads, aproximadamente. También tenemos que restar otro tercio de pulgada de la zona de desplazamiento, en el lateral.
32
Número 17
El Samsung X50 tiene buen soporte bajo Linux: Suse Linux 10.0 detectó todos los componentes, con la excepción del lector de tarjetas Flash y el escáner de huellas digitales. De nuevo, las cuatro teclas extra situadas encima del teclado no generan códigos de escaneo y quedan sin usar. La gestión de consumo resultó también algo fallona: el portátil no se despertaba tras habilitar la Figura 3: El Samsung X50 tiene un brillante y enorme suspensión a RAM. pantalla de 1680 x 1050 píxeles, que probablemente Suse 10.0 detectó la tarjeta afecta significativamente al rendimiento de la batería gráfica correctamente, y aunque soportó la visualización en ofrece el código fuente de estos paquetes 1680x1050 píxeles, la aceleración 3D y el en [2] para cumplir con la GPL, y esto modo dual-head no funcionaron. Para hace de Samsung el primer fabricante que habilitar estas funcionalidades, debemos ofrece oficialmente el polémico paquete descargar el driver ATI desde [1] e libdvdcss. instalarlo de forma manual. Conclusiones La configuración del driver en Sax es La Tabla 1 proporciona una comparación complicada. Podemos configurar la de los portátiles que hemos puesto a resolución a 1680x1050 y el tamaño a 15,4 prueba. Con el menor precio, un buen pulgadas, pero en este caso, tendremos conjunto de hardware, el mejor que reiniciar. Esto es aplicable igualmente rendimiento de la batería y un buen al modo dual-head. soporte para Linux, el Acer Travelmate Linux a Bordo 4652LMi se corona como vencedor de la El software multimedia AV Station prueba, demostrando que un buen portátil preinstalado es otra de las características no tiene por qué ser caro. especiales del Samsung X50. De hecho, el El Samsung X50 WMV 2130 ocupa la AV Station no es sino una minisegunda plaza: aunque tiene una pantalla distribución Linux que se puede ejecutar a mayor y una CPU más rápida que el través de los botones extra situados ganador, así como un disco duro SATA, encima del teclado, cuando el portátil está cuesta más del doble. Recomendamos el apagado. El portátil tarda unos 20 Samsung X50 para guerreros de la segundos en arrancar, y aparece la AV carretera, debido a su delgado diseño y Station con una cuidada interfaz gráfica bajo peso, aunque seguramente de usuario desde la que podemos necesitemos la batería con más capacidad. visualizar imágenes, oír música y ver Un excelente soporte para Linux, una películas. gran pantalla y un buen rendimiento de la La distribución multimedia Linux está batería caracterizan al Dell Latitude. Sin oculta en una partición invisible de 16MB. embargo, el equipo de Dell es más lento y Incluso la herramienta fdisk de Suse Linux pesado que el Samsung X50. Esta es la 10.0 respeta la marca de ocultación y no razón por la que el Dell Latitude D180 muestra la partición. Sin embargo, fdisk queda en tercer lugar en esta prueba, de Busybox, que se usa en muchos CDs de perdiendo la segunda frente al Samsung ■ rescate, revela esta segunda partición. X50 por un estrecho margen. El sistema de rescate fue incapaz de leer la partición oculta, ya que la BIOS impide RECURSOS el acceso. En otras palabras, no hay [1] ATI 3D HOWTO para Suse Linux: peligro de borrar el sistema multimedia http://www.suse.de/~sndirsch/ cuando instalamos Linux. ati-installer-HOWTO.html Los primeros resultados sugieren que [2] Fuentes del Kernel y libdvdcss para el Samsung usa el Kernel 2.4.21 para su AV Station de Samsung: http://www. mini-Linux y libdvdcss para reproducir samsungpc.com/top_faq/ DVD con protección anticopia. Samsung 58_faqanswer_%20avsnow_info.htm
WWW.LINUX-MAGAZINE.ES
Portátiles con Linux • EVALUACIÓN
Fabricante
Acer
Dell
Samsung
Modelo:
Travelmate 4652LMi
Latitude D810 Advanced
X50 WVM 2130
CPU:
Pentium-M 740, (1,73 GHz)
Pentium-M 750, (1,86 GHz)
Pentium-M 770, (2,13 GHz)
Chip set:
Intel 915GM
Intel 915PM
Intel 915PM
RAM (max.):
512 MByte (2048 MByte)
1024 MByte (1536 MByte)
1024 MByte (2048 MByte)
Display Tamaño (tipo):
15’‘(TFT)
15,4’‘(TFT)
15,4’‘(TFT)
Resolución:
1400 x 1050 Píxeles
1680 x 1050 Píxeles
1680 x 1050 Píxeles
Brillo ajustable:
Sí
Sí
Sí
Tarjeta gráfica:
Intel 915GM
ATI Radeon X600
ATI Radeon X700
RAM de video:
128 MByte (compartida)
128 MByte
128 MByte
3D | Dual-Head | externo:
Sí | No | VGA, DVI
Sí | Sí | VGA
Sí | Sí | VGA
Unidades Disco Duro:
80 GByte, PATA
80 GByte, PATA
80 GByte, SATA
Unidad CD/ DVD:
DVD±R/RW/RAM DL
DVD-ROM/CD-RW
DVD±R/RW/RAM
Ethernet:
Sí
Sí
Sí
Chip | driver:
Broadcom BCM5788|tg3
Broadcom BCM5751|tg3
Broadcom BCM5788|tg3
WLAN:
IEEE 802.11b/g
IEEE 802.11b/g
IEEE 802.11a/b/g
Deshabilitar:
Sí
Sí
Sí
Chip | driver:
Intel 2200BG|ipw2200
Intel 2200BG|ipw2200
Intel 2915ABG|ipw2200
Bluetooth:
Sí
Sí
Sí
Módem:
Sí
Sí
Sí
Soporte Linux:
-
Sí
Sí
Calidad del diseño del teclado:
4
2
3
Teclas de Windows:
2
Interfaces de Red
Teclado y ratón 2
3
Cursor separado|teclas de scroll: -|-
Sí|Sí
Sí|-
Teclas de scroll sin [Fn]:
Sí
Sí
Sí
Sustituto de ratón:
Touchpad
Touchpad, Trackpoint
Touchpad
Botones|rueda de scroll:
3|Sí
2|-
2|-
4xUSB 2.0|1|1
4xUSB 2.0|no|1
3xUSB 2.0|1|1
Monitor|Sonido:
VGA,DVI|auriculares, micro
VGA|auriculares, micro
VGA|auriculares, micro
PS/2|serie|paralelo:
-|-|-
-|Sí|-
-|-|-
Ethernet|Módem|IR:
1xRJ-45|Sí|Sí
1xRJ-45|Sí|Sí
1xRJ-45|Sí|-
Conectores USB|Firewire|Cardbus:
Batería y adaptador Tipo de batería:
LiIo
LiIo
LiIo
Capacidad:
63 Wh (14,8 V, 4300 mAh)
79 Wh (11,1 V, 7200 mAh)
53 Wh (11,1 V, 4800 mAh)
Rendimiento:
4:44 h
3:23 h
2:30 h
Tamaño|Peso:
34 x 4 x 28.5 cm | 2.9 kg Adaptador de red, Cable eléctrico, Cable de módem, Windows XP Pro(Recovery CD), Norton Antivirus, Manual, Mini-Guía
36.5 x 5 x 26 cm | 3.2 kg Unidad floppy, cable Mini USB, Adaptador de red, Cable eléctrico, Cable de Módem, Windows XP Pro (Recovery CD), Manual
36 x 3.5 x 27 cm | 2.5 kg Sensor de huellas, Adaptador de red, Cable eléctrico, Windows XP Pro (Recovery CD), Manual, MiniGuía
Precio:
1.250 Euros
1.975 Euros
2.700 Euros
WWW.LINUX-MAGAZINE.ES
Número 17
33
PRÁCTICO • Arch Linux
Volviendo a lo básico con Linux Arch
ARCOS Si se busca un sistema estable y rápido sin las capacidades de una GUI, entonces hay que probar Arch Linux. POR JON KENT
Ú
ltimamente la comunidad Linux está haciendo énfasis en las distribuciones con escritorios que facilitan su instalación y la configuración del sistema sin aventurarse más allá de la GUI. A pesar del éxito de estos sistemas amigables para los usuarios noveles, un segmento significativo de la comunidad Linux prefiere una solución mucho más simple. Estos usuarios desean claridad, estabilidad, Línea de Comandos y velocidad sin importarles la proliferación de herramientas redundantes y asistentes que les ayuden en la tarea de configurar el sistema que han hecho recientemente tan populares las distribuciones basadas en GUI. En el pasado, los usuarios de Linux que no querían florituras cambiaban a distribuciones como Slackware, Gentoo o Debian, pero otra distribución sencilla está ganando adeptos entre los usuarios de Linux: Linux Arch. El comienzo de Linux Arch [1] se sitúa en el año 2001 cuando Judd Vinet no logró encontrar ninguna distribución que se ajustase a sus necesidades. Las ideas para Arch fueron tomadas de Debian, Gentoo y Slackware, y poco a poco han ido evolucionando hasta convertirse en una distribución estable, potente y simple con toda una comunidad de usuarios y desarrolladores. Arch proporciona pocas herramientas de configuración y no está diseñado para los usuarios noveles de Linux. Su filosofía es mantener a los usuarios cerca del sistema subyacente. Éstos esperan
34
Número 17
enfrascarse directamente con los ficheros de configuración (como en los viejos tiempos). Pero Arch también proporciona algunas ventajas sobre otras distribuciones simples como Slackware, incluyendo innovaciones como la conexión en caliente y un sistema mucho más avanzado para la gestión de paquetes. Además, como Arch está especialmente optimizado para el chip i686, ofrece beneficios en cuanto al rendimiento si se le compara con otras distribuciones pensadas para ejecutarse en un amplio rango de arquitecturas. Los fanáticos de Arch dicen que proporciona “… la estabilidad y la simplicidad de Slackware y la velocidad de Gentoo [2]”. El cuadro titulado “Comparando Arch” proporciona una muestra de cómo los desarrolladores de Arch comparan su producto con otras distribuciones. Aunque parezca que una distribución como Arch pueda ser más difícil de aprender para un usuario principiante, la ventaja de un sistema como este radica en que, una vez que se haya aprendido, realmente se sabrá algo sobre Linux. Este artículo ayuda a comenzar con Linux Arch y describe algunas de sus características más interesantes.
mente junto con cualquier otro sistema operativo que ya se tenga instalado previamente, aunque siempre es conveniente realizar una copia de seguridad de los datos que sean importantes. Vale realmente la pena tener acceso a otro PC para ver, o imprimir, la documentación sobre la instalación [4] del sitio web de Arch. Como con la mayoría de las instalaciones, primero habrá que particionar el disco, que se realiza utilizando cfdisk, o bien se puede dejar que Arch se instale en todo el disco si es lo que se desea. Una vez que se han creado las particiones y se han establecido los puntos de montaje, la si-
La Instalación Al contrario que la mayoría de las distribuciones, el programa de instalación de Arch está basado en texto. Si se tiene instalado Slackware o Debian, ya se estará familiarizado con esta instalación basada en texto. Arch se instalará feliz-
WWW.LINUX-MAGAZINE.ES
Figura 1: Arch espera que el usuario lo configure tal y como se hacía antes: por medio de los ficheros de configuración en formato texto.
Arch Linux • PRÁCTICO
guiente tarea es seleccionar los paquetes a instalar. Se recomienda que en este momento sólo se instale el paquete básico e instalar cualquier otro paquete que sea necesario una vez que se tenga el sistema funcionando correctamente. Una vez que el sistema básico esté instalado, se selecciona un kernel configurado para IDE o SCSI (que hará falta si se tiene cualquier dispositivo SATA) o incluso se puede compilar un kernel nuevo si se desea. Sin embargo, en este momento, es mejor seleccionar un kernel que ponerse a compilar uno, ya que es mejor tener un sistema operativo completo antes de realizar un cambio fundamental. Hay que asegurarse de que se selecciona un kernel udev, no un kernel devfs, ya que Arch actualmente utiliza udev en vez de devfs. El último paso del proceso de instalación es configurar el sistema, y aquí es donde es necesario el acceso a la documentación. Se muestra una lista de ficheros de configuración que tienen que ser editados. Hay comentarios útiles dentro de cada uno de estos ficheros, lo que permite tener una idea de cómo funcionan. Estos ficheros le serán familiares a los usuarios
Listado 1: Script de Comienzo init de Arch 01 /etc/rc.sysinit -- se ocupa de cargar y establecer la configutación del sistema 02 /etc/rc.single -- fichero script para nivel de sistema monousuario 03 /etc/rc.multi -- fichero script para nivel de sistema multiusuario 04 /etc/rc.local -- fichero script para nivel de sistema multiusuario local 05 /etc/rc.shutdown -- fichero script para nivel de sistema de cierre 06 /etc/rc.d/* -- demonios configurado para el sistema
que hayan configurado Linux sin haber hecho uso del instalador GUI. Por ejemplo, se utilizará el fichero rc.conf para configurar la red, el nombre del equipo, los módulos del kernel que se tienen que cargar y los servicios que se han de ejecutar. Habrá que utilizar un editor de textos como vi o nano para editar estos ficheros.
El orden de los servicios en rc.conf es importante, ya que se ejecutan en el orden exacto en el que han sido introducidos. No hay ningún tipo de comprobación de dependencias, así que si un servicio no comienza cuando se espera, habrá que comprobar que el orden sea correcto. Por último, es aconsejable comprobar bien los cambios que se hayan realizado y asegurarse de que se han realizado todas las modificaciones necesarias, ya que el instalador nos permitirá continuar aunque no se hayan editado todos los ficheros. Cuando se haya concluido con la instalación, se reinicia el sistema y se tendrá un sistema Arch mínimo. El siguiente paso es actualizar el sistema con ayuda de la herramienta pacman (comentada más adelante) para asegurarse que está actualizado al día antes de añadir paquetes adicionales. Si se seleccionó udev sobre devfs, esta actualización será bastante sencilla, pero si se estaba utilizando devfs, habrá que realizar unos pasos adicionales para convertir devfs a udev.
El Arranque del Sistema La filosofía principal de Arch es proporcionar un control completo sobre la con-
Arch sobre Arch Una página del sitio web de Linux Arch compara Arch con otras distribuciones Linux populares [3]. La comparativa, por supuesto, es cortesía de Arch, por lo que las otras distribuciones podrían verlo de manera diferente, aunque el resumen (que se muestra a continuación) proporciona una muestra del contexto y las metas de Linux Arch. Arch vs. Gentoo Gentoo contiene más paquetes. Arch dispone de distribuciones binarias y de código fuente. PKGBUILDs son más fáciles de hacer que ebuilds. Gentoo es más portable, ya que los paquetes se tienen compilados para arquitecturas específicas mientras que Arch sólo está disponible para i686 (aunque se están desarrollando proyectos por los usuarios para i586 y x64). No existen pruebas documentadas de que Gentoo sea más rápido que Arch. Arch vs. Crux Linux Arch es descendiente de Crux. Judd resumió una vez las diferencias: “Utilicé Crux antes de comenzar con Arch. Arch era bastante similar a Crux. Luego escribí pacman y makepkg para
reemplazar mis bash pseudo scripts para realizar paquetes. (Compilé Arch como un sistema LFS). Por lo tanto son distribuciones completamente diferentes, pero técnicamente son casi lo mismo. Tenemos dependencia para el soporte (oficialmente) por ejemplo, aunque Crux posee una comunidad que proporciona otras características. Prt-get de CLC produce dependencias. Crux ignora muchos problemas que también tenemos nosotros, ya que es un paquete bastante minimalista, básicamente lo que Per usa y nada más” Arch vs. Slackware Slackware y Arch son distribuciones simples. Ambas usan scripts de inicio al estilo BSD. Arch proporciona un sistema de gestión de paquetes más robusto con pacman, que, al contrario que la herramienta estándar de Slackware, permite actualizaciones automáticas simples del sistema. Slackware se ve como más conservador en su ciclo de desarrollo, prefiriendo paquetes estables. Arch está más al día en este aspecto. Arch solamente está disponible para i686, por otro lado Slackware se puede ejecutar en sistemas i486. Arch es un sis-
WWW.LINUX-MAGAZINE.ES
tema muy bueno para los usuarios de Slack que deseen una gestión de paquetes más robusta o paquetes más actualizados. Arch vs. Debian Arch es más simple que Debian. Arch posee menos paquetes. Proporciona un soporte mejor para poder compilar nuestros propios paquetes, algo que Debian no proporciona. Arch es más indulgente cuando se refiere a paquetes “no libres”, tal como define GNU. Arch está optimizado para i686. Los paquetes de Arch están más actualizados que los de Debian. Arch vs. Distribuciones Gráficas Las distribuciones gráficas poseen muchas similitudes y Arch es muy diferente de todas ellas. Arch está basada en texto y está orientada a la línea de comandos. Arch es una distribución mucho mejor si lo que se desea es aprender realmente Linux. Las distribuciones basadas en gráficos suelen venir con instaladores GUI (como Anaconda de Fedora) y herramientas de configuración del sistema GUI (como Yast de Suse).
Número 17
35
PRÁCTICO • Arch Linux
algunos, este es el sistema init verdadero, aunque otros prefieren la solución System V init usada por una gran cantidad de distribuciones Linux. A pesar de ello, se pueden utilizar los scripts System V init, que se encuentran en /etc/rc.d.
Gestión de Paquetes Binarios Figura 2: Aunque Arch hace énfasis en la configuración basada en ficheros de texto, aún se puede realizar con un escritorio como Gnome o KDE.
figuración. Como se habrá podido comprobar durante la instalación, no se configura nada automáticamente y no se activa ningún servicio a menos que se le indique al sistema que lo haga. Esta solución implica que se aprenderá el funcionamiento del programa y del propio Linux rápidamente. Arch posee un sistema init estilo BSD, que también se usa en Slackware. Para
Listado 2: Opciones de Comando pacman 01 pacman -Sy -- sincroniza paquetes locales de la base de datos 02 pacman -S package_name -instala, reinstala o actualiza un paquete 03 pacman -S extra/package_name -- instala paquete desde un repositorio extra 04 pacman -Su -- actualiza todos los paquetes instalados si es necesario 05 pacman -A /<path to package>/package_name-version. pkg.tar.gz -- instala un paquete local 06 pacman -R package_name -elimina un paquete 07 pacman -Rs package_name -elimina un paquete y sus dependencias si es seguro hacerlo 08 pacman -Ss package -- busca un paquete 09 pacman -Si package -- muestra información del paquete 10 pacman -Scc -- limpia todos los ficheros descargados de la cache de pacman
36
Número 17
Arch proporciona la herramienta de gestión de paquetes binarios pacman, que es análoga a la herramienta apt-get de Debian. Pacman utiliza los ficheros tar.gz como formato de paquetes y mantiene una base de datos de paquetes basada en texto. Como con apt-get, pacman ofrece la posibilidad de instalar y eliminar paquetes, consultas del estado de la instalación de un paquete, actualización de la base de datos de paquetes, etc. Pacman proporciona una manera sencilla de gestionar e instalar paquetes, tanto desde los repositorios oficiales de Arch como desde los repositorios del usuario. Los repositorios del usuario, referidos como AUR (Arch User Repositories) son una característica muy útil de Arch, permitiendo a un usuario proporcionar un paquete que no se encuentre disponible en los repositorios oficiales de Arch. Un buen ejemplo de esto es el repositorio fouiny_repo, que suministra paquetes de la versión E17 de Enlightenment. Además, se pueden crear repositorios locales propios para cualquier paquete que se desee controlar. Como cualquier gestor de paquetes que se precie, pacman permite actualizar fácilmente el sistema. Simplemente hay que sincronizar la lista de paquetes mantenida en el sistema y si se le pide que los sincronice y actualice, pacman los actualizará a la última versión disponible. La instalación de los paquetes es igualmente sencilla; pacman descargará cualquier dependencia que el paquete precise. Pacman se configura por medio de un fichero de configuración /etc/pacman.conf. En este fichero de configuración se especifican los repositorios con los que se desea realizar la sincronización. También se puede especificar que los ficheros de configuración no se modifiquen por ninguna instalación de paquetes. Adicionalmente si se desea congelar un paquete en su versión actual, se puede configurar para que mantenga un paquete tal cual en este fichero.
WWW.LINUX-MAGAZINE.ES
NoUpgrade = U etc/passwd etc/group U etc/shadow etc/sudoers HoldPkg = pacman glibc
En la sección del repositorio se definen qué repositorios se tienen que utilizar. Estos repositorios se pueden definir directamente o bien pueden incluirse dentro de otro fichero. Esta última opción es útil para los repositorios oficiales, que poseen múltiples mirrors.
Gestión de Paquetes Fuente Arch también proporciona una herramienta para la gestión de paquetes fuente ABS (Arch Build System), que es casi como emerge de Gentoo. ABS está diseñado para empaquetar software nuevo que aún no esté disponible en ningún sitio, modificar los paquetes existentes según otros requerimientos o incluso recompilar el sistema entero utilizando los flags del compilador. Cuando se usa ABS, crea un paquete que puede ser instalado con la herramienta pacman. No hace falta utilizar ABS para tener un sistema completamente funcional, pero proporciona la posibilidad de ajustar los paquetes software a nuestros deseos. ABS utiliza los paquetes cvsup y wget, así que tienen que estar instalados previamente antes de poder utilizarla : pacman -Sy cvsup wget
Es conveniente utilizar los flags -Sy cuando se instale cualquier paquete para asegurarse de que se está instalando la última versión, ya que esta opción actualiza la lista de paquetes antes de realizar cualquier instalación. Hay que ejecutar el comando abs para sincronizar el árbol ABS con el servidor Arch utilizando CVS, que se copia en /var/abs. La estructura del directorio es bastante sencilla. El nivel básico de /var/abs representa cada categoría y el siguiente nivel contiene un directorio para cada paquete. Cada directorio contiene un fichero PKGBUILD para cada paquete. Para instalar software desde ABS, hay que entrar en el directorio del paquete de software del árbol ABS y luego ejecutar el comando makepkg. El comando makepkg espera que el fichero PKGBUILD se encuentre en el directorio
Arch Linux • PRÁCTICO
Listado 3: Entradas en /etc/ pacman.conf 01 02 03 04
[repository-name] Server = ftp://server.net/repo [current] # Añada sus servidores preferidos aqui, se utilizarán primero 05 Include = /etc/pacman.d/current
local. Una vez que el código fuente esté compilado, se puede instalar el nuevo software con pacman de la siguiente manera: Instalación de un paquete nuevo: pacman -A U [nombre_paquete].pkg.tar.gz Actualización de un paquete existente: pacman -U U [nombre_paquete].pkg.tar.gz
Además de estos directorios, hay un directorio llamado local en /var/abs. Este directorio es para crear nuestros propios paquetes, en vez de modificar los ficheros PKGBUILD que se hayan sincronizado. Si el fichero PKGBUILD no posee los parámetros que se desean, hay que crear un directorio en local, se copia el fichero a este directorio, se añaden o eliminan los parámetros y a continuación se ejecuta el comando makepkg para compilar e instalar el software. Para controlar qué optimizaciones de gcc se van a utilizar, makepkg tiene un fichero de configuración llamado /etc/makepkg.conf. Si se ha usado Gentoo, las opciones de este fichero no serán desconocidas. Por defecto, Arch usa los flags siguientes de gcc: -march=i686 -O2 -pipe, pero si se desea saborear el peligro, se puede cambiar a -O3. Como Arch está firmemente basado en i686, no tiene mucho sentido cambiar la opción -march a menos que uno se sienta muy aventurero.
hwd Por defecto, Arch usa los scripts de detección de hardware hotplug que se usan en la mayoría de las distribuciones Linux. Este sistema simplifica la configuración modular, la autodetección del hardware y la carga de los módulos necesarios. Sin embargo los desarro-
lladores de Arch sintieron que este sistema era demasiado lento y crearon su propia solución, que llamaron hwd. Al contrario que hotplug, hwd ejecuta modprobe en un proceso hijo, de modo que no tiene que esperar a que modprobe cargue cada módulo antes de que pueda continuar. Hwd es tanto para los sistemas de dispositivos devfs como para los udev. Como hwd no es una utilidad de configuración, no modifica los ficheros de configuración, lo que iría en contra de la filosofía de Arch. En vez de ello hwd detecta el hardware y proporciona información de cómo configurarlo manualmente. No hay que instalar hwd si se está contento con hotplug: como ocurre con todo en Arch, el uso de hwd es opcional. Si raramente se reinicia el sistema o si se puede vivir con un ligero retraso durante el proceso de arranque, no hay razón por la que cambiar hotplug. La instalación de hwd es sencilla: pacman -Sy hwd lshwd
Incluso ahora que está instalado hwd, hay que configurar aún el servicio hwd para que se ejecute durante el proceso de arranque y deshabilite hotplug. Como cabría esperar, esta opción está controlada por el fichero rc.conf y simplemente hay que añadir la siguiente línea al fichero: !hotplug hwd
El signo de admiración delante de hotplug deshabilita el servicio hotplug. El siguiente paso consiste en descargar las últimas tablas pci/pcmcia, que hwd utiliza para identificar el hardware, ejecutando: hwd -u
Ahora, cuando se reinicie el sistema, se ejecutará hwd en vez de hotplug. Además de la detección de hardware, hwd y lshwd pueden usarse para establecer un fichero de configuración X inicial o para ayudar a configurar las X. hwd -x
Este comando creará un fichero de configuración de ejemplo X.org en /etc/X11,
WWW.LINUX-MAGAZINE.ES
Figura 3: hwd detecta el hardware y muestra información del sistema.
que se puede utilizar para crear el fichero de configuración final de las X.
El Escritorio Arch usa X.org como servidor X y posee paquetes para la mayoría de los escritorios. Para cada escritorio se encontrarán la mayoría de las aplicaciones, incluidas las no libres como Flash y Acrobat. Algunas aplicaciones se añaden ellas mismas al menú del escritorio, mientras que otras requerirán que se haga manualmente. Parece que no existe un estándar para Arch en esta área, lo que puede resultar algo molesto. Sin embargo, la velocidad a la que GNOME o E17 se ejecutan es bastante impresionante y esto puede deberse en parte a que el estándar de base de Arch se centra en i686.
Conclusiones Linux Arch es una distribución rápida y ligera que proporciona una solución sencilla, siendo la mejor de su categoría. Incluso si se posee poca experiencia en Linux, se debería ser capaz de instalarlo y ejecutarlo, además de que los conocimientos que se obtendrán trasteando con Arch ayudarán a aumentar ■ nuestra comprensión sobre Linux.
RECURSOS [1] Sitio principal de Arch Linux: http:// www.archlinux.org [2] http://michael-and-mary.net/intro/ node/260/ 380 [3] Arch contra Otros: http://wiki. archlinux.org/index.php/ Arch_vs_Others [4] Guía de Instalación de Arch: http:// archlinux.org/docs/en/guide/install/ arch-install-guide.html [5] Foros Arch: http://bbs.archlinux.org [6] Contribución de los usuarios Arch: http://user-contributions.org/home/ index.php
Número 17
37
PRÁCTICO • Mudbag
Crear Crear bases bases de de datos datos sencillas sencillas con con Mudbag Mudbag
SIN ENSUCIARSE
Si estás buscando una base de datos rápida y sencilla, que sea accesible a través de navegador Web, deberías probar Mudbag. POR DIMITRI POPOV
M
ySQL es una potente herramienta que nos permite elaborar prácticamente cualquier aplicación con bases de datos. Sin embargo, puede llevarnos bastante tiempo dominar las innumerables funcionalidades que implementa. ¿Qué pasa si sólo queremos implementar una base de datos sencilla para almacenar notas y direcciones? Para una única aplicación no vamos a perder el tiempo leyendo enormes libros acerca de la teoría de bases de datos. Afortunadamente, existe una herramienta que puede ayudarnos a crear bases de datos sencillas en apenas unos minutos: Mudbag. Mudbag es un sistema de base de datos multiusuario, basado en Web, para aplicaciones rápidas y sencillas. Podemos instalar Mudbag en nuestro propio servidor, o bien podemos usar el servidor oficial de Mudbag, desde www. mudbag.com. Este servidor es una buena herramienta para experimentar un poco, pero no es recomendable para guardar información crítica. Por otro lado, tam-
38
Número 17
Instalación de Mudbag bién es la solución ideal si no queremos gastar mucho esfuerzo en mantener nuestro propio servidor, y queremos que los datos sean accesibles a través de Internet. Según la página de Mudbag, su servidor está disponible de manera gratuita para pequeñas bases de datos (más de 10 tablas con 100K de información), y a partir de este límite se empieza a cobrar. (Los detalles al respecto aún no son definitivos, pero según la página de Mudbag “los costes serán muy bajos”). Si queremos crear una pequeña base de datos sobre la marcha, Mudbag puede ser exactamente lo que necesitamos.
Tenemos dos opciones a la hora de instalar y usar Mudbag. Si tenemos nuestro propio servidor con Apache, y tenemos instalado también MySQL y PHP, podemos configurar nuestra propia solución Mudbag. La instalación es realmente sencilla. Se descarga la última versión de la aplicación desde http://sourceforge.net/projects/mudbag y se descomprime. Localizamos el archivo setup-missing.php, lo abrimos con nuestro editor favorito y eliminamos el preámbulo (las 18 primeras líneas). En la sección de acceso a la base de datos, reemplazamos los valores por defecto con la información real. Se renombra el archivo como setup.php, y lo llevamos al directorio localsite. A continuación se
Figura 1: Un sencillo diseño de una base de datos de recetas.
WWW.LINUX-MAGAZINE.ES
Mudbag • PRÁCTICO
copia el directorio mudbag entero a la raíz de nuestro servidor de documentos y dirigimos nuestro navegador a http://myserver/mudbag/install.php. El script de instalación se ocupará del resto.
Crear la Aplicación con Mudbag Mudbag instala varios ejemplos de bases de datos para juguetear un poco. Sin embargo, la mejor manera de aprender las funcionalidades de Mudbag es crear directamente una sencilla base de datos relacionada con algún aspecto de nuestra vida diaria. Un ejemplo podría ser una base de datos de recetas. En primer lugar, se debe crear una tabla para nuestra base de datos de recetas. Pulsamos el botón Add Table y le damos un nombre. A continuación se llenan las tablas con los campos. Podemos empezar con el campo que guarde los nombres de los platos. Pulsamos el botón Add Fields y le damos un nombre. Seguidamente seleccionamos Text de la lista desplegable Type, marcamos la opción Required y pulsamos Save. De la misma manera podemos añadir otros campos para el tipo de plato, ingredientes, instrucciones para cocinarlo, nivel de dificultad, etc. Cuando añadamos los campos, debemos acordarnos de asignar el tipo correcto a cada campo. Por ejemplo, los campos Ingredients y CookingInstructions deberían fijarse a Memo, mientras que el campo Date debería ser del tipo DateTime. Mudbag también nos permite añadir el tipo Choice, que podemos usar para añadir listas desplegables a nuestra base de datos. Podemos, por ejemplo, añadir el grado de dificultad, basado en tres niveles: fácil, intermedio y difícil. Cuando terminemos de añadir campos, pulsamos el botón Back to Table. No olvidemos que el diseño de la base de datos no es definitivo: podemos introducir cambios en cualquier momento pulsando el botón Design. Ahora podemos alimentar la base de datos con la información. Obviamente, se pueden añadir los registros de manera manual uno a uno. Para ello, seleccionamos la base de datos y pulsamos en botón Add Records. Sin embargo, si ya tenemos recetas, pongamos por caso, un documento de hoja de cálculo de OpenOffice.org Calc, podemos importar-
las de manera sencilla a nuestra base de datos de recetas. En primer lugar, debemos exportar la información de la hoja de cálculo a formato CVS. Antes de exportarla, sin embargo, deberíamos asegurarnos de que la estructura de la hoja de cálculo es similar a la de la base de datos (es decir, que cada columna de la hoja de cálculo tiene su campo correspondiente en la base de datos). Es preferible que las columnas Figura 2: Importar la información existente a una base de datos estén también en el Mudbag es sencillo. mismo orden que los campos de la base de ciertos campos ordenados de manera datos. Este trabajo previo nos evitará adecuada según los criterios del complicaciones posteriores en el usuario. Por ejemplo, podemos crear momento de importar. Sin embargo, una vista que contenga registros, Mudbag incluye herramientas nececuando el campo del tipo de plato sea sarias para importar datos en los camdel tipo desayuno, de manera que no pos adecuados, de manera que podamos tengamos que deambular por todos los exportar los datos tal cual y dejar los registros para encontrar una receta de ajustes para más tarde. un buen desayuno. Podemos también Una vez que la información se ha crear una vista que contenga sólo los exportado a formato CVS, nos vamos a nombres de los platos y los ingrela página principal de Mudbag y puldientes: esta vista puede ser útil para samos en botón Import. Seleccionamos la ruta hasta el archivo CVS y pulsamos crear un lista de la compra. Next. Elegimos nuestra base de datos de Generar una vista es sencillo. En la recetas desde la lista Import Into, y nos pantalla principal de Mudbag, pulaseguramos de que los campos samos en el botón Add View, selecDelimiter y Quote están fijados a comas cionamos la tabla que queramos usar y y comillas, respectivamente. Si la pulsamos Continue. Le damos un primera fila de nuestra hoja de cálculo nombre, y marcamos la opción si queoriginal contenía cabeceras (los nomremos que la vista sea visible por los bres de los campos, según la termidemás. Usamos los botones de direcnología de Mudbag), marcamos la ción para añadirle los campos deseaopción Headings. Cuando pulsamos dos. Si queremos ordenar los registros Next, podemos ajustar otras configurade la vista, podemos añadir hasta tres ciones de importación, como cuántas criterios. Finalmente, podemos especicolumnas deberían ignorarse al imporficar hasta dos filtros. Si queremos tar. Por último, revisamos la configuusar la vista para echar un vistazo ración de importación y tenemos la rápido de todos los desayunos, sólo opción de si queremos guardarlas para tenemos que crear un filtro en el cual usos futuros. DishType sea igual a Breakfast. Podemos refinarla aún más con un Crear Vistas segundo filtro. Por ejemplo, si creamos un filtro donde PretTime sea menor o Mudbag también nos permite diseñar igual a 15 minutos y fijamos el opevistas, lo cual es útil cuando queremos rador lógico a AND. La vista mostrará ver un subconjunto de registros o sólo
WWW.LINUX-MAGAZINE.ES
Número 17
39
PRÁCTICO • Mudbag
Figura 3: Diseño de una vista en Mudbag.
todos los desayunos con tiempo de preparación inferior a 15 minutos.
Reportes Las funcionalidades de reportes son parte esencial de un sistema de base de datos, y Mudbag tiene algunas características de reportes ciertamente ingeniosas. Mudbag nos permite crear cuatro tipos diferentes de reportes: Tabular, Record, Label y Email. El tipo Tabular puede usarse para crear una sencilla lista con todos los registros o subconjuntos. Con el tipo Record podemos generar reportes en los que los registros se agrupen según criterios
definidos por el usuario. En cuanto al tipo Label, está pensado para crear etiquetas, lo cual es una bendición si tenemos nuestros contactos en una libreta de direcciones basada en Mudbag. El tipo Label ofrece también un amplio rango de formatos de etiquetas basadas en códigos Avery, con lo que podemos crear etiquetas listas para imprimir con un esfuerzo mínimo. Cuando ejecutamos un reporte, Mudbag genera un archivo PDF que podemos guardar e imprimir. El tipo Email es ideal para enviar correos electrónicos a múltiples destinatarios cuyas direcciones están guardadas en una base de datos Mudbag. Digamos que queremos mantener a nuestros amigos y familia al día de los cambios en nuestra base de datos de recetas. Suponiendo que tenemos las direcciones de email y los contactos en la base de datos AddressBook, creamos un nuevo reporte pulsando en el botón
Add Report, elegimos el tipo de reporte Email, seleccionamos la tabla AddressBook y ajustamos la plantilla a nuestro gusto. Cuando estemos satisfechos con el resultado, pulsamos el botón Send para enviar el email (podemos también usar el botón Test Send para asegurarnos de que funciona adecuadamente).
Administración de Usuarios Mudbag incluye también funcionalidades de administración de usuarios, que podemos usar para invitar y compartir nuestras bases de datos con otros usuarios de Mudbag. Si la persona a la que queremos invitar ya está registrada como usuario de Mudbag, y sabemos su nombre de login, podemos simplemente añadirlo a la lista de usuarios. Cada usuario de la lista puede tener el atributo de sólo visualización o bien el de edición (puede modificar los datos y las tablas). Ésta no es una característica especialmente sofisticada, pero no olvidemos que el objetivo de Mudbag es facilitar la creación y compartición de bases de datos a usuarios no expertos. Si la persona con la que queremos compartir la base de datos no es un usuario registrado, podemos mandarle un email de invitación directamente desde Mudbag.
Conclusión Para muchos usuarios avanzados, las instrucciones descritas en este artículo pueden parecer ciertamente fáciles, pero son la prueba de la sencillez de uso de Mudbag. Admitámoslo, Mudbag no soporta algunas características avanzadas como tipos binarios u otros que incluye MySQL. Fue diseñado, sin embargo, con otro propósito: permitir que usuarios normales puedan crear bases de datos sencillas, pero útiles, y que puedan compartirse con otras personas. Aunque Mudbag no está orientado a desarrollos de bases de datos serios, puede convertirse en una aplicación estrella para el resto de los mortales. ■
40
Número 17
WWW.LINUX-MAGAZINE.ES
Limpieza • PRÁCTICO
Borrando Datos con Seguridad
LA LIMPIEZA
El tema de las copias de seguridad es algo común, pero rara vez se oye a alguien hablando del borrado de datos seguro. POR MARCUS NASAREK
T
iene su viejo disco duro lleno de datos hasta los topes y está pensando en comprar un disco duro nuevo. Para reducir el impacto en el presupuesto familiar decide vender el disco duro antiguo en una de las múltiples subastas que se realizan en la red. Con el paso del tiempo, su familia entera habrá dejado rastros personales en el disco y, desde luego, deseará eliminar los documentos personales, las cartas, las notas de despidos, las aplicaciones, los álbunes fotográficos y las credenciales de accesos del disco. Afortunadamente, tiene Linux, y una de sus máximas es que la línea de comandos tiene todo lo que se necesita por si fuera necesario. Probablemente ya conozca cómo borrar un fichero o un directorio. Todas las GUIs adoptan soluciones similares: se pincha en el fichero o el directorio para seleccionarlo y pulsando el botón [Supr] se elimina. O eso es lo que se piensa. Incluso si la aplicación no manda el fichero a la papelera, el contenido aún permanece
almacenado en alguna parte del disco en segmentos de diversos tamaños. Los datos antiguos no desaparecen realmente hasta que se escriben datos nuevos y se empieza a rellenar el disco otra vez. Si se teclea rm en la línea de comandos tampoco ayuda: el comando rm simplemente elimina las entradas en los diarios del sistema de ficheros. Sin estas entradas, el sistema de ficheros no tiene forma de localizar los datos, pero esto no significa que los datos hayan desaparecido realmente.
Sobre el Borrado de Datos El siguiente comando borra el directorio mis_datos/, sus directorios y cualquier fichero que contengan sin pedir confirmación: rm -rv mis_datos/
Hablando estrictamente, lo que realmente se ha hecho es eliminar la etiqueta del nombre para todos estos ficheros y
WWW.LINUX-MAGAZINE.ES
directorios. El comando simplemente ha borrado la entrada en la Tabla de Localización de Ficheros. Cada partición necesita un resumen que le indica dónde están almacenados físicamente en el disco los ficheros y los directorios. Esta solución
Listado 1: Búsqueda de Sectores 01 02 03 04 05 06
07 08 09 10 11
#!/bin/bash # showSector.sh MAX = 1000 for ((i=0;i<=$MAX;i=$i+1)); do val=`dd if=$1 skip=$i bs=512 count=1 2>/dev/null | hexdump -v -e '"%_p"' | fgrep $2` if [ "$val" ]; then echo -e "Sector $i:\ n$val" fi done
Número 17
41
PRÁCTICO • Limpieza
Listado 2: ¿Creíste que lo habías borrado? 01 john@jack:~$ sudo ./showSector.sh /dev/sda1 Sesamo Sector 101: 02 Esto es un secreto. La contraseña para la caverna es "Abrete Sésamo!". 03 Pero no se lo digas a nadie! 04.................................................................... 05.................................................................... 06.................................................................... 07.................................................................... 08.................................................................... 09....................................................................
es compartida por todos los sistemas operativos modernos, aunque existen algunas diferencias en la forma en la que almacenan y leen los datos. Pero lo importante es que, cuando se “borra” un fichero o directorio, el sistema simplemente elimina la etiqueta de la tabla, liberando de este modo el espacio. La eliminación física de los datos del espacio donde la etiqueta está apuntando significaría un esfuerzo computacional mucho mayor. Dicho de otro modo, se tiene una buena oportunidad de recuperar los ficheros que se han borrado por error si se evitan los accesos de escritura a la partición y se empieza a buscar los ficheros perdidos inmediatamente. Se puede encontrar una descripción de los pasos a seguir para recuperar los datos borrados en una partición Ext2 usando herramientas simples en [1]. Y el
COMO en [2] proporciona más detalles. Incluso formateando o particionando de nuevo una unidad no le ayudará a librarse de los datos no deseados. Cuando se formatea un disco, un sistema operativo moderno simplemente reescribirá la Tabla de Localización de Ficheros y un particionamiento tan sólo cambiará las entradas en la tabla de particiones del disco. Los datos simplemente podrían estar perdidos en algún lugar del nirvana digital, pero aún están físicamente en el disco.
Buscando Pistas No se necesitan grandes conocimientos para recuperar los datos borrados de un disco. El cuadro titulado “Particiones” explica cómo el disco duro y el sistema operativo manejan los ficheros y los directorios.
Listado 3: Una Solución más Segura 01 #!/bin/bash 02 # Parameter $1 is the device to be deleted 03 BLOCKSIZE=8192 04 echo -e "Device to delete: $1\nBlock size for write: $BLOCKSIZE" 05 echo "[`date +"%a %T"`] Round 1" 06 dd if=/dev/zero of=$1 bs=$BLOCKSIZE 07 echo "[`date +"%a %T"`] Round 2" 08 dd if=/dev/urandom of=$1 bs=$BLOCKSIZE 09 echo "[`date +"%a %T"`] Round 3" 10 dd if=/dev/zero of=$1 bs=$BLOCKSIZE 11 echo "[`date +"%a %T"`] $1 deleted"
Si sólo se están buscando claves de búsquedas especificas o cadenas, como credenciales de acceso o datos personales, probablemente lo único que se necesita son comandos como dd, hexdump y fgrep. Será preciso disponer de los privilegios de root para poder realizar la mayoría de estas operaciones.
¿Pura Coincidencia? Los ficheros de dispositivos especiales, /dev/random y /dev/urandom, utilizan un controlador del kernel para generar números pseudoaleatorios. El término “pseudo” es indicativo de un bien conocido problema de los ordenadores. Los ordenadores no pueden generar números aleatorios, aunque pueden generar más o menos valores aleatorios. Es decir, /dev/random y /dev/urandom generan números con un suficiente grado de aleatoriedad para la mayoría de las aplicaciones criptográficas de un PC. Cuando se generan secuencias de números aleatorios, el generador de números aleatorios basado en el kernel obtiene diversos valores internos de los dispositivos que utiliza para obtener suficiente entropía. La entropía expresa el grado de aleatoriedad de una secuencia de números generada en un periodo de tiempo específico. Las aplicaciones leen un flujo de bytes desde los ficheros /dev/random y /dev/urandom. Al contrario que /dev/urandom, /dev/random sólo proporciona un byte si se ha alcanzado el suficiente grado de entropía. Si este no es el caso, el dispositivo bloquea la salida hasta que se hayan acumulado sufi-
42
Número 17
cientes datos para asegurar un buen nivel de entropía para los valores. Como puede tardar un rato, el modo de no bloqueo del sistema de E/S permite eliminar el bloque, pero esto no mejora la velocidad de respuesta. Los bytes proporcionados por /dev/random proporcionan números aleatorios perfectamente válidos para poder utilizarse en sistemas criptográficos y son lo suficientemente seguros para ser usados en cifrados largos y como material de alta calidad para generar claves.
/dev/urandom no garantiza el nivel de entropía que se obtiene con el generador del kernel. Al tener una entropía más baja, no se interrumpe el flujo de bytes. Este hecho hace que los números sean más “pseudos” que nunca, pero hay que recordar que no es siempre necesario apuntar tan alto en criptografía. De hecho, /dev/urandom está bien para obtener claves temporales, como las claves de sesión en las sesiones web, para rellenar el espacio en disco con ruido o para la autenticación a corto plazo en escenarios de reto-respuesta.
WWW.LINUX-MAGAZINE.ES
Limpieza • PRÁCTICO
Una unidad de memoria USB es una buena candidata para realizar experimentos. Se puede formatear el “disco” con varios sistemas operativos y llenarlo con datos de pruebas. Supóngase que el dispositivo que se desea investigar es /dev/sda; la primera partición del dispositivo sería /dev/sda1. Puede utilizarse el editor hexadecimal hexdump para inspeccionar los sectores de la partición y ayudarse de él para encontrar los datos existentes. El siguiente comando crea un volcado de la unidad y muestra cualquier carácter imprimible como código ASCII. Se puede ver el contenido de cualquier fichero borrado, además de los caracteres no estándar, inmediatamente. hexdump -v -e '"%07.7_ad: " U 60/1 "%_p" "\n"' U /dev/sda1 | less
Si este modo de vista no es de su agrado, probablemente prefiera ejecutar Midnight Commander en una ventana de consola y experimentar con esta nueva vista. Midnight Commander es un administrador de archivos que puede también mostrar los datos en formato hexadecimal. Desde luego, los ficheros no tienen necesariamente que estar almacenados en
sectores contiguos del disco; de hecho, probablemente estén dispersos por todo el disco; los expertos lo denominan fragmentación. Todo depende de cómo el sistema operativo organice el espacio de almacenamiento para conseguir los mejores tiempos posibles de lectura y escritura. Pero como al menos un fichero siempre ocupa un cluster, se tiene una buena oportunidad de descubrir ficheros pequeños de texto de menos de 4096 bytes. Esta técnica no se utiliza mucho como solución sistemática para buscar un fichero específico. Sí se sabe que una determinada cadena aparece en el fichero que se quiere recuperar (por ejemplo, los ficheros LaTeX siempre empiezan por /document); un simple script puede ayudar a restringir la búsqueda. Tan sólo hay que pasarle la unidad, la cadena y el número de sectores a buscar al script del Listado 1. Si la búsqueda devuelve resultados, tan sólo hay que investigar más detenidamente los sectores en cuestión. La ejecución del script del Listado 1 produce la salida que se muestra en el Listado 2 cuando se busca la cadena Sesame en el dispositivo /dev/sda1. Hace falta el comando dd, con los parámetros skip y count para investigar la localización.
skip permite que el comando se salte un número determinado de bloques. El script proporciona un valor para el parámetro skip. El parámetro count devuelve la longitud de la zona bajo investigación. Ambos valores pueden modificarse ligeramente para investigar la zona sospechosa. Una combinación inteligente de estos dos parámetros permitirá realizar una copia de las zonas de interés. Por ejemplo, si el sector 32 contiene una cadena interesante, se puede utilizar el siguiente comando para investigar los 5 sectores de alrededor de esta localización: dd if=/dev/sda1 skip=30 count=5U bs=512 2>/dev/null | hexdump U -v -e '"%_p"' | less
Este ejemplo muestra la técnica. Los editores de disco probablemente sean la herramienta elegida para analizar o recuperar ficheros mayores desde los datos del disco. Un editor de disco ayuda a navegar a través de las grandes cantidades de datos y realizar un volcado de los bits interesantes. Los servicios de recuperación de datos profesionales utilizan técnicas de análisis de superficie para recuperar los datos de
Particiones El disco duro almacena los datos que maneja en sectores de 512 bytes. Los discos duros modernos usan LBA (Logical Block Addressing, Direccionamiento de Bloques Lógicos) para numerar los sectores en secuencia. Al mismo tiempo, el disco duro controla y monitoriza diversos parámetros y proporciona la interfaz para acceder a los mismos. Los parámetros incluyen varias medidas de temperatura, pero lo más importante es una tabla de sectores defectuosos. El dispositivo etiqueta los sectores como defectuosos e impide que se puedan acceder a ellos. Si se nota un incremento considerable de sectores defectuosos, es probable que en un futuro cercano se produzca un fallo total del disco. Los sectores marcados como defectuosos no están disponibles para el acceso normal. Los expertos pueden utilizar herramientas especiales para poder acceder a dichos sectores, sin embargo, es bastante improbable que contengan datos de alto secreto. Un disco duro debe contener una partición, que agrupa cierta cantidad de sectores. La tabla de partición contiene la forma de las particiones. Esta tabla está localizada en el primer sector, también denominado MBR (Master Boot Record, Registro de Arranque Maestro), empezando en el byte 446 y con una longitud de 64
bytes. El MBR también contiene el cargador del sistema para poder arrancarlo. El sistema operativo maneja los datos de la partición en una especie de base de datos que contiene la estructura de una tabla. Este es el caso de la FAT (File Allocation Table, Tabla de Localización de Ficheros): DOS y Windows utilizan diversas variantes de la FAT conocidas como FAT12, FAT16 y FAT32. Linux soporta un amplio rango de sistemas de ficheros. Son comunes Ext2, Ext3 y ReiserFS. Los dos últimos utilizan un diario, algo similar a una base de datos genuina, para proporcionar una gestión extremadamente efectiva de las entradas en la misma, ofreciendo de este modo bastantes ventajas, especialmente con particiones grandes. Como contrapunto, esto hace mucho más difícil la localización de los datos borrados. El sistema de ficheros agrupa los sectores para formar clusters con la idea de mejorar el rendimiento. Dependiendo de la elección del sistema de ficheros, los clusters pueden ser de diversos tamaños. Si se tiene un tamaño de cluster de cuatro KBytes, los ficheros normalmente ocuparán un tamaño múltiplo de este valor y como mínimo un único cluster. Un fichero que contenga un solo byte ocupará por ello al menos 4096 bytes de espacio en el disco.
WWW.LINUX-MAGAZINE.ES
Número 17
43
PRÁCTICO • Limpieza
zonas del disco que han sido reescritas. Estas técnicas de análisis de superficie se basan en el hecho de que la cabeza escritora no abarca toda la pista antigua, dejando datos residuales a los lados de la misma.
Borrado Seguro A la luz de todo esto, probablemente se prefiera utilizar un método estándar de borrado para borrar los datos y eliminar cualquier posibilidad de recuperación de los mismos. Las siguientes soluciones son probablemente las más conocidas: • Guía BSI para salvaguardar los documentos clasificados en los sistemas de procesamientos de datos (VSITR), Informe Nº 11, [BMI] • El estándar 5220.22-M del departamento de defensa de los EE.UU., [DOD] • El algoritmo de Bruce Schneier, [BSA] • El algoritmo de Peter Gutmann, [PGA] Los algoritmos anteriormente mencionados sobreescriben los sectores múltiples veces con patrones específicos de datos. Los patrones comprenden los bytes 0x00, 0xFF y valores aleatorios. Con la idea de generar datos genuinamente aleatorios y hacer que sea imposible substraer estos datos de la señal leída, la mayoría de las soluciones usan la generación de números aleatorios. Linux proporciona a los usuarios un alto nivel de seguridad basándose en ficheros de dispositivos especiales como /dev/urandom, que crea datos aleatorios simples. /dev/zero proporciona cualquier cantidad de bytes con valor cero (0x00). Con una combinación de ambos se obtienen todas las herramientas que se necesitan. El cuadro titulado “¿Pura Coincidencia?” proporciona información sobre la calidad de los dos generadores de números aleatorios: /dev/random y /dev/urandom. Solamente /dev/urandom es capaz de proporcionar la cantidad de números aleatorios necesaria para algo tan grande como un disco duro. Los dos ficheros, /dev/zero y /dev/urandom, pueden usarse conjuntamente con una de las soluciones mencionadas anteriormente. Para uso doméstico, con la ejecución del script que
44
Número 17
aparece en el Listado 3 debería ser suficiente. Pero hay que tener cuidado de elegir el dispositivo adecuado si lo que quiere es estar seguro de la eliminación definitiva de los datos. El script del Listado 3 primero llena el disco con ceros, luego con valores aleatorios y posteriormente con ceros de nuevo. Con tres rondas, normalmente, es suficiente. Por otro lado, el programa tardará unas horas en borrar un disco de 80Gb.
Sin embargo, sólo se puede confiar en Wipe si se deshabilita la caché de escritura del disco duro. El programa requiere el acceso exclusivo al disco duro en cada ronda, como explica la página oficial del proyecto [6]. Bajo circunstancias normales debería ser suficiente con un kernel que soporte bloqueos, suponiendo que se acuerde de especificar la opción mand cuando se monte. Si el sistema no se ajusta a estos requerimientos o si el sistema mueve los ficheros que se sobrescriben a una localización diferente, programas como Wipe no deben usarse, ya que proporcionan una falsa sensación de seguridad, lo que es peor. Wipe utiliza el patrón de Peter Gutmann para crear cadenas que utiliza para la sobrescritura. Para ello, accede a los ficheros especiales /dev/urandom y /dev/random, que proporcionan el nivel de entropía necesario. Para acelerar el proceso, Wipe también utiliza el generador de números pseudo-aleatorios de Mersenne Twister (PRNG).
Conclusiones Las normas de protección de datos normalmente optan por siete rondas, tal como hace el DOD de EE.UU. con el estándar 5220.22-M. El algoritmo de Peter Gutman, que es el más moderno de nuestros candidatos desde el punto de vista tecnológico, realiza 35 rondas y requiere bastante paciencia por parte de los usuarios. Si se comprueba el disco tras su ejecución lo único que se podrá observar son ceros.
Borrando Ficheros Individuales Algo similar a la solución ofrecida en el Listado 3 puede teóricamente aplicarse al borrado de un único fichero del disco. Pero este programa no es apto para el borrado recursivo de directorios completos y probablemente se prefiera buscar una alternativa o mejorar el programa para que se ajuste a las necesidades. Son más convnientes aplicaciones como Wipe. La mayoría de las distribuciones incluyen la herramienta, que permite el borrado de árboles de directorios completos: wipe -r directorio
WWW.LINUX-MAGAZINE.ES
Es interesante notar que el departamento de defensa de EE.UU. estipula la destrucción física de los dispositivos de almacenamiento magnético que contienen datos de alta confidencialidad. Si se manejan datos sensibles, siempre se debería tener en cuenta que no existe el software perfecto. Como punto a destacar, las herramientas Linux deberían proporcionar a la mayoría de los usuarios más seguridad de la que ■ realmente necesitan.
RECURSOS [1] Recuperando datos borrados en Linux: http://wiki.yak.net/592 [2] Recuperando datos en un sistema de ficheros Ext2: http://www.faqs.org/ docs/Linux-mini/Ext2fs-Undeletion. html [3] Guía para el manejo de datos confidenciales en las oficinas USA: http:// www.dss.mil/isec/nispom_0195.htm [4] Página web de Bruce Schneier: http:// www.schneier.com [5] Página web de Peter Gutmann: http:// www.cs.auckland.ac.nz/~pgut001 [6] Wipe: http:// wipe.sourceforge.net
Perl • DESARROLLO
Exploramos Exploramos el el módulo módulo DateTime DateTime de de Perl Perl
CUENTA ATRÁS
Debido a que las reglas del calendario están influenciadas por decisiones históricas y políticas, la manipulación de fechas está plagada de trampas. El módulo DateTime de Perl se sabe todos los trucos. POR MICHAEL SCHILLI
S
i un script de backup se inicia a las 10 PM y termina a las 4 AM, ¿cuánto tiempo le ha llevado ejecutarse? ¿Seis horas? Bueno… pues depende. Imaginemos que el proceso se ejecutó entre el 26 y 27 de marzo de 2005 en algún lugar de Gran Bretaña. Los relojes se adelantaron una hora a la 1 AM, con lo cual la respuesta correcta es cinco horas. Pero si el mismo proceso se ejecutó al mismo tiempo en Estados Unidos, la respuesta correcta sería seis horas, ya que el horario de verano comienza una semana más tarde en este país. Salvo en el estado de Indiana, que no había introducido aún el horario de verano en 2005. De hecho, 2006 es el primer año en el que lo ponen en marcha (véase [2]). Afortunadamente, el módulo DateTime
... 1974: 1973: 1972: 1971:
DST DST DST No DST
Verano en la City [5] de CPAN conoce todas estas reglas históricas y futuras, y proporciona una interfaz sencilla para lidiar con los cálculos de fechas más complicados. ¿Y si quisiésemos saber desde cuándo se han estado usando las reglas de calendario actuales en Gran Bretaña? El Listado 1 (dsthist) lo muestra echando la vista atrás desde el año 2006 y comprobando el mes de marzo para encontrar un día en el cual acabásemos a las 5 AM al añadir tres horas y un segundo a las 00:59:59. Si ocurre esto, se estaba usando el calendario de verano en ese año, y el script para en el momento en que detecta que no es el caso. El listado muestra que 1972 fue el primer año con las reglas de calendario de verano actuales:
WWW.LINUX- MAGAZINE.ES
Europa parece tener unas reglas de calendario de verano bastante uniformes, aunque no ocurre lo mismo en el continente americano. Esto no sólo se aplica a los diferentes países: incluso en los mismos estados de Estados Unidos se planifican por su cuenta, e incluso existen algunos condados en los que no se rigen por las mismas normas que el estado en el que se encuentran. Para terminar de complicar las cosas, las reglas han cambiado con el paso del tiempo. El Listado 2 (dstchk) usa all-names para averiguar todas las franjas horarias con el módulo DateTime::TimeZone (también disponible desde CPAN). Se sitúa en el primero de enero en la zona horaria que está investigando y le añade seis meses. Si esto devuelve una fecha con un valor horario distinto de cero,
Número 17
45
DESARROLLO • Perl
Listado 1: dsthist 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17
#!/usr/bin/perl -w use strict; use DateTime; YEAR: for my $year ( reverse 1964 .. 2006) { for my $day (1 .. 31) { my $dt = DateTime->new( year => $year, month => 3, day => $day, hour => 0, minute => 59, second => 59,
se entiende que existe algún tipo de ajuste horario en los primeros seis meses del año, y que por lo tanto, esta zona horaria ha debido pasar a calendario de verano durante este periodo. Las zonas se guardan en formato “Continent/City”, por ejemplo Europe/London (para Gran Bretaña), Europe/Dublin (para Irlanda), America/New_York (para el estado de Nueva York en Estados Unidos, America/Vancouver (el estado canadiense de British Columbia), y Pacific/Honolulu (para Hawaii). Pero si una región se ha desviado de las reglas del estado en algún momento del pasado, se hace necesaria una subdivisión adicional. Por ejemplo, America/Kentucky/Louisville designa los estados de Kentucky, cuya principal
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
time_zone => "Europe/London", ); $dt->add( hours => 3, seconds => 1 ); if ($dt->hour() == 5) { print "$year: DST\n"; next YEAR; } } print "$year: No DST\n"; last; }
ciudad es Louisville. (Aunque Frankfort es la capital de Kentucky, no es la ciudad más grande del estado). Para reflejar el hecho de que el condado de Monticello en Kentucky pertenecía (hasta el año 2000) a una franja horaria diferente a la que pertence en estos momentos, DateTime::TimeZone tiene un registro para America/Kentucky/Monticello. La Figura 1 muestra el resultado de ejecutar dstchk, mostrando las franjas horarias con aprovechamiento de luz solar en verde usando Term::ANSIColor. DateTime puede manipular información de cualquier franja horaria que queramos, incluido fechas del pasado y las franjas horarias que han sufrido cambios. La isla de Lord Howe, próxima a la costa australiana, tiene
Listado 2: dstchk 01 02 03 04 05 06 07
08 09 10 11 12 13
46
#!/usr/bin/perl -w use strict; use DateTime; use Term::ANSIColor qw(:constants); for my $zone (DateTime::TimeZone::all_names ()) { my $from = DateTime->now( time_zone => $zone); $from->truncate(
Número 17
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
to => "year"); my $to = $from->clone() ->add(months => 6); print "$zone: "; if ($to->hour() == 0) { print RED, "no", RESET, "\n"; } else { print GREEN, "yes", RESET, "\n"; } }
WWW.LINUX- MAGAZINE.ES
Figura 1: ¿Alguna vez has querido saber qué zonas del continente americano usan horarios de aprovechamiento de luz en verano?
unas reglas de horario de verano un tanto peculiares: atrasan o adelantan el reloj justo media hora. El Listado 3 (lord_howe) muestra que si añadimos un segundo a 2005-10-30 01:59:59 devuelve una hora local de 2:30:00. A un objeto DateTime creado por el constructor new se le asigna una zona horaria floating en primera instancia, si el parámetro time_zone no especifica la zona horaria de manera explícita. En este punto, la zona horaria se adapta
Perl • DESARROLLO
Listado 3: lord_howe 01 02 03 04 05 06 07 08 09 10 11 12
#!/usr/bin/perl -w use strict; use DateTime; my $dt = DateTime->new( year => 2005, month => 10, day => 30, hour => 1, minute => 59, second => 59, time_zone =>
temporalmente para coincidir con otros objetos DateTime cuando se llevan a cabo cálculos o comparaciones con estos. Si queremos ignorar los cambios en horarios debidos a horarios de verano en nuestros cálculos, podemos bien usar la zona “floating”, o bien podemos elegir la zona horaria libre de horarios de verano UTC (Universal Time Coordinated). Al configurar time_zone => "local" en un objeto DateTime, para fijar la hora a la zona donde esté ubicado nuestro ordenador, forzamos a DateTime a que pruebe todos los trucos posibles para averiguar la configuración de nuestra zona horaria: my $dt = DateTime->now( time_zone => "local"); print $dt->time_zone()->name();
13 14 15 16 17 18 19 20 21 22 23 24
'Australia/Lord_Howe', ); $dt->add( DateTime::Duration->new( seconds => 1 ) ); # 2005-10-30 02:30:00 print $dt->date(), " ", $dt->hms(), "\n";
Esto devuelve America/Los_Angeles en una máquina ubicada en nuestro laboratorio de Perlmeister en San Francisco. No está nada mal.
Arrastre Rotacional ¿Cuántos segundos pasaron entre las 00:59:00 y las 01:00:00 del 1 de enero de 1999? ¿Un minuto, es decir, 60 segundos? ¡Mal! Pista: justo en este instante, la zona horaria estándar, UTC, que es idéntica a la zona horaria Greenwich, añade un segundo extra, lo que da como resultado ¡un minuto de 61 segundos! Como podemos leer en [3], ya no se define un segundo como una fracción de un día. Desde 1967 se define en función de la mucho más constante resonancia del átomo de Cesio 133. La velocidad de rotación de la Tierra ha ido decreciendo lentamente en los
Listado 4: leapsec 01 #!/usr/bin/perl -w 02 ############################## 03 # leapsec - Imprime años con segundos bisiestos 04 # Mike Schilli, 2005 (m@perlmeister.com) 05 ############################## 06 use strict; 07 use DateTime; 08 09 my $secs; 10 11 for my $year (1960..2005) { 12 for my $date ([30,6],[31,12]) { 13 my $now = DateTime->new( 14 year => $year, 15 month => $date->[1], 16 day => $date->[0],
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
hour => 23, minute => 59, second => 0, time_zone => "UTC"); my $later =$now->clone()->add( seconds => 60); $later->set_time_zone ("Europe/London"); if($later->second() == 60) { print $later->dmy(), "", $later->hms(), ":", ++$secs, "\n"; } } }
WWW.LINUX- MAGAZINE.ES
Figura 2: Segundos adicionales desde 1960 hasta hoy.
últimos 40 años. Como la Tierra tarda ahora un poco más que 24 veces 3600 segundos atómicos en completar una rotación, se ha estado añadiendo un segundo adicional a la hora oficial desde 1972, cada 1,5 años de media. El 30 de junio y el 31 de diciembre son las fechas de referencia. Si la hora oficial tiene un desfase de un segundo aproximadamente, se añade ese segundo al final de esas fechas. Dicho esto, la Tierra parece que ha recuperado algo de velocidad: 2005 ha sido el primer año desde 1998 que necesitó un segundo extra. Si la Tierra empezase a rotar a mayor velocidad, a la hora oficial simplemente se le restaría un segundo adicional. Sin embargo, esto no ha pasado en la reciente historia de los “segundos adicionales”. El Listado 4 (leapsec) comienza en el año 1960 y continúa gradualmente hasta el año 2005, buscando segundos adicionales a 30 de junio o 31 diciembre. Para ello, fija la hora en la zona horaria UTC a 23:59:00, le añade 60 segundos y verifica si ha devuelto un valor inusual en el segmento de los segundos. En este caso, el minuto en cuestión tuvo 61 segundos y hemos descubierto un segundo “extra”. Tras completar la búsqueda, la zona horaria se fija a “Europe/London” llamando a la función set_time_zone(). Con print mostramos la hora local y el número de
Número 17
47
DESARROLLO • Perl
Listado 5: leapreveal 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
#!/usr/bin/perl -w use strict; use Sysadm::Install qw(:all); use DateTime; my $dt = DateTime->new( year => 1990, time_zone => 'UTC' ); $dt->add( seconds => 3600 * 24 * 5000); print "$dt\n";
segundos adicionales encontrados hasta el momento. La Figura 2 muestra el resultado. Las diferentes horas a día 1 de julio son debidas a los cambios realizados a lo largo del tiempo para aprovechar la luz solar.
Abstracción llena de baches Desafortunadamente, el sistema de cómputo de tiempo en los sistemas Unix, que cuenta el número de segundos desde 1970, no tiene en cuenta los segundos adicionales comentados. Mientras que el reloj pasaba de las 23:59:59 a las 23:59:60 el 31 de diciembre de 1998, en Gran Bretaña, el contador en las máquinas Unix que siguen el estándar POSIX pasaba de 915148799 a 915148800. El siguiente salto virtual desde las 00:59:60 a las 01:00:00, sin embargo, no se reflejó en el contador de tiempo de Unix, ambos instantes en el tiempo se representan correctamente por un valor de tiempo en Unix correspondiente a 915148800. Si restamos ambos tiempos Unix, y calculamos el tiempo UTC que ha pasado entre ellos, tendremos que
corregir los resultados si hubo un segundo adicional entre las dos fechas. Para más información de este confuso método, véanse [6] y [7]. DateTime proporciona el método from_epoch(epoch =>$time), que construye un objeto DateTime a partir de un contador Unix. El método epoch() del objeto DateTime hace lo contrario, devuelve un valor de contador. El Listado 5 (leapreveal) muestra lo que pasa si simplemente añadimos el número de segundos de 5.000 días a la fecha del 1.1.1990: el resultado de este cálculo es 2003-09-09T23:59:53. En otras palabras, la respuesta revela que hay siete segundos perdidos al final de ese día, ¡debido a los segundos adicionales entre esas dos fechas! Por otro lado, si usamos add(days => 5000) para añadir 5.000 días, obtenemos como resultado 2003-09-10T00:00:00. DateTime separa de manera estricta el manejo de unidades de tiempo como días y segundos y no convierte normalmente un valor de tiempo como “5.000 días” a segundos. Pero si queremos convertir días a segundos, aunque tengamos que pasar por la siguiente abstracción llena de baches, podemos usar el método $to->subtract_datetime_absolute($fro m) para restar el objeto DateTime $from al objeto $to para obtener un objeto DateTime::Duration. Y este método seconds() da por fin el número exacto de segundos transcurridos durante ese periodo.
Superman
La línea de cambio de fecha es otra curiosidad. Si volamos hacia el Este, a medida que atravesamos las zonas horarias, se va haciendo cada vez más tarde. En un momento dado, la fecha cambia al día anterior. Si no fuese así, seríamos capaces de viajar al futuro en un avión suficientemente rápido. La línea de cambio de fecha ([4]) cruza el Pacífico de Norte a Sur, un poco más al Este de las islas que se agrupan en las cosas del Sudeste de Asia. Figura 3: Distintos idiomas y configuraciones aplicables a la conEl Listado 6 versión y formateo de cadenas de fechas. (daytrip) muestra lo
48
Número 17
WWW.LINUX- MAGAZINE.ES
que pasa si tomamos un veloz avión desde Japón (al Oeste de la línea de cambio de fecha) hasta Hawaii (al Este de la línea de cambio de fecha). Estos son los detalles del vuelo: Departure: Sunday, U January 29 2006, 07:30 Arrival: Saturday, U January 28 2006, 19:00
En otras palabras, salimos un domingo por la mañana y llegamos un día antes, aunque el vuelo ha durado seis horas y media. El sábado por la noche se juega la lotería, la pena es que sólo funcione para la hora local…
Hablando Idiomas El Listado 6 (daytrip) muestra también cómo maneja DateTime los diferentes
Listado 6: daytrip 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18
#!/usr/bin/perl -w use strict; use DateTime; use DateTime::Format::Strptime; my $format = DateTime::Format::Strptime ->new( pattern => "%A, %B %d %Y, %H:%M", locale => "en_UK", time_zone => 'Asia/Tokyo', );
my $dt = $format->parse_datetime( "Sunday, January 29 2006, 07:30" 19 ); 20 21 $dt->set_formatter($format); 22 23 print "Departure: $dt\n"; 24 25 $dt->add( 26 DateTime::Duration->new( 27 hours => 6, 28 minutes => 30 29 ) 30 ); 31 32 $dt->set_time_zone( 33 'Pacific/Honolulu'); 34 print "Arrival: $dt\n";
Perl • DESARROLLO
Listado 7: locales 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
#!/usr/bin/perl -w use strict; use DateTime; use DateTime::Format::Strptime; my $dt = DateTime->now(); for my $locale ( qw(en_AU en_US de_DE fr_FR es_ES es_MX) ) { $dt->set_locale($locale); my $format = DateTime::Format::Strptime ->new( pattern => $dt->locale() ->long_datetime_format() ); $dt->set_formatter($format); print "$locale: $dt\n"; }
formatos de fecha. Usa herramientas de formateado de la jerarquía de clases DateTime::Format::* tanto para analizar una cadena de fecha con parse_datetime(), como para devolver los resultados. DateTime::Format::Strptime es una herramienta de formateo
particularmente flexible que tiene parámetros de sustitución para el formato de cadena, siguiendo un método similar al de la función strptime() en C. %A representa el día de la semana, %B el nombre del mes escrito, %d la fecha, %H la hora, etc. El parámetro locale se fija a “en_GB” para Gran Bretaña. en selecciona el idioma inglés. La segunda parte de locale especifica el país y sus reglas especiales. En el Listado 7 (locales) hay más ejemplos: en_AU y en_US son locales para el inglés australiano y americano, respectivamente. fr_FR para francés, es_ES y es_MX para el castellano de España y México. Tras inicializar el formateador con el valor adecuado de locale, se pasa al objeto DateTime haciendo uso de set_formatter. Los objetos DateTime se convierten a cadenas. La Figura 3 muestra algunos ejemplos. a) Años Bisiestos b) Volviendo atrás al año 2000, es casi seguro que la mayoría de los programas son conscientes de la regla de que un año bisiesto ocurre cada cuatro años, pero no si ese año es divisible entre 100, siendo excepción a esto si ese año es también divisible entre 400. Por supuesto, DateTime entiende estas reglas. Para ponerlas a prueba, veamos un problema algo más complejo: ¿cuántos viernes 29 de febrero hay entre 1980 y 2000?
Listado 8: frifeb29 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18
#!/usr/bin/perl -w use strict; use DateTime; use DateTime::Event::Recurrence; my $feb29 = DateTime::Event::Recurrence ->yearly( days => 29, months => 2 ); my $fri = DateTime::Event::Recurrence ->weekly(days => 5); my $set = $fri->intersection($feb29);
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
my $it = $set->iterator( start => DateTime->new( year => 1980 ), end => DateTime->new( year => 2020 ), ); while (my $dt = $it->next()) { $dt->set_locale("en_GB"); print $dt->day_name(), ", ", $dt->month_name(), " ", $dt->day(), " ", $dt->year(), "\n"; }
WWW.LINUX- MAGAZINE.ES
Dos conjuntos de objetos DateTime nos ofrecen un elegante método para resolver este problema tenemos que guardar todos los viernes en uno de ellos, y todos los 29 de febrero en el otro. Un objeto de la clase DateTime::Set puede en teoría contener un número infinito de objetos DateTime. La manera más sencilla de crear un conjunto para este propósito es usar el módulo DateTime::Event::Recurrence de CPAN. El constructor Date-Time::Event::Recurrence-> yearly(days=> 29, months => 2); nos da un objeto de tipo DateTime::Set con todos los 29 de febrero como una descripción abstracta. Al mismo tiempo, el Listado 8 (frifeb29) usa weekly(days => 5) para definir un segundo conjunto que contiene todos los viernes (es decir, los que ocupan la posición 5 de la semana). Podemos ahora usar el método intersection() para obtener, por fin, todos los viernes 29 de febrero. Para indicarle al iterador (definido en la línea 20) el conjunto por el que tiene que empezar, el parámetro start define la fecha de comienzo, usándose un objeto DateTime configurado al año 2020 se usa para indicar la fecha de fin. El bucle while de la línea 29 usa next() para ir rebajando el iterador y acercarlo al fin del periodo de tiempo bajo revisión. El resultado de la investigación: sólo hubo un viernes, el 29 de febrero de 1980, y habrá otro en ■ 2008.
RECURSOS [1] Listados de este artículo: http://www. linux-magazine.es/Magazine/ Downloads/17 [2] “What time is it in Indiana?” http:// www.mccsc.edu/time.html [3] Segundos adicionales: http://es. wikipedia.org/wiki/ Segundo_intercalado [4] Línea de cambio de fecha: http://en. wikipedia.org/wiki/ International_Date_Line [5] Página del proyecto Datetime: http:// datetime.perl.org [6] Hora en Unix: http://en.wikipedia.org/ wiki/Unix_time [7] Hora UTC, TAI y UNIX: http://cr.yp.to/ proto/utctai.html
Número 17
49
DESARROLLO • Python
PyUNO: Explota todo el potencial de OpenOffice
PYTHON NO HAY MÁS QUE UNO ¿Has visto alguna vez a los brokers de bolsa? ¿Recuerdas sus sofisticados y caros programas para ver las cotizaciones de las empresas en bolsa en tiempo real? Nosotros haremos lo mismo con 70 lineas de código Python, OpenOffice y la tecnología UNO de OpenOffice. POR JOSÉ MARÍA RUIZ
N
o es ni será la última vez que desde esta sección recordemos que la idea original de Stallman era la de que cada programa libre estuviese construido sobre librerías de funciones, de manera que su código fuese reutilizable por cualquier otro programa. Quizás en un programa pequeño no sea muy útil este tipo de diseño, pero ¿qué pasa con esos monstruos consumidores de memoria que rondan por nuestros discos duros? Nos referimos a programas o entornos del calibre de Gnome, KDE, Mozilla u OpenOffice. Todo el mundo se queja de su tamaño excesivo, su alto consumo de recursos y su inexplicable complejidad. Quizás con este artículo desmintamos este mito y hagamos que el lector mire con nuevos ojos a estos maravillosos programas.
Grandes sistemas de componentes El diseño de un gran programa puede llevar años y cientos o miles de programadores. Organizar tal cantidad de personas supone ya una locura sólo por el hecho de asegurarse que todos cobren. Pero vayamos a nuestro mundillo ¿cómo podemos organizarles para que el desarrollo no acabe en un fiasco?
50
Número 17
Esta es la gran cuestión no resuelta de la informática pero, aunque no hayamos encontrado una solución fiable, sí se disponen de técnicas que aumentan la probabilidad de que, al menos, se cree algún software útil. Una de estas técnicas consiste en emplear un sistema de componentes como base para el desarrollo. Un componente es una cantidad de software que ofrece un servicio bien definido y que es reutilizable. Además debe ser posible reutilizarlo «de verdad»: desde cualquier lenguaje y cualquier sitio. Cualquiera que tenga conocimiento sobre cómo funcionan los lenguajes de programación a bajo nivel sabrá que esto es muy muy complicado. Por ello se han desarrollado infraestructuras que nos permiten interactuar con los componentes de manera indirecta. A este software se le suele llamar “middleware” (algo así como “software de en medio”). Ejemplos famosos de Middleware son J2EE, que muchos conocerán, y CORBA, que a muchos les gustaría no conocer. Ambos son sistemas enormes y costosos que relegan al programador a mera herramienta en manos de ingenieros denominados arquitectos que conocen su compleja infraestructura. Pero los sistemas de componentes también se emplean en software libre y han dado buenos resultados. Quizás el más desconocido es UNO, de Universal
WWW.LINUX- MAGAZINE.ES
Network Objects, el sistema que emplea OpenOffice, ver Listado [1], y que SUN desarrolló para su precursor: StarOffice.
PyUNO Un sistema de componentes con el que sólo se pueda programar en un lenguaje no tiene mucha utilidad. Por eso en OpenOffice se han asegurado de fomentar la creación de interfaces a distintos lenguajes de programación. Podemos acceder a UNO usando Javascript, Java, Ruby, Perl o Python (ver Recurso [2]). PyUNO es el nombre de la interfaz y podremos encontrarlo sin problemas en nuestra distribución de Linux. Evidentemente, necesitamos también tener instalado OpenOffice. En este artículo hemos realizado los programas usando OpenOffice 2.0, que cambió la interfaz respecto a la versión 1.0, y la versión de PyUNO 0.7.0.
Un ejemplo rápido Vamos a crear el famoso «Hola mundo» con PyUNO. Para ello primero debemos arrancar OpenOffice con el siguiente comando desde el directorio donde esté instalado: $> ./sofficeU "-accept=socket,U host=localhost,U port=2002;urp;"
Python • DESARROLLO
Listado 1: programa «Hola Mundo» 01 import uno 02 03 localContext = uno.getComponentContext() 04 05 resolver = localContext.ServiceManager.cr eateInstanceWithContext("com.s un.star.bridge.UnoUrlResolver" , 06 localContext ) 07 ctx = resolver.resolve( "uno:socket,host=localhost,por t=2002;urp;StarOffice.Componen tContext" ) 08 09 desktop =
Al arrancar OpenOffice se arranca su sistema de componentes. Podemos pensar en este proceso como en el arranque de un servidor, sólo cuando esté funcionando podrán los clientes trabajar con él. Las opciones que pasamos son para que se cree un socket y se escuche en localhost en el puerto 2002. Por defecto OpenOffice no abre el socket, de manera que no podrán controlar nuestro OpenOffice sin nuestro consentimiento. OpenOffice incorpora de serie varios intérpretes de lenguajes, entre ellos uno de Python que ya viene preconfigurado para poder hacer uso de la librería UNO. Está junto al resto de ejecutables de OpenOffice, así que lo ejecutaremos desde allí. El programa que usaremos se encuentra en el Listado [2]. El proceso es el siguiente: • Obtenemos un contexto local (un sitio donde guardar los datos de la conexión) • Arrancamos el componente UnoUrlResolver que nos sirve para acceder a otro OpenOffice en otro equipo (en nuestro caso accederemos a nuestro propio equipo) • Emplearemos el objeto resolver para acceder al OpenOffice remoto • Arrancamos un «Desktop» (escritorio) de OpenOffice (esto es una instancia de OpenOffice vacía) • Arrancamos un SWriter (es decir, el procesador de textos) en el escritorio • Obtenemos un cursor, con el que podremos posicionarnos dentro del texto • e insertamos texto en el cursor
ctx.ServiceManager.createInsta nceWithContext( "com.sun.star.frame.Desktop",c tx) 10 11 doc = desktop.loadComponentFromURL(" private:factory/swriter","_bla nk",0,()) 12 13 cursor = doc.Text.createTextCursor() 14 15 doc.Text.insertString( cursor, "Hola Mundo", 0 ) 16 17 ctx.ServiceManager
El resultado, no muy espectacular, podemos verlo en la Figura [1]. Ya tenemos nuestro «hola mundo» insertado en SWriter. ¿Demasiado código? Piensa por un momento lo que estamos haciendo. Hemos levantado dos componentes y hecho acceso remoto a otro OpenOffice. Este segundo OpenOffice puede estar en una máquina al otro lado del mundo. Es algo bastante impresionante, pero por el momento poco útil. Veamos un poco más sobre UNO antes de realizar un programa más útil.
Arquitectura de UNO OpenOffice está implementado en C++. UNO se usa internamente para realizar cualquier cosa. Básicamente OpenOffice no es más que una gran cantidad de componentes que interactúan entre sí. Todo dentro de OpenOffice es un componente, así que podemos acceder a cualquier parte de la aplicación, ¡incluso reconstruir OpenOffice en Python! Los sistemas de componentes usan un registro de componentes al que se le puede pedir que arranque componentes. El registro localiza el componente en disco y lo carga en memoria, de manera que puede ser usado. Las llamadas a las funciones no se realizan directamente, sino que se suele emplear algún sistema no dependiente de lenguaje o plataforma, como puede ser XML o un formato ASCII. El registro también debe ser capaz de gestionar los recursos que consume el componente, descargándolo de memoria cuando ya no sea necesario.
WWW.LINUX- MAGAZINE.ES
Los componentes pueden ser programados en cualquier lenguaje con el que se tenga interfaz. Un componente es un conjunto de ficheros que proporcionan un servicio. Se acompañan de un fichero XML que describe su funcionalidad. Lo mejor es que podemos vincular ese servicio a algún componente gráfico, como por ejemplo un botón o menú. Comenzaremos por realizar un programa que funcionará de manera externa a OpenOffice y después crearemos un componente con él y lo integraremos en OpenOffice.
Nuestro programa de Stocks Comencemos con la parte útil, ver Listado [2]. Vamos a crear un sistema que nos permita controlar las acciones de una serie de empresas que están en bolsa dentro de un índice tecnológico, el Nasdaq (para algo estamos en una revista de informática), usando la hoja de cálculo SCalc y un programa Python. Nuestro programa accederá usando Internet a un sitio web donde podrá recoger los datos en CSV (Valores Separados por Comas), los procesará y los introducirá en SCalc. Comenzaremos por crear una función que recoja el fichero CSV y lo procese. Lo que hacemos es conectarnos con la página web finance.yahoo.com. Yahoo tiene un sitio web bastante avanzado sobre cotizaciones de bolsa, y uno de sus servicios nos permite recoger los datos de cotización de una empresa en tiempo real en formato CSV. Sin embargo, Yahoo no nos permitirá acceder a los datos demasiado a menudo, ya que dispone de un servicio de pago para ello, así que puede cortarnos el «grifo» en cualquier momento si hacemos demasiadas consultas por minuto. Por eso recogeremos los datos cada 10 segundos. La función getSimbolo() se encargará de ello. Ahora ya tenemos los datos, tenemos que mandarlos a SCalc. Hemos creado un objeto llamado Calc para gestionar el acceso. Hemos metido en el método constructor (__init__) el código que conecta con el OpenOffice, puesto que sólo lo haremos una vez. Una hoja de cálculo posee varias «hojas», así que tendremos que solici-
Número 17
51
DESARROLLO • Python
Listado 2: «OfficeBroker» 01 02 03 04 05 06 07 08 09 10 11 12
import import import import import
uno random time httplib csv
def conecta (self): self.local = uno.getComponentContext() 13 self.resolver = self.local.ServiceManager.crea teInstanceWithContext("com.sun .star.bridge.UnoUrlResolver", self.local) 14 15 self.context = self.resolver.resolve("uno:soc ket,host=localhost,port=2002;u rp;StarOffice.ComponentContext ") 16 17 self.desktop = self.context.ServiceManager.cr eateInstanceWithContext("com.s un.star.frame.Desktop", 18 self.context) 19
#self.doc = self.desktop.getCurrentCompone nt() 21 self.doc = self.desktop.loadComponentFrom URL("private:factory/scalc","_ blank",0,()) 22 23 self.hojas = self.doc.getSheets() 24 self.s1 = self.hojas.getByIndex(0) 25 26 def actualiza(self, cotizacion, fila): 27 28 i = 0 29 for entrada in cotizacion: 30 if (i == 0) or (i == 2) or (i ==3): 31 self.s1.getCellByPosition(i,fi la).setString(entrada) 32 else: 33 self.s1.getCellByPosition(i,fi la).setValue(float(entrada)) 34 35 i = i + 1 36 37 def getSimbolo(simbolo):
tar una usando el método getSheets(), que nos devuelve una lista con las distintas hojas. Dentro de esta lista usaremos getByIndex() para seleccionar la
primera hoja, que es la que se ve cuando arrancamos SCalc. El método actualiza() admite una lista con los datos de cotización y
class Calc: def __init__(self): self.conecta()
20
Figura 1: Un documento de Write de OpenOffice con el ineludible “Hello World” generado a partir de PyUNO.
52
Número 17
WWW.LINUX- MAGAZINE.ES
38
c = httplib.HTTPConnection("financ e.yahoo.com")
39 c.request("GET","/d/quotes.csv ?s="+simbolo+"&f=sl1d1t1c1ohgv &e=.csv") r = c.getresponse() cad = r.read() reader = csv.reader([cad]) resultado = [] for row in reader: resultado = row return resultado
40 41 42 43 44 45 46 47 48 if __name__ == '__main__': 49 50 simbolos = ["GOOG","MSFT","RHAT"] 51 52 c = Calc() 53 54 while(1): 55 i = 0; 56 for s in simbolos: 57 c.actualiza(getSimbolo(s),i) 58 i = i + 1 59 60 time.sleep(10)
número que representa la fila donde aparecerá en SCalc. Una hoja de cálculo se compone de celdas y éstas tienen un tipo. La función getCellByPosition() nos permite acceder a una celda pasándole la columna y la fila (al revés de lo normal, así que cuidado). Una vez localizada la celda tenemos varias funciones para poder asignar un valor: • setString(): para poner una cadena • setValue(): para poner un número • setFormula(): para poner una fórmula El dato cotización es la lista de parámetro de cotización, pero vienen dados como cadenas de caracteres. Las posiciones 0, 2 y 3 son realmente cadenas, pero el resto son números. Por eso tenemos que convertir ciertos valores al tipo float() mediante la función float(). El resultado se puede ver en la Figura [2], veremos cómo se abre una ventana
Python • DESARROLLO
Listado 3: Addons.xcu 01 <?xml version="1.0" encoding="UTF-8"?> 02 <oor:node xmlns:oor="http://openoffice.o rg/2001/registry" 03 xmlns:xs="http://www.w3.org/20 01/XMLSchema" 04 oor:name="Addons" oor:package="org.openoffice.Of fice"> 05 <node oor:name="AddonUI"> 06 07 <node oor:name="AddonMenu"> 08 <node oor:name="org.openoffice.comp. pyuno.linuxmagazine.Stock" oor:op="replace">
de SCalc y se rellena con los valores de las contizaciones, además de cómo se actualizan cada 10 segundos. Si creamos un gráfico que use esos valores se actualizará con ellos. Pero este es un programa externo… estaría bien que pudiésemos hacer eso pulsando un botón
Creamos un componente UNO Los componentes UNO no son más que código debidamente empaquetado. Los paquetes que OpenOffice admite tienen una estructura fija. Son ficheros ZIP que contienen los ficheros con el código fuente, recursos (como imá-
09
<prop oor:name="URL" oor:type="xs:string">
10
11 12
13 14
15
16
<value>service:org.openoffice. comp.pyuno.linuxmagazine.Stock ?insert</value> </prop> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="en-US">Stock Market</value> <value xml:lang="es">Cotización en Bolsa</value> </prop>
genes) y un fichero de configuración XML. Los ficheros deben tener nombres especiales. El fichero de configuración debe llamarse Addons.xcu y permite asignar el código fuente del paquete con el widget que deseemos, un botón, una entrada de un menú… Ver Listado [3]. La sintaxis del fichero parece bastante complicada, cuando en realidad no es muy difícil de entender. Básicamente decimos que queremos que nuestro componente se asocie con una entrada en el menú «Addons» que está en Tools o Herramientas en castellano. Nuestro componente tiene una ruta que especificaremos después y que es:
17
<prop oor:name="Target" oor:type="xs:string">
18 19 20
<value>_self</value> </prop> <prop oor:name="ImageIdentifier" oor:type="xs:string">
21 <value>private:image/3216</val ue> 22 </prop> 23 24 </node> 25 </node> 26 </node> 27 </oor:node>
org.openoffice.comp.pyuno.U linuxmagazine.Stock
Esta ruta la hemos creado nosotros y tenemos que tener cuidado de que sea única, por eso hemos incorporado linuxmagazine en ella ;). Definimos un título, que puede estar en varios idiomas, y una imagen, que hemos escogido de entre las que proporciona OpenOffice. El fichero con el código fuente Python en sí se puede ver en el Listado 4. Tenemos un objeto llamado StockJob que será el que se invocará en caso de pulsar la entrada en el menú. Ese objeto se vincula a la ruta que vimos antes. Cada vez que se pulse sobre la entrada del menú se ejecutará el método trigger, que descargará de Internet las cotizaciones y las mostrará en la hoja de cálculo. Es posible hacer que sólo se muestre el menú cuando arrancamos la hoja de cálculo SCalc, pero por motivos de espacio no hemos puesto la restricción. Aún así si no estamos en una hoja de cálculo no sucederá nada, simplemente no funcionará.
Manejo de paquetes en OpenOffice Ahora tenemos que generar nuestro paquete UNO. Para ello necesitaremos el programa ZIP, gzip no nos vale, y crear un fichero:
Figura 2: Nuestro programa examina los valores de la bolsa NASDAQ disponibles en Yahoo a intervalos regulares y los inserta en una hoja de cálculo de OpenOffice.
WWW.LINUX- MAGAZINE.ES
$> zip stock.zipU stock_comp.py Addons.xcu updating: ...../Addons.xcuU
Número 17
53
DESARROLLO • Python
Listado 4: stock_comp.py 01 02 03 04 05 06 07 08 09
import uno import unohelper import import import import
random time httplib csv
from com.sun.star.task import XJobExecutor
10 11 def getSimbolo(simbolo): 12 c = httplib.HTTPConnection("financ e.yahoo.com") 13 c.request("GET","/d/quotes.csv ?s="+simbolo+"&f=sl1d1t1c1ohgv &e=.csv") 14 r = c.getresponse() 15 cad = r.read() 16 reader = csv.reader([cad]) 17 resultado = [] 18 for row in reader: 19 resultado = row 20 return resultado 21 22 class StockJob( unohelper.Base, XJobExecutor ):
(deflated 59%) updating: ...../stock_comp.pyU (deflated 57%) >
Este fichero debe ser integrado en OpenOffice, iremos al directorio donde esté instalado y ejecutaremos como root: $> sudo ./unopkg addU stock.zip >
23 24 25 26 27 28
def __init__( self, ctx ):
43 44
simbolos = ["GOOG","MSFT","RHAT"] 38 i = 0; 39 40 for s in simbolos: 41 self.actualiza(getSimbolo(s),i ) 42 i = i + 1
def actualiza(self, cotizacion, fila): 45 i = 0 46 for entrada in cotizacion: 47 if (i == 0) or (i == 2) or (i ==3): 48 self.s1.getCellByPosition(i,fi la).setString(entrada) 49 else: 50 self.s1.getCellByPosition(i,fi la).setValue(float(entrada)) 51 52 i = i + 1 53 54 g_ImplementationHelper = unohelper.ImplementationHelper () 55 56 g_ImplementationHelper.addImpl ementation( StockJob, 57 "org.openoffice.comp.pyuno.lin uxmagazine.Stock", 58 ("com.sun.star.task.Job",),)
Con esto concluye la instalación del paquete…¡no ha sido tan difícil! Cuando arranquemos de nuevo OpenOffice podremos seleccionar la hoja de cálculo SCalc y en el menú Tools/Herramientas veremos cómo ha aparecido al final un nuevo submenú: «Complementos (add-ons)». Dentro del mismo aparecerá una nueva entrada llamada «Cotización de Bolsa». Si lo pulsamos aparecen los datos de 3 compañías (Google, Microsoft y Redhat) del Nasdaq en nuestra hoja de cálculo.
desde Python; no es difícil imaginarse programas que podrían facilitarnos mucho la vida y no son tan difíciles de crear gracias a PyUNO. No hemos explorado la posibilidad de actuar sobre un OpenOffice remoto por falta de espacio, pero es una nueva posibilidad que abre un camino para aplicaciones muy interesantes, como puede ser la edición distribuida de documentos o un uso más creativo de la hoja de cálculo. Todo un mundo de posibilidades se abre ante nosotros gracias a Python. ■
self.ctx = ctx def trigger( self, args ): desktop = self.ctx.ServiceManager.create InstanceWithContext(
29 "com.sun.star.frame.Desktop", self.ctx ) 30 31 32 33 34 35
model = desktop.getCurrentComponent() self.hojas = model.getSheets() self.s1 = self.hojas.getByIndex(0)
36 37
Conclusión Python nos permite un uso nuevo de algo tan trillado como puede ser un paquete ofimático. OpenOffice entero es accesible
54
Número 17
WWW.LINUX- MAGAZINE.ES
RECURSOS [1] El sitio de OpenOffice: http://www. openoffice.org [2] El “puente” entre Python y OpenOffice: http://udk.openoffice.org/python/ python-bridge.html [3] Los listados de este arículo: http:// www.linux-magazine.es/Magazine/ Downloads/17
La Columna de Charly • ADMINISTRACIÓN
El Día a Día del Administrador de Sistemas: Webalizer Xtended
ACCESOS ERRÓNEOS Webalizer es una herramienta para analizar los ficheros de registros de los servidores web. Un nuevo parche le proporciona a los administradores la posibilidad de ver lo que no hay. POR CHARLY KÜHNAST
D
e vez en cuando reviso los ficheros de registro de mi servidor web, aunque no es algo que me guste hacer muy a menudo. Después de todo, veo muchas cosas molestas en el trabajo. Cuando analizo mis propios registros, normalmente aparece información de depuración, pero también aparecen entradas del tipo “accesos erróneos”. A veces se ven registros extraños como: tharis.xxxxx.at - - U [03/Dec/2005:08:24:43 +0100] "GET /LOST HTTP/1.1" U 404 1025 "-" "Mozilla/4.0"
Aunque este mensaje parece muy ofensivo, en realidad es bastante inofensivo. En otras ocasiones, encuentro gente intentando navegar por URLs pertenecientes a aplicaciones que han sido nombradas en los avisos recientes de seguridad. En las últimas semanas, por ejemplo, he leído avisos referentes a PhpMyAdmin y PhpBB. Los intentos para acceder a ficheros con extensiones tales como .mdb y .asp, son signos evidente de fuego enemigo. El Listado 1 muestra un extracto. Es bueno conocer exactamente qué consultas realizadas contra nuestro servidor han dado en el blanco. De hecho, esto es una forma de detectar patrones de ataque que podrían causar dolores de cabeza a otros servidores.
SYSADMIN Netfilter L7.…......................................56
Vemos como filtrar protocolos familiares que utilizan puertos no tan familiares con el parche IPTables L7. Asterisk .....…......................................61
Implementamos una centralita telefónica IP con Asterisk.
Listado 1: Accesos al Servidor Web 01 cncln.online.ln.cn - [05/Dec/2005:22:09:04 +0100] "GET /bbs/upload.asp?action=upfile HTTP/1.1" 404 1025 "-" "InetURL:/1.0" 02 58.241.228.180 - [06/Dec/2005:03:32:54 +0100] "GET /bbs/diy.asp HTTP/1.1" 404 1025 "-" "Mozilla/4.0" 03 222.62.228.179 - [06/Dec/2005:07:19:49 +0100] "GET /bbs/diy.asp HTTP/1.1" 404 1025 "-" "InetURL:/1.0" 04 220.191.42.203 - [13/Oct/2005:10:12:23 +0200] "GET /data/dvbbs6.mdb HTTP/1.1" 404 1025 "-" "InetURL:/1.0" 05 220.191.42.203 - [13/Oct/2005:10:12:24 +0200] "GET /data/dvbbs7.mdb HTTP/1.1" 404 1025 "-" "InetURL:/1.0"
Detectando Patrones 404 Se entra en Webalizer, el amigo del administrador. Patrick Frei ha escrito un parche para Webalizer que proporciona al administrador estadísticas adicionales referentes a solicitudes que hayan provocado la respuesta 404 - File not found en el servidor. La Figura 1 muestra estas estadísticas de mi servidor web del día 6 de Diciembre de 2005. Se puede ver de un vistazo que las entradas que descubrí no son un caso aislado. También se pueden observar un par de enlaces erróneos que tengo que eliminar. El código fuente de Webalizer (incluido el parche ya aplicado) está disponible en [1]. Tan sólo hay que compilar e instalar:
WWW.LINUX-MAGAZINE.ES
Figura 1: Webalizer Xtended muestra las estadísticas erróneas para el 6 de Diciembre.
./configure make make install
Harán falta los paquetes Zlib, Libpng y GD, junto con los paquetes de desarrollo correspondientes. El parche que convierte el código fuente original de Webalizer en “Webalizer Xtended” está disponible en [1]. Para aplicarlo, en el directorio del código fuente de Webalizer, se teclea el siguiente comando: patch -Np1 -i /Pfad /webalizer-2.01-10-RB06-patch
Luego sólo hay que compilar Webalizer como se ha descrito anteriormente. El proceso completo es mucho más sencillo para los usuarios de Gentoo, ya que está disponible un Ebuild. ¡Felices accesos ■ erróneos!
RECURSOS [1] Webalizer Ztended: http://www. webalizer.go.to
Número 17
55
ADMINISTRACIÓN • Netfilter L7
Bloqueando puertos en la capa 7 con el parche L7
MÁS ALLÁ DEL PUERTO
Si se necesita una herramienta para filtrar los protocolos que no dependen de un puerto, entonces hay que probar L7, un parche para IPTables que opera basándose en expresiones regulares. POR JÖRG HARMUTH
T
radicionalmente los cortafuegos deciden si permitir o rechazar los paquetes basándose en la dirección IP, los flags TCP, las direcciones MAC, los puertos y otros criterios que residen en las capas que van desde la segunda a la cuarta del modelo de referencia OSI. Los administradores con experiencia pueden probablemente teclear comandos como iptables -A FORDWARD -i $IF -o $OF -p tcp -dport 80 --syn -j ACCEPT. ¿Pero qué sucede si el servidor web está escuchando en el puerto 8500 en vez de en el puerto 80? O ¿si un servidor de juegos lo utiliza inadecuadamente? Las aplicaciones peerto-peer son incluso peores, ya que no hay forma de predecir los puertos que van a utilizar. Y VoIP hace que el caos sea total con el protocolo RTP (Real Time Protocol), que tiene total libertad a la hora de utilizar los puertos UDP. Incluso si no se necesita utilizar un cortafuegos, puede ser que se necesite adaptar el tráfico para VoIP priorizando RTP. Y para ello, el router ha ser capaz de distinguir entre los distintos protocolos. El número de puerto no es de gran ayuda, excepto en los casos más simples, por lo que el usuario tendrá que inspeccionar los
56
Número 17
flujos de datos con mayor detalle. Quizás, de reglas RFC y filtran los contenidos no sea un gran reto para un administrador, dañinos en el proceso, L7 usa expresiones pero sí que supone un reto para un regulares rápidas para comprobar los cortafuegos sujeto estrictamente a su flujos de datos. Es capaz de cribar conjunto de reglas. Un cortafuegos no se rápidamente los datos de entrada puede permitir el lujo de perder tiempo utilizando para ello expresiones regulares analizando datos, pero al mismo tiempo, que sean capaces de identificar tampoco puede permitirse el lujo de hacer características propias de los protocolos suposiciones erróneamente. individuales sin tener que depender de El parche L7 para IPTables intenta indicadores externos como puedan ser los resolver este problema [1]. L7 viene de números de los puertos. Layer 7 (capa 7) del modelo de referencia Cazando Estrellas OSI, es decir, la capa donde residen los protocolos de aplicación como FTP o SSH L7 necesita un fichero patrón para cada (Figura 1). L7 hace uso de expresiones protocolo que vaya a soportar. El nombre regulares para investigar el contenido de una conexión individual. Al contrario que otras puertas de enlace de la capa de aplicación más complejas, que comprueban los protocolos Figura 1: Después de instalar el parche L7, Netfilter funciona en la capa de basándose en el Aplicación del modelo de referencia OSI, así como con las capas que van conjunto completo desde la 2 a la 4 de OSI.
WWW.LINUX- MAGAZINE.ES
Netfilter L7 • ADMINISTRACIÓN
Listado 1a: Patrón FTP 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
# Calidad de la pauta: bueno y rápido # Conicide con las dos primeras cosas que el servidor debería ver. # La mayoría de los servidores dicen algo después de 220, aunque # no tengan ninguna obligación de hacerlo y suele incluir la cadena # "ftp" (l7-filter no es sensible a las mayúsculas/minúsculas # en estos momentos). # Esto incluye a proftpd, vsftpd, wuftpd, warftpd, pureftpd, Bulletproof # FTP Server, y cualquier servidor que utilice ftp.microsoft.com. # Por si acaso, la siguiente cosa que envía el servidor es un 331. # Todos los servidores citados también envían algo que incluye la # cadena "password," después de este código. ftp # de momento sólo te deja hacer lo primero, al ser más rápido ^220[\x09-\x0d -~]*ftp # Esto coincidiría con más, pero es mucho más lento # ^220[\x09-\x0d -~]*ftp|331[\x09-\x0d -~]*password
del fichero con el patrón está formado por el nombre del protocolo y la extensión .pat; por ejemplo, http.pat contiene una expresión regular que identifica a HTTP. Un fichero de patrón L7 contiene una o varias expresiones regulares que identifican el protocolo. Todas las opciones están detalladas en los ficheros proporcionados con la ruta y todas las opciones están deshabilitadas, con la excepción de una expresión. También se puede encontrar una evaluación cualitativa (cómo de rápido, cómo de seguro) y si fuera necesario, los HOWTO típicos de las aplicaciones. Los listados 1a y 1b muestran las definiciones para FTP y SMTP. Ambas expresiones empiezan con un código 220; éste es el código al comienzo de la cabecera de los dos servicios. Tanto FTP como SMTP son protocolos basados en ASCII que escriben mensajes en líneas individuales en un formato totalmente legible por una persona. De acuerdo con los RFCs, realmente nada tiene que seguir al código 220, pero puede haber algo y normalmente lo hay. Los programas de línea de comandos típicos para FTP muestran estos mensajes, como el siguiente, tras llamar a ftp.kernel.org: Connected to kernel.org. 220 Welcome to ftp.kernel.org. Name (kernel.org:jha): anonymous 331 Please specify the password. Password:
El mensaje Connected es generado por el programa cliente y a continuación va seguido por la cabecera del servidor, que
protocolo, habría que comparar el fichero del protocolo con un volcado de la sesión. Comparando los datos de la conexión con la expresión regular nos conduciría hacia la pista.
QoS en vez de realizar un Drop o un Reject L7 puede manejar todos los destinos normales de Iptables (DROP, REJECT, ACCEPT, …) lo que permitiría basar el conjunto de reglas del cortafuegos con las identificaciones llevadas a cabo por L7. Sin embargo, el proyecto L7 tiene buenas razones para aconsejar a los administradores. Los atacantes experimentados podrían modificar fácilmente la información del protocolo, colándole una a L7, y de este modo abrir una conexión no autorizada en la red. En vez de bloquear el tráfico, se debería utilizar L7 como una ayuda potente para reforzar las reglas que ya se disponían con anterioridad. De hecho, L7 está recomendado para QoS (Calidad del Servicio). Lo peor que pueda pasar es que QoS asigne una conexión erróneamente a una banda de baja prioridad. Con lo que se mantendrá a los usuarios dentro de un nivel de quejas aceptable. La recompensa a todo este esfuerzo es que L7 mantiene a los servicios de poca importancia, como las redes peer-to-peer, a raya, impidiendo que se apoderen de todo el ancho de banda. Una configuración adecuada permitiría que las aplicaciones importantes tengan el
L7 localiza en los datos transferidos y los evalúa para identificar el protocolo. Como la cabecera incluye una cadena ftp, L7 identifica al protocolo FTP reconociendo esta cadena con la expresión regular (Listado 1a, línea 11) y no intenta identificar ninguna otra expresión. Si el servidor hubiera respondido con un código 220 conforme al RFC, L7 hubiera sido incapaz de identificar al protocolo, ya que la expresión SMTP (Listado 1b, línea 7) no devolvería una coincidencia. En el siguiente paso, el cliente FTP transmite el nombre del usuario, y el servidor responde con el código 331. Esta línea se corresponde con la expresión del listado FTP (que aparece deshabilitada, véase Listado 1a, línea 13), ya que la línea contiene las claves de búsqueda 331 y password. L7 identificaría a FTP basándose en esta información. L7 no encuentra una coincidencia hasta que se haya mandado el séptimo paquete en esta conexión; el saludo en tres partes, la cabecera del servidor, la petición del nombre del usuario y el nombre del usuario se transfieren antes de que ocurra esto. Así se explica el comentario “This will match more, but much slower” (Esto coincidiría Figura 2: La configuración para L7, Netfilter y QoS se mejor, pero es mucho más extiende por varias ramas de Qconf. El soporte para la capa 7 lento). Si L7 fallara se esconde bajo Networking | Networking support | Netidentificando un working options | Network packet filtering | IP tables support.
WWW.LINUX- MAGAZINE.ES
Número 17
57
ADMINISTRACIÓN • Netfilter L7
Listado 1b: Patrón SMTP 01 02 03 04 05 06 07 08 09
# Calidad de la pauta: bueno y rápido smtp # Como de costumbre, no se requiere ningún texto después del 220 # pero todos los servidores conocidos tienen alguno. # (Casi) siempre contiene la cadena "smtp". Los ejemplos # RFC no, así que coincidimos esos también., por si alguien # los ha copiado literalmente. ^220[\x09-\x0d -~]* (e?smtp|simple mail)
ancho de banda suficiente para trabajar. El bloqueo completo de las redes peer-to-peer sería como lanzarles un nuevo reto a los usuarios para que encuentren una alternativa.
Cómo Funciona Con el objeto de identificar protocolos basándose en expresiones regulares, L7 necesita investigar un segmento del flujo de datos, que normalmente comprende varios paquetes. Por
defecto, L7 investigará los primeros 2048 bytes o los diez primeros paquetes de una conexión como máximo (ocho paquetes en las versiones anteriores), dependiendo de cual suceda antes. Se puede modificar este valor umbral del número de paquetes a investigar por medio de la interfaz proc: echo number > U /proc/net/layer7_numpackets
Instalando L7 Para soportar QoS con el parche L7, se necesitan las herramientas IProute2 y una configuración del kernel adecuada. L7 requiere los siguientes paquetes: • El parche L7 actual [1] (la versión 2.0 está disponible desde hace poco) • Descripciones del protocolo en formato de expresión regular [1] (actualmente: 2005-11-20) • El código fuente de Iptables [2] (actualmente: 1.3.4, al menos la 1.3.0) • Las fuentes del kernel [3]. Se pueden parchear los kernels específicos de las distribuciones. L7 v2.0 está diseñado para las versiones 2.6.14 y 2.4.31 del kernel. Hay que descomprimir los archivos L7 y aplicar los parches. Para ello, en el directorio del kernel y de la Iptables se teclea match -p1 patchfile. A continuación se ha de continuar haciendo un fichero nuevo oculto, iptables-1.3.4/extensions/.layer7-test en el paquete ejecutable Iptables (chmod +x).
make install proporciona una manera sencilla de colocar las descripciones del protocolo en el directorio por defecto, /etc/l7-protocols/protocols/. Si se modifica la ruta, entonces habrá que especificar el directorio del protocolo en cada regla L7.
58
Número 17
Configurando el Kernel Para el soporte de QoS (y para los ejemplos de este artículo), hay que habilitar varias opciones del kernel (y o m, detalles para el kernel 2.6), algunas de las cuales únicamente son visibles cuando se habilita Code maturity level options | Prompt for development and/or incomplete code/drivers. Hay dos opciones importantes en el área de configuración Networking | Networking support | Networking options | TCP/IP networking: • IP: advanced router * IP: policy routing e IP: use netfilter MARK value as routing key Las siguientes opciones se necesitan para la configuración de Netfilter en Networking support | Networking options | Network packet filtering | IP: Netfilter Configuration: • Connection tracking, y más específicamente Connection tracking flow accounting (requerido para L7). También, FTP protocol support e IRC protocol support , para identificar las sesiones FTP e IRC. • IP tables support y Layer 7 match support (Figura 2), así como netfilter MARK match support, Packet filtering, Packet mangling y de nuevo MARK target support.
WWW.LINUX- MAGAZINE.ES
Con la versión 2.0, se puede modificar el número de bytes del buffer en la ejecución del módulo. modprobe ipt_layer7 maxdatalen=número_de_bytes se encarga de ello, sin embargo, en versiones anteriores habrá que volver a recompilar. Bajo circunstancias normales, los 2048 bytes por defecto son adecuados; y recuérdese que cuanto mayor sea este valor, mayor será su impacto en el rendimiento. Cuando L7 identifica un protocolo, realiza la acción asignada con la regla Iptable. El comando para el protocolo HTTP sería iptables opciones -m layer7 --l7proto http -j acción. Si L7 falla identificando el protocolo, no coincide con ninguno de los patrones, supondrá que recibe el nombre unknown. Dicho de otro modo, se puede definir una regla L7 que coincida con unknown. Mientras L7 está a la espera de datos e investigando el paquete, no asignará ningún nombre al protocolo. FTP e IRC-DCC son dos casos especiales bien conocidos que aún no han dejado de divertirse con los cortafuegos. Usan canales adicionales para la transferencia de datos en paralelo con el objeto de controlar los datos. L7 puede identificar el canal de control, pero no será capaz de encontrar los canales de datos. Los módulos del kernel ip_conntrack_ftp e ip_conntrack_irc solucionan este problema; ambos son parte de la distribución de Iptables (FTP protocol support e IRC protocol support en el apartado de configuración Connection tracking).
Coincidencias El mejor sitio para establecer las coincidencias L7 es en la tabla mangle. Las reglas L7 sólo funcionarán en la tercera tabla, filter, si la política es ACCEPT. Las razones se vuelven aparentes cuando se considera cómo se establece una conexión TCP: • Llega un paquete SYN para iniciar la conexión. • El paquete SYN no posee ninguna información acerca de ningún protocolo de la capa 7, así que L7 fallará a la hora de identificar el protocolo y la regla L7 no puede ser aplicada (por ahora). • El paquete pasa a través de todas las reglas. Si no se tiene una política ACCEPT, el paquete se descarta y la conexión no se establece.
Netfilter L7 • ADMINISTRACIÓN
A la caza del soporte QoS Las opciones QoS se encuentran en Networking | Networking support | Networking options | QoS and/or fair queueing; tras habilitarla, hay que comprobar lo siguiente: • HTB packet scheduler • SFQ queue • QoS support y Rate estimator • Packet classifier API Sorprendentemente, la herramienta de configuración Qconf almacena dos opciones QoS Classifier un nivel por encima, en vez de hacerlo en QoS: • Firewall based classifier • Traffic policing (needed for in/egress) La última opción sólo aparece cuando se deshabilita Packet ACTION. Después de completar la configuración, se compila el kernel y el programa IPTables, instalándose este último. Precaución: iptables se ubicará en /usr/local/sbin por defecto, mientras que la versión sin L7 se encontrará en /sbin y por ello en un nivel superior de la ruta del sistema.
• En este caso, las reglas L7 nunca llegan a aplicarse. Si se añaden las reglas al final de la cadena para interceptar los primeros paquetes que pasen, sería una solución que tan sólo funcionará para los puertos
Bajo Control L7 proporcionará mejores resultados si puede ver los dos lados de la conexión, es decir, tanto los paquetes entrantes como los salientes. Este no es el caso de las cadenas INPUT y OUTPUT (o con la tabla raw). Imagínese que se tiene una regla L7 en INPUT, pero la clave de búsqueda que coincide con la expresión regular está en la respuesta. El segundo paquete no pasará por INPUT sino a través de OUTPUT y la regla nunca llegará a verlo. La tabla mangle proporciona una respuesta simple. Todos los paquetes que llegan al cortafuegos tienen que pasar a través de mangle en PREROUTING y todos los paquetes que salen tienen que pasar por mangle en POSTROUTING. La solución recomendada es: • En caso de redireccionamiento, poner la regla en PREROUTING o en POSTROUTING. • Para los paquetes locales, poner la regla tanto en PREROUTING como en POSTROUTING. Aparte de esto, las coincidencias de L7 obedecen a la sintaxis normal. La siguiente regla añade la marca 10 (--set-mark 10) a todos los paquetes salientes (-A POSTROUTING) pertenecientes al protocolo http (--l7-proto http):
Listado 2: Etiquetando Grupos 01 02 03 04 05 06 07
IPT_PRE="iptables -t mangle -A PREROUTING -m layer7 --l7proto" IPT_POST="iptables -t mangle -A POSTROUTING -m layer7 --l7proto" $IPT_PRE fasttrack -j MARK --set-mark 13 $IPT_POST fasttrack -j MARK --set-mark 13 <I>[...]<I> iptables -A FORWARD -m mark --mark 13 -j DROP iptables -A INPUT -m mark --mark 13 -j DROP
bien conocidos. Pero la idea de L7 es poder realizar las identificaciones en puertos desconocidos, así que las reglas adicionales no van a prestar mucha ayuda. Las políticas en las otras dos tablas, mangle y nat principalmente se establecen a ACCEPT por buenas razones. UDP no tiene el “saludo a tres bandas”, ya que no está orientado a la conexión. En este caso de una política DROP, los paquetes de respuesta llegarán al destino suponiendo que el primer paquete UDP coincidió con alguna expresión regular; el seguimiento de conexiones de Netfilter se encarga de esto.
iptables -t mangle -A U POSTROUTING -m layer7 U --l7proto http -j MARK U --set-mark 10
Téngase en cuenta que el nombre del protocolo tiene que coincidir exactamente con el nombre del fichero de patrón, sin incluir la extensión, y además se distingue entre mayúsculas y minúsculas.
Filtros Al contrario de las recomendaciones de los desarrolladores, se puede utilizar L7
WWW.LINUX- MAGAZINE.ES
para bloquear completamente algunos protocolos. Sin embargo, si se va a tomar esta postura, se debe proceder con precaución, comprobando los resultados y tomando algunos pasos adicionales, si fuera necesario, para evitar la apertura de posibles agujeros de seguridad. Este bloque simple de reglas está enfocado al acceso a los grupos de noticias: iptables -A FORWARD -p U tcp -m layer7 --l7proto U nntp -j DROP
Un proxy de noticias o un servidor que se esté ejecutando en el cortafuegos no se vería afectado por esta regla de redireccionamiento. La compartición de ficheros es algo que la mayoría de los administradores quieren evitar. Si se es uno de esos administradores que están constantemente batallando para impedir que los usuarios accedan a los servicios de compartición, L7 puede facilitar enormemente el trabajo. Los filtros basados en los puertos fallan si un servidor de E-Mule, por ejemplo, está escuchando en el puerto 80. Algunos programas peer-to-peer utilizan el puerto HTTP. L7 soluciona este problema con buenos resultados en la mayoría de los casos utilizando excelentes patrones para E-Donkey/E-Mule, Bittorrent y Fasttrack.
A por la Compartición de Ficheros La siguiente variante etiqueta las conexiones para la compartición de ficheros en la tabla mangle usando MARK y deja la labor de filtrado real a la tabla filter. Esta solución permite formar grupos de protocolos que están gobernados por tan sólo unas pocas reglas de filtrado. La caracterización del grupo es una buena opción para muchos entornos, ya que permite controlar todos los protocolos de un grupo en un solo punto. El Listado 2 muestra una porción del script IPtables que se encarga de ello. Las dos primeras líneas en el Listado 2 inicializan dos variables para no tener que teclear tanto. Las líneas 3 y 4 del listado etiquetan los paquetes pertenecientes al protocolo Fasttrack con la marca 13 tanto en PREROUTING como en POSTROUTING para estar seguro. Tan sólo hay que repetir estas líneas para el
Número 17
59
ADMINISTRACIÓN • Netfilter L7
Figura 3: Con Iptables, los paquetes entrantes primero pasan por la tabla mangle en la cadena PREROUTING; a continuación le sigue la tabla NAT. Si el paquete tiene como destino otro equipo, simplemente se pasa a la tabla mangle de la cadena POSTROUTING.
resto de protocolos. Las dos últimas líneas del Listado 2 eliminan los paquetes enviándolos al Nirvana digital. Nota: El fichero fasttrack.pat establece que el patrón pueda detectar descargas, pero no búsquedas. Esta limitación no es realmente un problema en la mayoría de los casos. El fichero también indica que Fasttrack normalmente utiliza peticiones
L7 y la Tabla NAT Un rápido vistazo al (bastante simplificado) diagrama que muestra cómo un paquete circula a través de IPtables (Figura 3), probablemente nos haga suponer que todos los paquetes entrantes pasan por las tablas mangle y nat en la cadena PREROUTING, y por ello, que los paquetes salientes pasan por las mismas tablas, pero de la cadena POSTROUTING. Si esta suposición fuera correcta, se podría colocar L7 en ambas cadenas. Desafortunadamente, esto tan sólo se aplica a las cadenas en la tabla mangle. La tabla nat tan sólo llega a ver el primer paquete de una conexión si se está usando DNAT o SNAT. El código de seguimiento de las conexiones corta justo en el segundo paquete y se encarga de todo lo demás, enrrutando los paquetes sin consultar la tabla nat, después de todo, la decisión NAT ya ha sido tomada. Intentar usar L7 en este punto está condenado al fracaso, ya que el punto más temprano en el que L7 puede identificar un protocolo es en el paquete cuarto (siguiendo el saludo a tres bandas), o más adelante en la mayoría de los casos.
60
Número 17
HTTP y esto es por lo que se necesita insertar esta regla en la cadena antes de aplicar la regla HTTP. Fasttrack es utilizado por Kazaa, Morpheus, E-Mesh y Grokster. VoIP últimamente está ganando bastante terreno. La calidad de los patrones L7 para identificar VoIP es mediocre. Además, se necesitan los módulos de ayuda de Iptables para H.323 y SIP, ya que ambos protocolos trabajan con múltiples puertos al mismo tiempo. Estos módulos requieren el Kernel 2.6.11 o posterior. Para Skype, no hace falta ningún módulo adicional.
SSL y L7 L7 no puede identificar protocolos en túneles SSL (HTTPS, IMAPS,?). El único paquete con texto en claro tras el “saludo” TCP/IP es el certificado del servidor SSL. El intercambio de claves se produce justo después de este momento y todos los otros intercambios entre el cliente y el servidor están encriptados. Esto fuerza a los administradores a tratar a todos los protocolos que pasan por el túnel SSL como si fuesen el mismo. Algo que se podría probar es buscar algún criterio en el certificado, es decir, se podría decidir no confiar en determinadas autoridades certificadoras. Esto es por lo que el fichero del patrón para SSL no está titulado como ssl.pat sino como validcertssl.pat. El patrón tan sólo permite las CAs conocidas y por ello no funcionará con los certificados autofirmados, aunque se podría escribir un patrón propio que se encargara de ello.
WWW.LINUX- MAGAZINE.ES
Buenos Patrones Cómo de bien se comporte el parche L7 en sistemas reales depende de la calidad del fichero de patrones. Serían útiles patrones con mejor calidad para los protocolos VoIP. Los patrones sorprendentemente simples ya son capaces de identificar los protocolos estándar, incluso los candidatos escurridizos como FTP o IRC-DCC. Y la calidad de los patrones para la mayoría de los protocolos peer-to-peer son bastante buenos. L7 puede facilitarle la vida a los administradores de sistemas, especialmente en combinación con el control del tráfico: añadiendo algunas armas al arsenal del administrador que está en constante batalla contra los usuarios de las redes peer-to-peer. En vez de bloquear completamente la compartición de ficheros, sencillamente se puede bajar su tasa de transferencia. La mayoría de los usuarios no se quejan de conexiones lentas en sus redes locales, e incluso si lo hicieran, no se podrían quejar realmente a nadie, porque la mayoría de las políticas de las empresas tienen reglas que prohíben la ■ compartición de ficheros.
RECURSOS [1] Código fuente de L7 y definiciones de protocolo: http://l7-filter. sourceforge. net [2] Código fuente de IPtables: http://www. netfilter.org [3] Código fuente del Kernel: http://www. kernel.org
Asterisk • ADMINISTRACIÓN
Sistema avanzado de telefonía IP con Asterisk
BUENO, BONITO Y BARATO
Si tu centralita no da para más, sólo necesitas un ordenador para montar una nueva centralita IP con servicios avanzados de telefonía. POR MEHDI CHOUIKH
A
ctualmente existen varios motivos por los que las empresas están planteándose la integración de sus redes de voz y datos. En primer lugar está la reducción de costes y personal. En segundo lugar, la mejora en las comunicaciones y la productividad de los empleados. Y como tercera razón de peso encontramos las aplicaciones novedosas que pueden implementarse y que, sin duda, mejoran la comunicación con los clientes.
ASTERISK: la solución para la convergencia Hace 4 años un amigo y yo decidimos montar una empresa de telefonía IP. Yo tenía experiencia en sistemas IP usando el protocolo h323, incluso había desarrollado sistemas de tarificación con dicho protocolo basándome en el GNUgatekeeper (un servidor de señalización para sistemas de telefonía IP usando el protocolo h323), que era una de las alternativas más fiables al software propietario de aquel entonces. Montamos una solución de telefonía IP y sólo nos faltaba el hardware para interconectar con la red de telefonía tradi-
cional, llamado gateway o pasarela de VoIP. Miramos el mercado, y el equipo que necesitábamos para 60 llamadas simultáneas costaba unos 8000 euros. En aquel momento comenzaba a sonar el nombre de Asterisk: una plataforma de telefonía IP que lo hacía todo. Asterisk es un servidor de telefonía IP multiprotocolo con todas las funcionalidades de una centralita tradicional, que además puede actuar como gateway o pasarela entre las redes de VoIP y las redes de telefonía tradicional, o PSTN, usando hardware compatible tipo Digium o Sangoma. Tras investigar un poco sobre el proyecto y realizar los cálculos económicos decidimos arriesgarnos y usar Asterisk como nuestra pasarela principal, que en una primera fase fue diseñada para soportar 30 llamadas simultáneas a la red de telefonía tradicional. Los resultados finales fueron mejores de lo esperado y hoy no sólo lo usamos como gateway, sino que además lo usamos como servidor SIP para el registro de clientes. En este artículo explicamos cómo se puede usar Asterisk como gateway, para dar salida a las llamadas que provienen de una red IP en la red de telefonía tradicional (PSTN).
WWW.LINUX- MAGAZINE.ES
¿Por dónde empezar? El nombre de Asterisk proviene del carácter (*) usado como comodín en los sistemas Linux. Es el nombre perfecto para esta PBX por varias razones, la más importante de las cuales es la variedad de interfaces con las que Asterisk puede conectar, incluyendo: • Interfaces analógicas, como líneas RTB, llamadas FXO, o teléfonos analógicos, llamadas FXS • Circuitos digitales, tipo E1 ó T1 (véase Figura 1) • Protocolos VoIP, como SIP, h323, MGCP, IAX Así que lo primero que haremos será definir los requisitos del sistema Asterisk que queremos montar. Dicho sistema debe ser capaz de interconectar una red VOIP formada por teléfonos IP que usan el servidor Asterisk como servidor de registro y enrutamiento hacia la red PSTN. En este tipo de sistemas el parámetro más significativo es el número de llamadas simultáneas que ha de soportar el gateway en hora punta. En nuestro caso el número máximo de llamadas simultáneas será 30.
Número 17
61
ADMINISTRACIÓN • Asterisk
Figura 1: Tarjeta Sangoma para Interfaz E1 y una Digium para líneas analógicas.
1- Elección del Hardware: empezaremos eligiendo el hardware de nuestra máquina teniendo en cuenta que nuestro Gateway ha de ser capaz de soportar en hora punta la conversión de telefonía tradicional a IP de 30 llamadas simultáneas, la tarea principal de este equipo es la conversión entre dos protocolos, es decir, el recurso más preciado es la CPU. Para nuestro caso hemos elegido un Pentium 4 a 3Ghz con 1MB de CACHE y 512 MB de RAM. El resto de hardware del equipo no es tan crítico. 2- Elección de la tarjeta de comunicaciones: para poder realizar 30 llamadas simultáneas, existen dos
que más nos Figura 2: Hardware de telefonía IP [5]. guste: en nuestro caso instalamos una DEBIAN SARGE • Zaptel.conf: Aquí irá la configucon un kernel 2.6.8. Después de la instaración de bajo nivel para la interfaz lación del sistema operativo, debemos de hardware. Configuraremos los 30 instalar algunos paquetes necesarios canales de la E1. para la compilación de Asterisk y de los • Zapata.conf: Asterisk usa este drivers Zaptel para tarjeta de comunicafichero para configurar y determinar ciones: cómo se va a comunicar con el hard• kernel-headers. ware. Desde este fichero podemos • bison. controlar varios parámetros como • ncurses-dev. identificación de llamadas entrantes, • libssl-dev. desvío de llamadas, cancelación de • libnewt-dev. eco y muchos más. • zlib1g-dev. • Extensions.conf: El plan de marcado • initrd-tools. será simple, pero demostrará que nuestro sistema funciona. Listado 1: Instalación • Sip.conf: Donde configuraremos todo 01 # cd /usr/src lo relacionado con el protocolo SIP, 02 # svn checkout http://svn.digium.com/svn/asterisk/branches/1.2 desde su comportamiento global asterisk-1.2 hasta los usuarios autorizados y sus 03 # svn checkout http://svn.digium.com/svn/zaptel/branches/1.2 parámetros. zaptel-1.2 Vamos a comenzar configurando el canal 04 # svn checkout http://svn.digium.com/svn/libpri/branches/1.2 Zaptel. Para ello modificaremos el fichero libpri-1.2 /etc/zaptel.conf en función del tipo de inter05 # cd ../libpri-1.2 faz telefónico que tengamos. Vamos a 06 # make clean; make install hablar de dos de ellos: los SPAN para acce07 # cd zaptel-1.2 sos primarios y los fxsks para líneas analó08 # make clean; make install 09 # cd ../asterisk-1.2 gicas RTB. 10 # make clean; make install; make samples La configuración de los SPAN tiene el siguiente formato de configuración: posibilidades. La primera es contratar Instalación 30 líneas analógicas RTB. Esto es poco span=<spannum>, <timing>,U viable: la placa base de un ordenador de Antes de comenzar la instalación, <LBO>, <framing>, <coding> gama media-alta tiene como máximo descargamos el software necesario desde seis slots PCI, por lo que sólo podemos [1] para instalar Asterisk y Zaptel, y donde spanum es el número del conector usar 6 tarjetas Digium PCI de 4 puertos seguimos los pasos que aparecen en el de entrada, timing es el parámetro que FXO, es decir 24 líneas como máximo. Listado 1. especifica si la señal de reloj la proporAdemás el coste de dichas tarjetas es ciona el proveedor (valor 1) o no (valor Configuración elevado, cada una supone el 40% del 0).Y LBO es el valor que nos indica el precio de una tarjeta E1. La segunda Aquí nos metemos en faena de verdad, nivel de potencia de la señal, que varía posibilidad es mediante un acceso ya que comenzaremos a construir nuesen función de la distancia a la central: Digital E1 usando una tarjeta Digium tro sistema Asterisk. Para ello tendremos por defecto es 0 salvo que el proveedor TE110P. que modificar los siguientes archivos de indique lo contrario. framing y coding 3- Instalación del sistema operativo: configuración de la carpeta /etc/asterisk definen cómo nos comunicamos con el una vez tengamos todo el hardware y el fichero Zaptel que se encuentra en hardware para un acceso E1. framing montado, instalaremos la distro Linux /etc: toma el valor hdb3 y coding el valor crc4.
62
Número 17
WWW.LINUX- MAGAZINE.ES
Asterisk • ADMINISTRACIÓN
aprender a corregir el eco: para esto añadimos el parámetro echotraining con el valor “yes”. Esto le indica a Asterisk que envíe un tono al inicio de cada llamada para medir el eco de la línea, y 01 span=1,1,0,ccs,hdb3,crc4 aprender así con mayor velocidad el com02 # Span 1 --es un comentario portamiento del eco. Si aún así seguimos 03 bchan=1-15 teniendo algo de eco podemos terminar 04 dchan=16 de cancelarlo jugando con las ganancias 05 bchan=17-31 de recepción rxgain y transmisión txgain: En caso de haber elegido línea analógisus valores pueden variar de -100% a ca RTB en lugar de span usamos 100%. Finalmente definimos el número fxsks=número-interfaces para las líneas de canales que tenemos, e incluso telefónicas [2]. podemos agruparlos para ser tratados Ahora pasaremos al /etc/asterisk/zacomo uno solo. En nuestro caso hemos pata.conf. Este fichero es el más comagrupado los 30 canales en un solo plejo, ya que encontramos muchos grupo. Para ver más opciones de configuparámetros (véase Listado 3). El fichero ración de zapata.conf véase [4]. Una vez modificados los ficheros zaptel.conf y zapata.conf, tendremos que comprobar si funciona la configuración que hicimos. Para Figura 3: Resultado mostrado tras configurar Zaptel. ello vamos a cargar los drivers de tiene una sola sección [channels], en zapatel con las órdenes #modprobe zapdonde especificamos el modo de señatel y #modprobe wctw11xp. Tras esto, lización y los distintos parámetros para ejecutamos el configurador del zaptel el uso de la tarjeta Zaptel. En el Listado con #ztcfg -v, que nos mostrará el 3 hay un ejemplo con los parámetros número de canales configurados (véase más usados, el primero es context y se Figura 3). refiere a la sección del plan de marcado Pasamos a ver el fichero sip.conf, (extensiones.conf) donde definimos las donde decidimos quién puede regisacciones a realizar con las llamadas trarse en nuestro sistema y con quién recibidas. transfer es el parámetro que nos podemos registrar. Vemos que está nos permitirá transferir las llamadas estructurado en secciones. La primera recibidas por este canal. signalling es [general] donde se configura el comdefine el modo de señalización que usa portamiento global del protocolo y el la tarjeta Zaptel y tiene que coincidir canal SIP: con lo definido en el zaptel.conf. En nuestro caso el valor es “pri_cpe”, que [general] corresponde a los accesos E1. La port=5060U siguiente opción es SWITCHTYPE, que ;Puerto de registro nos define el tipo de marcado de un bindaddr=0.0.0.0U canal E1, y el valor más común es ;dirección ip donde escuchar “euroisdn”, aunque depende del ;la ip 0.0.0.0 = todas proveedor del servicio. Para poder context=defaultU habilitar los parámetros de identifi;Contexto por defecto cación de llamada usamos los parámedisallow=allU tros usecallerid, igual a “yes”, y callerid, ;Deshabilita todos los codecs igual a “asreceived”; para eliminar el allow=gsmU eco creado por las líneas analógicas ;Permite sólo el códec gsm jugaremos con las opciones echocancel y echocancelwhenbridged. Los ponA continuación encontramos una secdremos a “yes”, pero aún así el canceción por usuario tipo [usuario] y luego lador requiere un cierto tiempo para los parámetros del usuario como sigue:
Listado 2: Ejemplo de Configuración de zaptel.conf para un E1.
WWW.LINUX- MAGAZINE.ES
[100] type=friend secret=suclave context=salientes callerid="Usuario 1" <100> host=dynamic canreinvite=yes disallow=all alolow=gsm
Después de crear los usuarios SIP, sólo nos falta diseñar nuestro plan de marcado para poder llamar y recibir llamadas.
Listado 3: Ejemplo de Configuración de zapata.conf para un E1. 01 [channels] 02 context=entrantes ;Contexto donde entran las llamadas en plan de marcado 03 transfer=yes ;Nos permitirá transferir llamadas 04 signalling=pri_cpe 05 switchtype=euroisdn 06 usecallerid=yes ;Habilita y deshabilita el uso del número llamante 07 echocancel=yes ;parámetros para la cancelación del eco 08 echocancelwhenbridged=yes 09 echotraining=yes 10 group=1 11 rxgain=0.0 ;ganancia en db de las señales de entrada y salida. 12 txgain=-5.0 13 channel => 1-15 14 channel => 17-31
Para ello modificamos el fichero extensions.conf, considerado por muchos el fichero más importante de Asterisk. Este fichero a su vez tiene varias secciones, la primera de las cuales es general, y comienza siempre así: [general] static=yes writeprotect=yes
Las siguientes secciones son los contextos. Cada contexto tiene al menos una extensión (una extensión es un número de teléfono que puede estar compuesto por números, letras o una combinación de ellos). Cada extensión tiene priori-
Número 17
63
ADMINISTRACIÓN • Asterisk
[entrantes] exten => 951233900,1,U Dial(Sip/100,90,Tt) exten => 951233900,2,Hangup()
Probando Probando, 1, 2, 3 Por fin, ejecutamos Asterisk con el comando Asterisk -vvvgc, configuramos un teléfono IP software o hardware (véanse Figuras 1 y 2), y probamos a realizar llamadas a números locales (véase Figura 4 con el resultado de la consola de Asterisk). Finalmente realizamos una llamada a un número de nuestras líneas (véase Figura 5) y veremos cómo suena la extensión correspondiente, y al descolgar…¡todo funciona!
Conclusión
exten => número, prioridad,U aplicación(arg1,arg2,...)
donde número es el número de teléfono, la prioridad es el orden en la cual se ejecuta, y finalmente aplicación, la aplicación a ejecutar. La más importante de estas últimas es Dial(), que permite realizar llamadas, y a su vez tiene el siguiente formato: Dial(canal/número, tiempo espera, opciones) El primer contexto en nuestro plan es [default], Asterisk lo usa para manejar las llamadas no autorizadas o no definidas para el canal SIP, así que lo único que pondremos en este contexto es un mensaje que avisa al usuario de que el número al que están llamando no es correcto.
[default] exten => s,1,Answer exten => s,2,Playback(invalid)
Luego definiremos el contexto para llamadas salientes, al que llamaremos [local], que tendrá una sola extensión para las llamadas nacionales que sólo permite llamadas que empiecen con 9 y en las que el segundo dígito sea una cifra entre 1 y 9, del tercero al último entre 0 y 9 y con la longitud que sea. Esta extensión tiene dos prioridades, la primera ejecuta la aplicación Dial eligiendo el grupo 1 del canal Zaptel usando la tarjeta que configuramos llamando al número local definido por la variable ${EXTEN} que no es más que el número marcado. [locales] exten => _9ZXXXXXXX,1,U Dial(Zap/g1/${EXTEN},90,Tt) exten => _9ZXXXXXXX,2,Hangup()
Finalmente definimos el contexto para llamadas entrantes [entrantes] que recibimos a través de nuestro acceso telefónico.
Además de lo contado, con Asterisk se puede hacer cualquier cosa imaginable: un centro de llamadas de atención al cliente, un sistema de respuesta interactiva, un sistema de consulta de pedidos, donde al cliente le contesta una operadora digital que le presenta unas opciones, introduce su código, y le responde con el estado de su pedido… entre otra infinidad de cosas. Lo único que hace falta son ganas y algo de tiempo. Para más información recomendamos una ■ visita a [6].
EL AUTOR
dades y aplicaciones para ejecutar. Gracias a los contextos podemos organizar nuestro plan de marcado y restringir llamadas a algunos destinos a los usuarios que queramos. Las extensiones tienen el siguiente formato:
Mehdi Chouikh, es ingeniero técnico de telecomunicaciones, Responsable de VoIP de Universal Telecom Experts, y tiene más de 4 años de experiencia ofreciendo servicios de telefonía y networking.
RECURSOS [1] Sitio oficial de asterisk http://www. asterisk.org [2] Información adicional sobre la configuración del Zaptel: http://www. digium.com/downloads/ configuring_zaptel.pdf [3] Cómo configurar el wanpipe de Sangoma: http://sangoma.editme.com/ wanpipe-asterisk-configure
Figura 5: La consola de Asterisk muestra esto al realizar una llamada.
[4] Información adicional sobre el fichero zapata.conf: http://www.digium.com/ asterisk_handbook/zapata.conf.pdf [5] En este sitio podemos comprar teléfonos IP y servicios de telefonía IPhttp://www.mitelefonovirtual.com
Figura 6: La consola de Asterisk muestra esto al recibir una llamada.
64
Número 17
WWW.LINUX- MAGAZINE.ES
[6] Wiki acerca de telefonía IP, con énfasis en Asterisk http://www.voip-info.org
Bienvenidos a Linux User Ésta es la sección dedicada a la presentación de software interesante y útil que nos ayuda en nuestro quehacer diario con el escritorio Linux. Aquí aprenderemos a utilizar software estándar de una manera más eficiente, adquiriremos valiosos conocimientos y descubriremos nuevas y apasionantes aplicaciones.
Ktools: Klik
66
Klik nos trae la instalación cómoda al escritorio de KDE.
Chats con Irssi
69
La capacidad de Irssi para correr scripts hacen que sea en un gigante entre todas las herramientas de chat .
Desktopía: Wmii
72
Para gobernar el escritorio desde el teclado, échale un vistazo a este potente administrador de ventanas.
Cine en PSP
77
Con Linux se pueden cargar películas en una consola de juegos portátil Playstation (PSP).
Educación: Squeak II
79
Squeak no pretende que los niños (y mayores) aprendan a programar, sino que programen para aprender.
Linea de Comandos: cat, more, less
84
Herramientas prácticas como cat, less, y head son ideales para visionar (y modificar) textos.
Juegos: Lugaru
86
Si pensabas que los conejitos eran blanditos y tiernos, es que no conoces a Lugaru, el conejo ninja.
WWW.LINUX- MAGAZINE.COM
ISSUE 52 MARCH 2005
73
LINUX USER • KTools: Klik
Distribución de Software con Klik
UN KLIK Klik nos trae la instalación cómoda al escritorio de KDE. POR TIM SCHÜRMANN
L
os sistemas Linux que corren directamente desde el CD son muy populares. Estas live distribuciones no solamente ayudan a atraer a nuevos usuarios hasta el mundo de Linux sino que además resultan útiles si se necesita reparar un sistema dañado. Cuando algo se estropea, puede que se vea en la situación en la que no todo lo que se necesita para arreglarlo está en el CD. Todo el mundo pasa por esto tarde o temprano y acabamos hartos de dependencias no resueltas y librerías perdidas sobre sistemas de ficheros de sólo lectura. Incluso si se consigue instalar la herramienta, no siempre se logra resolver el problema. También ocurre que los usuarios desean probar nuevos programas en sistemas de producción sin tener que pasar por una instalación completa. El proyecto Klik convierte todos estos sueños en realidad. Klik son las siglas de KDE-based Live Installer for Knoppix+Kanotix. Sus creadores han adoptado el diseño hecho tan popular por Apple. Los paquetes son típicamente arhivos especiales comprimidos que contienen todos los ficheros y librerías requeridas junto con la aplicación y algunos metadatos. Para instalarlo, simplemente se descarga el fichero de Internet y se deja en el escritorio; el sistema operativo arranca la aplicación almacenada en el archivo. El sistema oculta los procesos del usuario (Figura 1). Como no se trata de una instalacion complicada que consuma mucho tiempo ni es preciso extender los ficheros por todo el árbol del sistema de ficheros, pueden incluso instalarse diferentes versiones del mismo pro-
66
Número 17
grama. El sistema Linux básico permanece inalterado. Pueden incluso grabarse las aplicaciones en stick USB para tenerlas disponibles para una distribución live.
Contenidos del Kernel Klik requiere algunos preparativos antes de poder suarse: Suse Linux 10 (y Open Suse) y sistemas basados en Debian vienen con los pre-requisitos (ver el cuadro “Distribuciones Soportadas”). Tampoco olvidemos Knoppix y sus derivados, los cuales desencadenaron el desarrollo de Klik. Esta historia también explica por qué el sistema se encontraba disponible para el escritorio KDE solamente al principio. Gracias a numerosos contribuyentes, Klik corre ahora también en Gnome. Si su sistema Linux no se encuentra soportado directamente, el kernel deberá soportar al menos el sistema de ficheros Cramfs. Las fuentes del kernel típicamente disponen de este soporte en forma de módulo, pero puede compilarse estáticamente dentro del kernel. Lo mismo se aplica al dispositivo de bucle para montar los ficheros de imagen.
El Cliente Después de completar todos los prerrequisitos, puede escribirse en la línea de comando lo siguiente: wget klik.atekon.de/client/install -O- | sh. Con esto se descarga el script de instalación desde la página de inicio de Klik, y se instala el cliente Klik. En sistemas multiusuario este paso ha de llevarse a cabo por cada usuario que esté corriendo Klik, cuando no hay una instalación global actualmente. Si se está corriendo el script por primera vez, y no hay un superusuario, se requieren los siguientes comandos:
WWW.LINUX- MAGAZINE.ES
su sh klik-cmg-install-root
Esto añade unas cuantas líneas necesarias para Klik a /etc/fstab. Después de completar la instalación, aparece una ventana indicando que todo ha ido bien. A continuación, aparece Konqueror mostrando la página de inicio de Klik con un menú de todas las aplicaciones que utiliza Klik registradas con el proyecto. No existe ningún tipo de restricción para usar el navegador konqueror; para más detalles puede verse el cuadro “Otros Navegadores”.
¡Klik-éame! El script de instalación de Klik registra también un protocolo nuevo con Konqueror durante la instalación. Si luego se introduce una URL como klik://xvier, Konqueror pasa tu solicitud al cliente Klik, el cual descarga xvier de Internet y lo coloca en el escritorio, esto puede hacerse usando el directorio $HOME/Desktop. Si se comprueba el directorio, lo que se verá será un gran fichero. Pero si se hace click en el icono del fichero arrancará la aplicación oculta en dicho fichero.
Distribuciones Soportadas Las siguientes distribuciones soportan el sistema Klik: Suse Linux 10 (incluyendo Open Suse), Debian, Linspire, Ubuntu, Kubuntu, Kanotix y Knoppix. Fedora 4 está en tramitación. Gentoo y Mandrake/ Mandriva requieren un nuevo kernel ya que no soportan Cramfs. Las versiones actuales de Knoppix, Kanotix y la versión aumentada-SLICK de Open Suse http://www.opensuse.org/ (ver SUPER_KLIK) y CPX-MINI incluyen el cliente Klik.
KTools: Klik • LINUX USER
Otros Navegadores Klik soporta unos cuantos navegadores. Opera, la suite de Mozilla y su sucesor Firefox se configuran automáticamente con el script de instalación. Es necesario registrar el protocolo en los restantes casos, o si se tienen dificultades. La mayoría de los navegadores ofrecen un elemento de menú en algún lugar en las configuraciones o de las preferencias de diálogo. En Opera, por ejemplo, ésta es Preferences... Advancedtab, seguido de Programs. Después de localizar el elemento correcto se selecciona el protocolo klik y se asigna la aplicación .klik en el directorio de inicio.
Una búsqueda rápida en Internet, enlaces en la página de inicio del programa o el catálogo de la página de inicio de Klik nos informan de los programas representados en cada URL. En el momento en que se está escribiendo este artículo, se encuentran disponibles unas 4000 aplicaciones. Si se hace clic en un enlace se inicia la descarga, la cual irá seguida por el modelo descrito anteriormente. Si se muestra un mensaje que dice Error while trying to run program (esto es, error al intentar correr el programa), lo normal es que se deba a un error en la red. O bien la conexión a Internet se ha caído, o bien el servidor Klik está temporalmente no disponible. A juzgar por lo que se anunció en el foro de Knoppix, esto ocurre muy frecuentemente. Si se desea correr un servidor Klik propio, se aconseja leer el cuadro “Servidor Klik” para más detalles.
Bajo la Capota A excepción de los cambios puntuales al fichero /etc/fstab, ninguna de esas tareas requieren privilegios de superusuario. El
Servidor Klik El cliente Klik siempre entra a un servidor Klik basado en Internet, aunque no es mala idea correr un servidor propio, especialmente en intranets cerradas, resultando ser la mejor manera de asegurarse de que sus usuarios consigan las versiones correctas de los programas correctos. Para apuntar al cliente Klik al servidor, se busca la línea en el script install, la cual invoca a wget para recoger las recetas. Se cambia la línea para que refleje la dirección del servidor web, asegurándose de que este servidor web dispone de las recetas requeridas.
script de instalación solamente afecta al directorio de inicio del usuario. Pero si se comprueba el directorio de inicio para señales de la instalación de un cliente Klik, puede que no se vea el cliente a primera vista. Klik se compone de dos cortos script denominados .klik y .zAppRun. Los otros cambios afectan simplemente al fichero de configuración de KDE. Esta es la razón por la que Klik funciona aún sin una GUI. Cuando se arranca el script, pide el programa desde el servidor Klik. Si el programa existe, el servidor devolverá otro script. Ésta, concoida como “receta”, contiene detalles de dónde se encuentra disponible el paquete de binario y una descripción de cómo crear un paquete todo-en-uno para la distribución en cuestión desde los ficheros contenidos en el paquete. Este plan de construcción incluye detalles de resolución de dependencias. El producto finalizado hace referencia a un paquete. Hay ejemplos de recetas para seguir en [3] y [4]. Las librerías y recursos requeridos para correr el programa se encuentran almacenadas en el paquete. Para conseguirlo, los scripts Klik pasan Figura 1: Perspectiva de la arquitectura de Klik: el de contrabando los componentes navegador pasa el enlace Klik (1) al cliente, que del paquete para que no los vea el contacta con el servidor Klik (2). El servidor administrador de paquetes. Esto devuelve un script, denominado recipe (receta) (3), explica el hecho de que versones el cual será usado por el cliente para crear un diferentes de un mismo programa AppDir (4). Luego el directorio es empaquetado y pueden entenderse en una coexiscomprimido (5), para finalmente ser montado por tencia pacífica. el script .zApp (6). Como se habrá entendido, estos paquetes no se encuentran disponibles Debian. Y diferentes distribuciones bajo una forma lista para correr. Los vienen con entornos de software difepaquetes se montan justo-a-tiempo, es rentes. Como consecuencia de ello, las decir, son generados individualmente recetas no pueden ser iguales para todas cuando un usuario pide un paquete para las distribuciones. Incluso existe un una distribución específica. Esto no solaarchivo de paquete separado para Suse mente ahorra a los proveedores del serviLinux en [2], aunque ha estado inactivo cio de Klik mucho espacio en la web, durante muchos meses. sino que también significa que los desaExiste otro asunto relacionado con este rrolladores conservan el control de sus tema. Como la mayoría de las 4000 repaquetes de programas. cetas del servidor Klik fueron generadas Desafortunadamente, también existen automáticamente, este servidor dispone inconvenientes. Como cabría esperarse, de un gran número de paquetes que no la generación de paquetes para producdarán un paquete independiente. En este tos de software complejos es de todo caso se verá el mensaje This package menos trivial. Por ejemplo, Suse usa el contains no application. klik can't hanformato de paquete RPM, lo cual signifidle it (es decir, el paquete no contiene ca que ha de convertir los paquetes una aplicación. klik no puede manejar-
WWW.LINUX- MAGAZINE.ES
Número 17
67
LINUX USER • KTools: Klik
lo). La gente corre el servidor Klik quitando poco a poco los paquetes que causan este problema, aunque aún quedan muchas recetas inútiles cuando se está escribiendo este artículo.
Paquetes Empaquetados Para comprender lo que ocurre cuando se arranca una aplicación Klik, es preciso echar una ojeada a la estructura del paquete. Éste contiene un sistema de ficheros comprimido con todos los directorios de la aplicación y los ficheros en ellos contenidos. Klik usa el sistema de ficheros Cramfs o Zisofs. La figura 2 muestra una nítida perspectiva de cómo trabaja Klik. El constructor de paquetes recoge en primer lugar todos los ficheros y librerías para una aplicación en un directorio único, el cual se referencia como el AppDir (Application Directory o directorio de aplicación). Un script especial titulado wrapper reside en la raíz de cada AppDir. Cuando un usuario hace click en un AppDir, el sistema operativo no cambia al subdirectorio, en su lugar arranca el script. Como los directorios presentan dificultades para ser distribuidos equitativamente, el constructor de paquetes a menudo añade un AppDir a un paquete conocido, el cual puede ser un archico ZIP, o en el caso de Klik, una imagen. No existen distinciones claras entre los términos AppDir y paquete. Por ahí fuera, es habitual encontrar el uso de los vocablos tanto para describir lo mismo como cosas diferentes.
Arranque Directo El script .klik crea siempre un paquete con el sufijo .cmg y luego arranca la aplicación el paquete que contiene. Sin embargo, no hay necesidad de ello si el paquete ya existe en el escritorio. En este caso, simplemente se puede correr .zApp pasando como un parámetro el nombre del fichero del paquete al script. Si se prefiere, puede usarse Binfmt para registrar los paquetes como ficheros ejecutables: mount -t binfmt_misc none U /proc/sys/fs/binfmt_misc echo ' :CMG:E::cmg::U /pfad/zu/ .zAppRun: ' > U /proc/sys/fs/U binfmt_misc/register
68
Número 17
Las Golosinas El script .klik monta la imagen en /temp/app/1 a través del dispositivo loop. Si se hace clic sobre el paquete en konqueror, puede Figura 2: Cada paquete comprime su propio sistema de ficheros Linux accederse al con un script wrapper en la parte superior. El directorio con los ficheros contenido a está referido al AppDir. El directorio AppDir está comprimido para Klik. través del Tal y como muestra la figura, pueden coexistir múltiples paquetes. directorio. Si se arranca más de una petición de una entre las versiones. Cuando Klik monta aplicación, Klik asigna un número de los paquetes en el árbol del sistema de serie en vez de un 1. El segundo proficheros, podrían existir conflictos con grama residiría en /temp/app/2. predecesores instalados, dependiendo de Para permitir que los usuarios norlas dependencias que necesitan ser resueltas. males se beneficien de este diseño, el fichero necesita puntos de montaje en Conclusiones /etc/fstab. El script de instalación de Klik es limpio, elegante y está estructuraKlik crea inmediatamente las entradas do de manera simple, incluso bajo la al punto de montaje requerido. Si es capota . Esto hace de su instalación y de necesario, los usuarios pueden desemla distribución de los paquetes de softpaquetar el paquete usando herraware un juego de niños. Aconsejamos a mientas del sistema de ficheros: los desarrolladores echar un vistazo al /sbin/fsck.cramfs -x Myprg Myprg.cmg, sistema. y arrancar a continuación manualSin embargo, Klik no es apropiado mente el script wrapper: cd Myprg; para cualquier tarea. Las restricciones a ./wrapper. Esto significa que se puede ocho aplicaciones simultáneas y la falta modificar el paquete y luego regenede un administrador de paquetes con un rarlo introduciendo /sbin/fsck.cramfs mecanismo de actualización automático, Myprg/Myprg.cmg. han impedido que Klik sustituya a otras Tabla de Ocho Entradas ■ sistemas de paquete. El kernel de Linux actual restringe el número de dispositivos loop montados simultáneamente. En otras palabras, no RECURSOS pueden arrancarse al mismo tiempo más de ocho aplicaciones desde los paquetes. [1] Página de Inicio de Klik y almacén de Aunque este número podría incremensoftware: http://klik.atekon.de/ tarse (hasta 64 en nuestro ejemplo) a [2] Archivo con paquetes listos para cortravés de la opción linux max_loop=64 rer para Suse Linux 10: http:// o a través de una entrada para options opensuse.linux.co.nz/klik/10.0/ loop max_loop=64 en /etc/modules.conf, [3] Receta muestra para Scribus: http:// será dificíl correr un sistema de producklik.atekon.de/scribus.recipe.example ción basado en paquetes, una de las [4] Otra receta muestra con anotaciones: razones es atribuible a la caída del http://klik.atekon.de/architecture/ rendimiento. recipe.php Y por cierto, los AppDirs solamente [5] Foro de Klik en las páginas de Knoppueden alojar programas que se porten pix: http://www.knoppix.net/forum/ bien. Si una aplicación necesita repartir viewforum.php?f=17 ficheros de configuración a lo alrgo y [6] Información para desarrolladores: ancho del sistema, con Klik te estrehttp://klik.atekon.de/docs/ llarás. Además, no existe ninguna garan?page=A%20note%20to%20applicati on%20developers tía de que Klik ayude a evitar conflictos
WWW.LINUX- MAGAZINE.ES
Chat • LINUX USER
Chat basado en texto con Irssi
¿HABLAMOS?
El cliente chat de la consola Irssi es poderoso aun siendo frugal en el uso de recursos. Su capacidad para correr scripts hace que sea un gigante entre todas las herramientas de chat. POR MIRKO ALBRECHT
I
rssi es un cliente de chat basado en texto que se ejecuta desde la línea de comandos. No debe cometerse el error de pensar que se trata de una antigualla o de que tiene unas funcionalidades limitadas; de hecho, Irssi supera a muchos de sus contendientes ganando
fácilmente en lo que respecta a riqueza y usabilidad. Irssi es una herramienta de la línea de comandos, así que, en primer lugar se abre una consola y luego, para arrancar el programa, se escribe irssi. Se mostrará la ventana de estado, que es donde aparecen los textos del servidor y de ayuda. A continuación puede introducirse /connect irc.nombre_servidor.com para seleccionar el servidor IRC que se haya elegido. Seguidamente, para introducirse en una sala de chat se escribe /join #nombresala o /j #nombresala. Si uno se conecta a múltiples servidores, Figura 1: La página web de Irssi cuenta con numerosos consejos para el puede presionarse programa de chat basado en texto, incluyendo varios scripts y temas. [Ctrl]+[X] para
WWW.LINUX- MAGAZINE.ES
saltar de un servidor a otro (esto supone que aún nos encontramos en la ventana de estado). Cuando se entra en una sala de chat, automáticamente se cambia a otra ventana; la línea de estado nos dice el número de ésta. Dicha línea de estado nos ofrece, de izquierda a derecha, los siguientes detalles: [Hora][Tu_Nick U (+Parametrosusuario)]U [Número_Ventana:U #Nombresala U (+Parámetroscanal)]
Pulsando [Alt]+[Número_Ventana] se puede saltar entre ventanas (es decir, [Alt[+[1] lleva hasta la ventana de estado), o [Alt]+[Flecha] para cambiar a la ventana siguiente. Si se pulsa [AvPg] o [RePg] el texto se desplaza hacia arriba o abajo en la ventana.
Buenas Conexiones Antes de comenzar a explorar las opciones de ventana, configuraremos nuestro ordenador para que se conecte automáticamente a la red IRC cuando se arranca el programa. Para listar las redes IRC preconfiguradas se escribe /ircnet. Irssi conoce las redes más importantes
Número 17
69
LINUX USER • Chat
tales como Efnet, Ircnet, Dalnet y Freenode. Si se desea añadir una nueva red IRC, se introduce /ircnet add nombre. Irssi guarda los servidores con la siguiente sintaxis: /server add - ircnet U red dirección puerto
La opción -auto le dice que se conecte al servidor cuando se arranca el programa. Por ejemplo, si se desea configurar el acceso a irc-hispano.org, primero sería preciso establecer la red. Para ello, se escribe /ircnet add irc-hispano. A continuación se añade un servidor a la red irc-hispano: /server add -ircnet U irc-hispanoU thebe.irc-hispano.orgU 6667
Figura 2: La web posee temas para su descarga.
70
Número 17
Puede especificarse un canal de la siguiente forma: /channel add -auto U #sala red contraseña
De nuevo, Irssi puede usar la opción -auto para permitir conectarse automáticamente a un canal cuando se arranca el programa. El autocompletado de comandos (al igual que ocurre es Bash) es un efecto secundario positivo del almacenamiento de datos de esta manera. Supongamos que la conexión a irc-hispano se produce sin que se use la opción -auto; para encontrar una sala de chat se escribe /conn[Tabulador] ir[Tabulador]. Irssi lo ampliará para ofrecer /connect irc-hispano. Esto funciona muy bien con salas de chat preconfiguradas y /save almacenará las entradas en ~/.irssi/config.
Óptica Cuando se comienza a escribir en una sala de chat es preciso fijarse en unas cuantas cosas que podría desearse cambiar. Por ejemplo, la línea de estado en la parte inferior y la de asunto en la parte superior son muy difíciles de distinguir del texto de la ventana. Esto puede cambiarse si se instala un tema. Existen una gran variedad de temas coloreados para la consola Irssi en [2]. Se mueve el fichero descargado, nnombre.tema al directorio ~/.irssi, y luego se carga el tema a través del comando /set theme nombre.tema (Figura 2). Si se abren distintas salas de chat al mismo tiempo es fácil perder la ventana a la que pertenece cada una de las salas de chat. En Irssi, los scripts en Perl pueden solucionar éste y otros problemas, pudiéndose encontrar muchos ejemplos acerca de estos en la Web [3]. Así, puede usarse un script para integrar en Irssi el reproductor de mp3 basado en texto, Mp3blaster con Irssi, o para manejar URLs desde la sesión de chat a programas
WWW.LINUX- MAGAZINE.ES
externos, para añadir una simple función que crea una calculadora y otras muchas cosas. La barra de estado muestra los números de ventana de salas de chat en las que algo ha cambiado bajo [Act:]; esto puede suponer un problema si se dispone de un número considerable de salas de chat. Después de todo, ¿cómo se puede esperar que pueda recordarse el número de canal que está corriendo en la ventana número 8? Para presentar el nombre del canal junto con el número de ventana, se almacena el script chanact.pl [3] en ~/.irssi/scripts y se ejecuta el comando /script load chanact.pl para añadir el script. Si no se desea ejecutar el script cada vez que se arranca Irssi, lo copiaremos en ~/.irssi/scripts/autorum.
Listas de Nicks Otra cosa que pueden echar de menos los veteranos de los chats es una lista de nombres de usuarios en el lado derecho de la ventana. Aunque se puede utilizar el comando de IRC /name para obtener una lista de usuarios, Irssi dispone de nuevo de una solución gráfica. Se descarga el script de Perl nicklist.pl [4], versión, 0.4.6, y se instala como ya se ha descrito anteriormente. No es mala idea crear una copia del script en ~/.irssi/scripts/autorum. Se necesita el administrador de ventanas de la consola screen (que debería venir preinstalada con la mayoría de las distribuciones) para añadir una lista de nicks en la parte lateral de la pantalla de Irssi. Se arranca el programa escribiendo screen irssi y a continuación, para cargar el script, /script load nicklist.pl. Finalmente se habilita la lista escribiendo /nicklist screen (Figura 3). Puede modificarse el ancho de la barra introduciendo /set nicklist_width: y se experimenta con un número entre el 10 y el 15 para establecer la anchura. /set/nicklist_automode screen le dice a la herramienta que ofrezca una lista de nicks la próxima vez que arranque el programa. El único detalle nimio es que el script no parece soportar el modo de ventana dividida, de modo que irssi tiende a destellar de vez en cuando cuando se intenta usar el cliente en una sesión remota. Algunas salas de chat alojan más de 100 usuarios al mismo tiempo. Aunque no todos pueden estar escribiendo al mismo tiempo, no hay manera de que quepan en la lista de nicks. El comando /nicklist scroll puede servir de ayuda en este sentido, y
Chat • LINUX USER
Figura 3: Una lista de nicks ayuda a seguir la trayectoria de la sesión de chat. (Ver la lista de nombres en la esquina superior derecha de la pantalla). Para añadir la lista, se descarga y habilita el script de Perl.
puede asignarse un atajo de teclado al comando. Ésta sería la forma de hacerlo: /bind tecla command U nicklist scroll -3 /bind tecla command U nicklist scroll +3
Alternativamente, se abre el fichero ~/ .irssi/config en el editor de texto que se prefiera y se añaden las siguientes líneas al final del fichero: keyboard = ( { key = "meta2-P"; U id = "command"; U data = "nicklist scroll -3"; }, { key = "meta2-Q"; U id = "command"; U data = "nicklist scroll +3"; } );
En el ejemplo se mapean las teclas [F1] y [F2]. Si se prefiere usar otras teclas distintas, en [5] existe una tabla que contiene diversos nombres para varias teclas de función.
Consejos y Trucos Existen más trucos que ayudan a modificar a Irssi según los requerimientos necesarios. Es un buena idea echar un vistazo a los scripts en [3]. Se descubrirán todo tipo de curiosidades, con distintos grados de utilidad. El hecho de que el programa se ejecute en una ventana screen resulta práctico. Una vez que se arranca sobre X, permanecerá en el fondo incluso si se cierra el terminal de ventana inadvertidamente o de forma
Figura 4: Si se escribe /help en la ventana de estado se consigue ver la lista de comandos (además existen un gran número de páginas de ayuda en la web).
deliberada (por ejemplo, abandonando KDE/Gnome). Usar screen es bastante complicado, pero la siguiente línea de comandos puede ser de ayuda: alias irssi=U 'if pgrep irssi;then screen -x U irssi;else screen -S U irssi irssi;fi'
Este alias se puede añadir al fichero .bashrc en el directorio home. Lo que hace este comando es arrancar Irssi en una ventana de screen y comprueba que se está ejecutando el cliente. Si el programa aún está ejecutándose, el comando continuará con la sesión actual. Irssi permite definir atajos de teclado para comandos complejos con innumerables parámetros y opciones. Existen dos tipos de comandos: los que se corren con bastante frecuencia, pero en variedad de escenarios, y aquéllos otros que necesita correr cada vez que contacta con el servidor. Puede usarse la opción autosendcmd para manejar la última categoría. Puede usarse un comando de este tipo para registrar el nombre de nick propio con Nickserv. El que sigue añade esta opción: /ircnet add -autosendcmd U "/^msg nickserv identify U Contraseña; wait -freenodeU 2000" freenode
El comando contacta con el servicio de Nickserv en la red Freenode. Comandos frecuentes requieren un método diferente: por ejemplo, /msg chanser set #nombresala guard off, arranca
WWW.LINUX- MAGAZINE.ES
o apaga el bot del ChanServ, o lo que es lo mismo, el operador de canal automático. Es posible usar un alias para definir un parámetro más corto, como sigue: /alias BOTOFF U "msg chanserv set U #nombresala guard off"
ahora, escribiendo /botoff se eliminará el bot del ChanServ.
Conclusiones El cliente de chat basado en texto Irssi es una herramienta muy poderosa y, gracias a los scripts de perl, se le puede atribuir una extensibilidad casi ilimitada. Este programa es una buenísima elección si se disfruta trabajando en la línea de comandos. El volumen completo de comandos y las configuraciones pueden llegar a intimidar a más de uno, más aún si se echa un vistazo a los scripts que controlan a los clientes que comparten ficheros o al lector de noticias. Pero que nadie se asuste: cada cual puede decidir qué fun■ ciones de Irssi puede usar.
RECURSOS [1] Irssi download: http://irssi.org [2] Temas de Irssi: http://irssi.org/themes [3] Scripts de Irssi: http://irssi.org/scripts [4] Script de la lista de nicks: http:// wouter.coekaerts.be/site/irssi/nicklist [5] Mapeado del teclado de Irssi: http:// wouter.coekaerts.be/site/irssi/ keybindings
Número 17
71
LINUX USER • Desktopía: Wmii
Una mirada al Administrador de Ventana Wmii
SÓLO PARA EXPERTOS Si prefieres gobernar el escritorio desde el teclado, te aconsejamos que le eches un vistazo del potente administrador de ventanas Wmii. POR NICO GOLDE
W
IMP (“Windows, Icons, Menus, Pointing device”) es un paradigma común de interacción con GUIs. Incluye menús de control, ventanas y coloridos botones que se señalan y en los que se hace clic. Según Anselm Garbe, el creador de Wmii (Window Manager Improved 2), ese paradigma es ineficiente y ha quedado obsoleto. Wmii (Figura 1) es una completa revisión del administrador de ventanas Wmi. Wmii soporta controles de teclado para todo, al igual que ocurriera con su predecesor Wmi. Este extensivo sistema de control desde el teclado hace que no sea preciso el uso del ratón, aunque si se desea puede usarse.
Diseño Los administradores de ventana basados en teclado existen desde hace años, y
72
Número 17
Wmii combina los atributos de desarro llos tan venerables y populares como Ratpoison [1], Ion [2] y Larswm [3]. Por ejemplo, usa múltiples formatos y pestañas. Aunque dispone de una característica nueva: Wmii puede ser controlado a través de un sistema de ficheros virtual basado en Sockets. El administrador de ficheros tiene también una estructura modular. Wmibar proporciona la barra de estado y Wmimenu el menú. Wmikeys maneja los atajos de teclado, Wmifs es reponsable del sistema de ficheros y Wmir administra la manipulación del sistema de ficheros.
Instalación y Configuración Para la instalación se necesita el paquete wmii-2.tar.bz2, que se encuentra disponible en el área de descarga de la página de inicio del proyecto Wmii [4].
WWW.LINUX- MAGAZINE.ES
Los usuarios pueden modificiar el sitio basado en Wiki, que también ofrece una gran variedad de paquetes para Debian, Gentoo y Arch Linux. Para desempaquetar el sistema, se ejecuta el comando tar xvzf wmii-2.tar.gz. Este paso crea un subdirectorio wmii-2 que contiene el fichero de configuración config.mk, que puede ser modificado para que refleje las características del entorno. Wmii prescinde deliberadamente de un script configure, aunque en la mayoría de los casos los valores predefinidos funcionan bien. Para compilar e instalar el programa se escribe make y make install. Los únicos requerimientos son el compilador de C, GCC, y los ficheros de cabeceras de X (los usuarios de Debian necesitarán el paquete libx11-dev, que Suse 9.3 denomina xorg-x11-devel). Para arrancar el administrador de ventanas, los usuarios de Debian pueden crear en sus directorios de inicio el fichero .xsession e introducir las siguientes líneas: #!/bin/sh exec /usr/local/bin/wmii
Desktopía: Wmii • LINUX USER
Figura 1: Wmii con un sistema de estadísticas y un bosque lúgubre.
Para añadir Wmii a la lista del administrador de contraseñas estándar en Suse 9.3 se crea el fichero wmii.desktop en /usr/share/xsessions, y se suman a ese fichero las líneas siguientes: [Desktop Entry] Encoding=UTF-8 Type=XSession Exec=wmii TryExec=wmiiwm Name=wmii Comment=U window manager improved 2
Puesta en Marcha Cuando Wmii se arranca por primera vez, aparece una ventana con un tutorial. Se aconseja leerlo detenidamente antes de comenzar a presionar teclas (Figura 2). [Alt]+[T] abre una ventana de terminal y [Ctrl]+[Alt]+[Y] crea nuevos escritorios (o “páginas”). Es posible saltar entre escritorios pulsando [Alt]+[H]. Con [Alt]+[Shift]+[P] nos posicionamos en el modo paginador con el que se obtendrá una perspectiva de los escritorios activos y permitirá cambiar directamente a un escritorio. Para cerrar una ventana presionamos [Ctrl]+[Alt]+[C]. El formato por defecto se denomina “tiled” (puede verse en el cuadro adjunto “Formatos”), y como es de esperar, las ventanas comparten automáticamente el espacio disponible en el escritorio. Pulsando [Alt]+[Enter] se cambia la ventana seleccionada que pasa de ser de tamaño pequeño a grande, esto es lo que Wmii llama “zooming”. Si se necesita una visión a pantalla completa temporal,
Figura 2: Wmii está preconfigurado cuando se arranca por primera vez. Un tutorial te ayuda a comenzar con el administrador de ventanas de Wmii controlado por teclado.
puede presionarse [Alt]+[M] para maximixar la página. Cuando se desee trabajar con iconos se procede de esta misma manera. [Alt]+[Tab] mueve el tema actual a la ventana siguiente. La barra de estado ocupa la parte inferior de la pantalla. Representa el número del escritorio actual seguido de una letra que es la abreviatura del formato y otra
Formatos Wmii proporciona una gran variedad de formatos de pantalla aplicables a un escritorio virtual. Formato Tiled Este formato fue implementado originalmente en Larswm. Ofrece una ventana con una gran parte del espacio del escritorio, y las otras ventanas comparten el espacio sobrante (Figura 3). Puede habilitarse presionando [Alt]+[Shift]+[T]. Formato Grid Se obtiene pulsando [Alt]+[Shift]+[G]. Asigna cantidades de espacio iguales a cada ventana y dispone las ventanas en una malla (Figura 4). Formato Maximizado Para maximizar todas las ventanas en el esritorio se pulsa [Alt]+[Shift]+[M], a continuación con [Alt]+[Tab] es posible navegar entre ventanas. Formato Flotante Este formato es uno de los favoritos de los administradores de ventanas y de entornos de escritorio. Permite a distintas aplicaciones elegir su propio tamaño de ventana. Este es el formato que se necesita para programas de manipulación de imágenes como Gimp.
WWW.LINUX- MAGAZINE.ES
letra para el modo de atajo actual (n para “normal”, r para “resize” – redimensionar – , m por “move” y b por “bare” – simple --). Justo al lado se encuentra el botón www que arranca un navegador cuando se hace clic en él. Este botón es configurable sin restricciones, pero tiene un atractivo truco: si se hace clic con el botón derecho www abre una búsqueda en Google basada en la selección de cualquier programa. Si se hace clic con el botón central del ratón, Wmii interpreta el texto seleccionado como una URL. La fecha y el sistema cargados se encuentran a la derecha de la barra de estado. También aquí es donde se presenta la salida del programa, lo cual permite ver los resultados de los scripts que se escriben. Presionando [Ctrl]+[Alt]+[P] presenta una línea de comandos en la barra de estado, permitiendo la llamada a programas externos y proporcionando la realización del comando. Si se presiona [Ctrl]+[Alt]+[A] se consigue una función similar para los comandos de control del administrador de ventana interno. En Wmii los comandos direccionales usan las teclas [H], [J], [K] y [L] (igual que en Vi), donde [H] representa derecha, [J] abajo, [K] para arriba y [L] para izquierda. Puede usarse el teclado para expandir las ventanas. Para ello, se pulsa [Ctrl]+[Alt]+[R] y una de las teclas direccionales. Para abandonar el modo expandido pulsaremos [Esc] al estilo Vi. Como se habrá podido comprobar hasta ahora, Wmii posee un número de modos que se parecen a los que presenta el
Número 17
73
LINUX USER • Desktopía: Wmii
Figura 3: El formato tiled de Wmii, que se habilita presionando [Alt]+[Shift]+[T]. El menú interno se muestra abajo del todo.
Editor Vi. También dispone de un modo que permite mover ventanas, para ello se pulsa [Ctrl]+[Alt]+[M]. Nuevamente, usando las teclas direccionales, podrá indicarse al programa la dirección en la que ha de moverlas.
Sistema de Fichero Virtual Wmii tiene un sistema de fichero virtual (VFS) que permite controlar el administrador de ventanas a través de comandos y scripts, igual que Procfs en Linux. De hecho, los atajos de teclado implementan comandos que usan VFS bajo la capota. Para leer el VFS y escribir en él será preciso wmir, que es parte de la distribución. Los parámetros de la línea de comandos
Tabla 1: Importantes Atajos Wmii Atajo
Significado
[Alt]+[Y]
Abre un nuevo escritorio
[Alt]+[H],[L]
Salta entre ventanas
[Alt]+[T]
Arranca un terminal
[Strg]+[Alt]+[C]
Cierra una ventana
[Strg]+[Alt]+[A]
Modo de comando interno
[Strg]+[Alt]+[P]
Modo de comando externo
[Strg]+[Alt]+[R]
Cambia el tamaño de la ventana
[Strg]+[Alt]+[M] Mueve una ventana [Alt]+[D]
Separa una ventana
[Alt]+[A]
Adjunta una ventana
[Alt]+[Tab]
Navega entre ven tanas
[Strg]+[Alt]+[Q]
Salir
74
Número 17
read y write leen y escriben, mientras que create permite definir nuevas entradas, como ficheros y directorios. De este modo, wmir read/ mostrará el directorio raíz del sistema de ficheros. VFS requiere de algunos ajustes, pero una vez entendidos, es un placer usarlo. Para aplicar un color diferente a un marco de ventana
se escribe lo siguiente: wmir write /wm/page/sel/mode/U sel/sel-style/bg-color "#FF00FF"
El comando que sigue maximiza la ventana actual: wmir write /wm/page/sel/ctl U "select zoomed"
Modos Pestaña El modo pestañas presenta distintas ventanas (aplicaciones) en un único marco, y permite navegar entre pestañas. Para usar este modo se ha de abrir el marco actual para permitirle contener distintas ventanas. Para hacerlo, se presiona [Alt]+[U]. Si a continuación se arranca el terminal, con [Ctrl]+[T], la ventana de terminal aparecerá en el mismo marco (para reflejarlo se divide la barra de título del marco). Para navegar entre las dos ventanas se pulsa [Alt]+[Shift]+[Tab] en lugar del atajo de teclado normal. Como el solapamiento es un modo como cualquier otro, la función funcionará en combinación con cualquier tipo de formato. Con [Alt]+[Shift]+[U] se cierra de nuevo el marco para evitar que se abran nuevas ventanas en el marco.
figuración en /usr/local/etc/wmii. Puede iniciarse copiando el directorio completo a ~/.wmii. Así se obtienen los ficheros bar, keys, menu, rc.conf, status.sh, wm y un directorio llamado action. Los ficheros poseen scripts de shell normales. El script bar se ocupa de la barra de estado; keys maneja los atajos de teclado, menu controla el menú de comandos internos y externos, wm es el administrador de ventanas mientras que status.sh crea la salida de la barra de estado. El fichero más importante para nosotros es rc.conf (Listado 1): puede usarse para modificar configuraciones tales como el color de las ventanas y el fondo de pantalla. En el listado 1, las líneas 01 a la 18 modifican la apariencia del administrador de ventanas mediante la configuración de variables de la shell, las cuales se encuentran referenciadas por los scripts de la shell a los que se ha hecho referencia previamente. Por ejemplo, para establecer el fondo de pantalla se cambia el valor de la variable WALLPAPER en la línea 16 como sigue: WALLPAPER=U "Esetroot -scale -center U /home/test/.wmii/wallpaper.png"
También pueden usarse estos ficheros para modificar los atajos de teclado para las teclas direccionales. MODKEY (Línea 19) define la tecla modificador que inicia un comando. La configuración en el Listado 1 usa mod1, la cual mapea la tecla [Alt]. Si prefiere usarse una combinación diferente será necesario modificar el fichero de teclas. Para realizar cambios temporales, se ejecuta el comando wmir. Para que los cambios sean permanentes hay que
Configuración de Usuario Específica La instalación predeterminada sitúa los ficheros de con-
Figura 4: Una vista en mall asigna espacios iguales a cada ventana y dispone las ventanas en una cuadrícula.
WWW.LINUX- MAGAZINE.ES
LINUX USER • Desktopía: Wmii
añadirlos a los ficheros de configuración. Para aplicarlos en el momento, simplemente se recargan los componentes individuales antes de rearrancar el administrador de ventanas. El fichero rc (de “run command”, o lo que es lo mismo ejecutar comando) es un simple script init que llama a los parámetros de la línea de comandos típicos star, stop y restart, y ayuda a rearrancar Wmii. Así que, escribiendo el comando ./rc restart, Wmii se reinicializará al momento. El directorio action tiene un script de la shell para cada opción. Siempre que se presione [Ctrl]+[Alt]+[A] para correr un comando desde el menu action o se pulsa una combinación de teclas, lo que realmente se está haciendo es lanzando un script desde el directorio action. El fichero keys, por ejemplo, nos dice el script que se está arrancando en ese momento: si se presiona[Alt]+[T] corre el script term. Si se prefiere usar aterm en vez de xterm, simplemente se modifica el script term y se refleja lo que se haya elegido. Para modificar los atajos de teclado, sólo se modifica el fichero keys. El contenido es lo suficientemente auto-explicativo, aunque los cambios a realizar requieren de una buena dosis de paciencia. Los scripts usan principalmente el programa wmir, el cual permite modificar el administrador de ventanas para adaptarlo a las necesidades propias. Por ejemplo, el comando siguiente: @LI wmir write ßß \bar\default\70_status\ßß label\text “¡WMII mola!”
mostrará en la barra de estado la cadena “¡WMII mola!” hasta que se actualice el script status.sh. Esta útil característica permite a los usuarios presentar la salida de casi cualquier programa de la línea de comandos en la barra de estado.
Más Información Además de la documentación estándar, wmirefcard abre un documento PDF con los atajos de teclado más importantes. La página de inicio del proyecto Wmii [4] dispone de una gran cantidad de información útil, incluyendo una introducción a Wmii para principiantes [5] escrito por Steffen Liebergeld (actualmente se encuentra disponible en inglés, alemán y español). Como el sitio está basado en Wiki, se añaden nuevos elementos a diario y probablemente se descubrirán varios temas Wmii, así como programas adicionales escritos por usuarios de Wmii. También existe un canal activo #wmii en el servidor irc.oftc.net.
El Futuro Wmii-3 se publicó en noviembre de 2005 y parece que se van a introducir algunos cambios interesantes. Hasta que no se encuentre disponible la nueva versión, el proyecto publica instantáneas del software a intervalos regulares. Las características más importantes y novedosas son la compatibilidad 9P2000 [6] para el sistema de ficheros virtual y una configuración dramáticamente simplificada gracias a la nueva shell (9rc). Wmii-3 viene también con un nuevo formato de “columna”, basado en el entorno de programación de Rob Pikes Acme [8] para Plan 9, que reemplaza e
integra formatos anteriores, tales como “tiled”, “grid” y “maximized”. Plan 9 es un sistema operativo al estilo Unix desarrollado por los laboratorios Bell Labs. Este sistema operativo se publicó en el 2002 bajo una licencia libre. Trata todos los recursos como ficheros (ordenadores, usuarios, dispositivos, etc.) y usa un protocolo estándar, el 9P, para direccionarlos. El sistema de fichero proc en Linux se inspiró para esta propuesta y usa algo parecido. 9p2000 es una versión revisada y extensamente mejorada del protocolo del Plan 9, 9P, que se publicó en el año 2002 con la Cuarta Edición del Plan 9. La compatibilidad con 9P2000 soporta el montaje del sistema de ficheros de Wmii sobre el sistema de ficheros existente como kernel 2.6.14, y permite a los usuarios configurar programas como cp, mv, echo o vi via Wmii. Esto, a su vez, cambia la necesidad de la herramienta wmir en Linux (aunque wmir se conservara para evitar que se estropee la compatibilidad hacia abajo con sistemas BSD y otros sabores de Unix). El kernel 2.6.14 es el primero en soportar el protocolo 9P. La dramática simplificación de la configuración cuenta con el apoyo de un porte a Unix de las podeross herramientas de Plan 9, en particular de la shell Rc [8], además de herramientas adicionales para scripts de la shell que el proyecto Wmi empaqueta para proporcionar compatibilidad con 9rc. La ventaja de la nueva shell de Plan 9 Rc es que está enlazada estáticamente y corre scripts de la shell mucho ■ más rápidamente que Bash.
RECURSOS [1] Ratpoison: http://www.nongnu.org/ ratpoison
Listado 1: rc.conf 01 TAB_HEIGHT=16
14 NORMAL_FG_COLOR="#FFFFFF"
02 BAR_HEIGHT=16
15 NORMAL_BORDER_COLOR="#BBBBBB"
[2] Ion: http://modeemi.cs.tut.fi/~tuomov/ ion
03 BORDER_WIDTH=3
16 WALLPAPER="xsetroot -mod 2 2 -bg #666699 -fg #888888"
[3] Larswm: http://home.earthlink.net/ ~lab1701/larswm
17 DEFAULT_LAYOUT=tiled max, grid o vsplit
[4] Homepage Oficial de Wmii: http:// wmii.de
04 SELECTED_BG_COLOR="#666699" 05 SELECTED_TEXT_SIZE=10 06 SELECTED_TEXT_ALIGN=center 07 SELECTED_TEXT_FONT="fixed"
# tiled,
18 TILE_WIDTH=60
09 SELECTED_BORDER_COLOR="#9999CC"
19 MODKEY=mod1 # teclas de modificación utilizado por el enlace a teclas por defecto
10 NORMAL_BG_COLOR="#888888"
20 NORTHKEY=k
11 NORMAL_TEXT_ALIGN=center
21 SOUTHKEY=j
12 NORMAL_TEXT_FONT= "fixed"
22 WESTKEY=h
13 NORMAL_TEXT_SIZE=10
23 EASTKEY=l
08 SELECTED_FG_COLOR="#FFFFFF"
76
Número 17
WWW.LINUX- MAGAZINE.ES
[5] Introducción a Wmii: http://wmii.de/ index.php/WMII/BeginnersGuide [6] Introducción a 9P: http://www.cs. bell-labs.com/sys/man/5/INDEX.html [7] Shell de Rc: http://www.star.le.ac.uk/ ~tjg/rc/misc/td [8] Entorno de programación Acme: http://www.cs.bell-labs.com/sys/doc/ acme/acme.ps
Películas PSP • LINUX USER
Con Linux se pueden cargar películas en una consola de juegos portátil Playstation (PSP). POR KRISTIAN KISSLING
unque a Sony no le gusta admitirlo, una de las razones del éxito de la Playstation Portátil (PSP) es que los usuarios más creativos pueden enseñar nuevos trucos a su consola de juegos. Uno de dichos trucos permite copiar películas en la PSP y poderlas llevar encima cuando se viaja. Esto es posible gracias a otros productos de Sony, como la “Memory Stick PRO”, que fue diseñada para almacenar música e imágenes y que también permite grabar películas. Evidentemente Sony preferiría vender los DVDs de las películas, pero unos cuantos desarrolladores y programadores con inventiva han descubierto cómo convertir las películas a formato PSP. Los sticks con dos o incluso cuatro GB de capacidad de almacenamiento permiten disponer de bastante espacio para almacenar una película completa. Para hacerlo se necesita el firmware “correcto” (esto es, la versión antigua) además de la aplicación que permita convertir las películas a formato PSP.
A
copiar películas en sus consolas. El firmware se encuentra disponible desde los sospechosos habituales en [1], y se pueden encontrar los consejos y trucos para la descarga e instalación en [2]. Pero hay que tener cuidado con un malware muy malicioso conocido como “Troyan.PSPBrick”, el cual revienta los intentos de cargar un software de versión más antigua por parte de usuarios, destruyendo el firmware existente antes de cargar la vieja versión, lo que hace que la consola se vuelva completamente inservible. Sony ha puesto fin de manera temporal a esta práctica con la introducción de la versión 2.01 de firmware: se trata de un antivirus que trata todos los intentos de instalar viejo firmware, como ataques y que los bloquea. En el momento en el que se escribe este artículo, sólo es posible volver a cargar de la versión 2.0 a la 1.5 o a la 1.0, pero es aconsejable asegurarse de comprobar el firmware con un antivirus actualizado antes de comenzar la instalación.
Jugando con el Firmware
Fotos y Música
Recientemente Sony ha introducido un nuevo firmware para intentar evitar algunas de las aplicaciones más creativas que mencionábamos antes. Como reacción, los usuarios han comenzado a cargar en sus PSPs las antiguas versiones 1.0 y 1.5 para continuar disfrutando de la posibilidad de
Sony permite que los usuarios transfieran determinado tipo de contenidos a la PSP. El manual explica cómo cargar fotos y musica usando un stick de memoria. El stick conecta al puerto USB integrado, el cual proporciona a los usuarios de Linux una puerta de entrada.
WWW.LINUX- MAGAZINE.ES
Se emplea un cable USB para conectar el ordenador a la PSP, a continuación se abre una ventana de consola y se entra como superusuario. Se escribe tail -f/var/log/messages para descubrir el fichero de dispositivo que usa Linux para montar la PSP en el sistema. La primera vez que se intenta posiblemente no se tenga éxito, ya que previamente se necesita habilitar el modo de transferencia USB en la PSP. Para ello se pulsa en la consola el botón HOME para entrar en el menú principal. Se presiona el cursor izquierdo para movernos al icono de la maleta con la etiqueta Settings a la izquierda del menú principal. Las teclas cursores arriba y abajo nos permiten navegar por el menú Settings hasta que se vea el icono USB Connection. Se pulsa la parte derecha (x) para habilitar el modo USB para la consola.
Figura 1: Tras establecer la conexión USB entre la PSP y Suse, Suse automáticamente inicia una ventana mostrando los directorios en la memoria.
Número 17
77
LINUX USER • Películas PSP
Ahora se comprueba el diálogo tail en el ordenador: Nov 14 15:24:07 U linux kernel: sda: sda1
Esta línea nos dice que Linux usa el fichero de dispositivo /dev/sda1 para direccionar la PSP. Suse arranca automáticamente una ventana Konqueror presentando los ficheros de la Playstation (Figura 1), con lo que ya se puede trabajar con estos ficheros como sobre cualquier stick USB. Los usuarios de Debian pueden montar la PSP manualmente escribiendo como superusuario lo siguiente: mkdir /mnt/psp mount -t auto /dev/sda1 /mnt/psp
Probaremos nuestra conexión copiando unas cuantas fotos al stick de memoria. La PSP sólo reconoce imágenes si se encuentran en el directorio apropiado. Puede usarse Konqueror o una shell para crear dicho directorio. mkdir /mnt/psp/PSP mkdir /mnt/psp/PSP/PHOTO
A continuación se mueven las fotos al directorio PHOTO que se ha creado. cp testfoto.jpg U /mnt/psp/PSP/PHOTO
Es muy importante usar letras mayúsculas para nombres de carpetas y ficheros, ya que de lo contrario la consola no verá las imágenes o películas. Desafortunadamente, la PSP solamente presenta imágenes bajo formato JPG, por lo que será imprescindible convertir primero cualquier imagen PNG o GIF. El procedimiento para copiar ficheros de música con formato MP3 es similar, y necesitaremos nuevamente un directorio apropiadamente nombrado: mkdir /mnt/psp/PSP mkdir /mnt/psp/PSP/MUSIC
Podemos crear subdirectorios para álbumes o géneros si los necesitamos, por ejemplo, SALSA o JAZZ.
Y…¡Acción! Antes de comenzar a copiar la película a la PSP es preciso completar unos cuantos
78
Número 17
pasos preparatorios. Otra vez los directorios necesitan de convenciones especiales: se crea primero un directorio llamado MP_ROOT en el directorio superusuario de la PSP, y a continuación un subdirectorio 100MVN01. Este es el directorio específico para las películas. Para que éstas puedan correr en la consola deberán poseer la resolución, formato y el marco adecuados. Afortunadamente, la herramienta Ffmpeg dispone de una opción que permite simplificar la conversión de Figura 2: Los Simpsons muestran sus trucos en la películas al formato PSP. PSP. Hay que asegurarse de usar letras mayúsulas Se necesita una versión Ffmpeg para el nombre del fichero. desde el CVS, que requiere una instalación Faac. Se comienza descargando Este comando convierte el fichero AVI faac-18102004.tar.gz del sitio web en [3] y a a un fichero titulado M4V00001.MP4. continuación se instala el paquete. Los parámetros misteriosos especifican Para desempaquetar el archivo se escribe que la PSP puede manejar resoluciones tar xvfz faac-18102004.tar.gz, mediante este (-s) de 320 por 240 pixels como mápaso se cambia al subdirectorio creado, ximo y el rango de bit de video (-b) no luego con chmod u+x bootstrap se modifidebe exceder los 768 kbps. Si se seleccan los permisos para el script bootstrap. ciona un rango de marco (-r) diferente Cuando se escribe sh./bootstrap para correr de 14 985 se tendrán problemas. La freel script, dirá qué ficheros son necesarios cuencia sample de audio (-ar) ha de ser para la compilación, y después de suminisde 24 000 Hz, y el rango de bit de trar los ficheros perdidos, se crea un fichero audio (-ab) de 32 kbps. Si Ffmpeg se configure. A continuación puede seguirse el queja de librerías perdidas, hay que procedimiento estándar para completar la situarse como superusuario, y luego se compilación e instalación: ./configure, añaden los paths /usr/lib y make, make install. /usr/local/lib al fichero /etc/ld.so.conf, Con esto se finaliza la instalación de se guardan los resultados y se corre de Faac. Ahora puede descargarse Ffmpeg de nuevo ldconfig. la CVS: El paso siguiente será copiar la película a la PSP. Para ello se escribe cp cvs -z9 -d:pserver:U M4V00001.MP4 anonymous@mplayerhq.hu:U /mnt/psp/MP_ROOT/100MVN01. Es /cvsroot/ffmpeg co ffmpeg estrictamente necesario asegurarse de usar mayúsculas. Se necesitará instalar la herramienta cvs En la consola, se cambia a la entrada usando el administrador de paquetes de la Video en el menú principal, y para distribución que se posea. Se cambia al arrancar la película se pulsa (x) dos ■ subdirectorio ffmpeg y se configura el proveces (Figura 2). grama introduciendo ./configure --enable-shared --enable-faac. Para compleRECURSOS tar la instalación se corren make y make [1] Wiki en PSP: http://en.wikipedia.org/ install. wiki/PlayStation_Portable_homebrew Ahora es el momento de tomar un [2] “Downgrading” la PSP: http://www. fichero AVI y convertirlo en una película hackaday.com/entry/ PSP. Se nombrará el fichero como test.avi, 1234000687060851/ que proporciona el siguiente comando Ffm[3] Web de FAAC: http://www. peg: ffmpeg -i test.avi -f U psp -r 14.985 -s 320x240 -b U 768 -ar 24000 -ab 32 U M4V00001.MP4
WWW.LINUX- MAGAZINE.ES
audiocoding.com/modules/ mydownloads/ [4] Integración KDE: http://www. kde-apps.org/content/show. php?content=31679
Educación • LINUX USER
Squeak, Squeak, la herramienta herramienta de de los los niños
ESTO ES LO QUE HAY
Es el momento de preguntarnos si Squeak es la herramienta que facilitará un cambio copernicano en la escuela. Y de intentar responder a una pregunta tan ambiciosa examinando primero actividades creadas con Squeak. POR JUAN RAFAEL FERNÁNDEZ GARCÍA
E
LA AUTORA
n el número anterior habíamos empezado a examinar qué es Squeak y las razones teóricas que explican sus características. Squeak no es ninguna anécdota elitista (ya veremos que entre los lenguajes de programación también hay guerras religiosas y la acusación de elitismo se oye con frecuencia), no es uno más de los cientos de proyectos que nacen y mueren continuamente en el Juan Rafael Fernández García es socio de OFSET, 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.
mundo del software libre. La herramienta, o entorno, o mundo o conjunto de mundos, está aquí para quedarse: tiene detrás al MIT, al parecer va a ir integrado (junto a Scratch[1]) en los portátiles de a cien dólares, lo tenemos de serie en las distribuciones educativas españolas, e instalado en cientos de aulas con Linex, las Guadalinex educativas, MAX… Y, por último pero no menos importante, se está invirtiendo con seriedad y coherencia en el desarrollo de materiales para Squeak y en la traducción de otros[2]. Sin embargo nos quedaba pendiente responder a la pregunta clave: ¿cumple su promesa, responde o se acerca a responder a las ambiciosas expectativas que despierta? Squeak pretende, no que los alumnos aprendan a programar, sino que los alumnos programen para aprender, ¿es esto absurdo? ¿o implica un esfuerzo que escapa a las posibilidades de nosotros los profesores?
WWW.LINUX- MAGAZINE.ES
¿Clases poderosas? Comenzaremos nuestro estudio examinando qué nos proporciona Squeak; empezaremos por lo que hay hecho, examinando actividades Squeak correspondientes a distintas materias. Recordemos el modo como Kim Rose y B. J. Conn, en su Ideas poderosas en el aula[3], interpretaban el valor pedagógico del famoso ejemplo del coche controlado por los alumnos. «El hecho de que los niños se den cuenta de que la dirección de su coche es un número es una idea poderosa. Lo mismo que ver la localización del coche en el mundo representada con números es muy significativo. A través de la exploración y el juego, comprobarán cómo cada valor puede ser positivo, negativo o cero». En el artículo «Una experiencia interdisciplinar en Educación Primaria mediante el uso de Squeak», Fernando Fraga y Adriana Gewerc[4] nos relatan sus experiencias con un grupo de Cuarto de Primaria (nueve años). Los alumnos deben dibujar la escena de un cuento sobre un niño y un fantasma que acaban
Número 17
79
LINUX USER • Educación
Figura 1: Adelanto de DrGeo II.
Figura 2: Proyecto GIS.
Figura 3: El libro de álgebra y geometría.
80
Número 17
de leer, con dos novedades respecto al clásico dibujo en papel: los dibujos se compartirán en un Swiki y se intentará controlar el movimiento de los personajes. El intento de guiar al fantasma reconduce el trabajo hacia la geometría (los conceptos de medición del avance, de giro, etc. se aprenden primero de forma intuitiva y se comprueba que lo que se ha aprendido memorísticamente, como las figuras geométricas, está lejos de haberse asimilado). Ideas poderosas, interdisciplinariedad, conocimiento activo e intuitivo (¿no hablaba Papert de
WWW.LINUX- MAGAZINE.ES
devolverle su cuerpo a las matemáticas?). Sigamos, siempre con una mirada pedagógica. Ejemplos de aplicaciones matemáticas de Squeak tenemos bastantes, como casi siempre (a los matemáticos habitualmente les gustan los ordenadores). Citemos Math et Squeak[5]. También sabíamos, desde el artículo sobre DrGeo, que Hilaire Fernandes trabaja en una nueva versión de DrGeo escrita en SmallTalk; en enero envió un nuevo anticipo a la lista de miembros de OFSET (figura 1). O algunos de los proyectos recogidos en Squeakpolis, con SIG.pr[6] (figura 2) como muestra. Pero voy a destacar otro proyecto sorprendente, que también viene de Extremadura: el Libro interactivo de álgebra y geometría en Bachillerato, de Antonio Ullán, Pilar Ullán y José Luis Redrejo (figura 3). ¿Cómo podemos verlo? Deberemos haber descargado la imagen algebra-squeak del repositorio de Linex, y la seleccionaremos al lanzar squeak. ¡Una imagen que puede conectarse a un servidor WIMS, otro viejo conocido de los lectores, y ejecutar programas específicos externos como maxima, etc.! La figura 4 es sólo una ilustración de lo que se puede hacer en este libro. El usuario podrá ir cambiando de página simplemente pulsando en los signos “<” (página anterior) y “>” (página siguiente). Pero es un libro vivo e interactivo. Realmente el ratón Squeak en España habla extremeño.
Kedama El «sistema de partículas susceptible de ser utilizado en guiones en mosaico masivamente paralelos» de Yoshiki Ohshima[7] permite crear varias clases de simulaciones relacionadas con el movimiento de partículas: desde el proceso de infección de una enfermedad, hasta visualizar cómo un gas ocupa el espacio de un tanque, la extensión de un fuego en un bosque o el comportamiento de un hormiguero ante un trozo de chocolate; vamos a ejecutar este proyecto, otro clásico en las exposiciones de Squeak. Recordemos que disponemos de dos formas de ejecutar no ya una imagen completa, sino un proyecto independiente: directamente a través del navegador si disponemos del plugin para Squeak o descargándolo y ejecutándolo
Educación • LINUX USER
comida deposita una pista de señales de olor que permitirá a las demás seguirlo hasta la comida. Poco a poco la intensidad de este camino se va apagando, de modo que cuando las hormigas han recogido toda la comida, el camino también desaparece. Es interesante reflexionar que la misma Figura 4: Apuntes sobre el espacio euclideo. estructura conceptual matemática sirve para comprender la extensión de la gripe aviaria o de un incendio en el bosque. Esto es una idea poderosa. Otro sistema relacionado con la física digno de estudio es ODEco, un conjunto de herramientas (un toolkit) fácil para la realización de simulaciones dinámicas en dos y tres dimensiones Figura 5: Kedama, simulador de movimiento de partículas. basado en la biblioteca libode. También en local en el directorio de Squeaklets. digno de consideración es SqueakBot, Haremos lo segundo, repasando brevede Serge Stinckwich, un proyecto mente lo que vimos en el primer artícupedagógico de control de un robot en lo. Pulsamos en el menú «Proyecto», un entorno Squeak. Y también tiene «Buscar un proyecto», y en la ventana que ver con la robótica BotsInc, de «Cargar un proyecto» seleccionaremos Stephan Ducasse, un entorno para la ants2.pr que previamente habríamos enseñanza de la programación de descargado. Se nos abre la aplicación robots[8]. mostrada en la figura 5. Squeak y el arte El proyecto simula el modo como las hormigas usan los olores para comuniPierre-André Dreyfuss, profesor suizo carse. Cuando una hormiga encuentra retirado de artes plásticas, ha escrito un
curso muy completo con este mismo título: Art et Squeak (en francés)[9]. Explica con detalle cómo utilizar las paletas y herramientas de dibujo (me gustan especialmente las imagenes, aunque los límites de espacio del artículo nos permiten reproducir únicamente la figura 6), las modificaciones y transformaciones posibles con el halo y todo el repertorio de animaciones y simulaciones que permiten los guiones. Comencemos por un ejemplo sencillo. La figura 6 es una demostración de lo que se puede realizar con la herramienta tampones, utilizando grabación de imágenes y duplicaciones. Se trata de una composición generada a partir del dibujo de una casa, guardada como imagen para el tampón y a la que se le hacen diversas combinaciones; ejemplifica también la utilización del botón rojo para aumentar y disminuir el tamaño. Las modificaciones no satisfactorias pueden deshacerse cuantas veces sean necesarias gracias a la posibilidad de grabar los elementos, conservados en los tampones. A otro nivel ya, abeilleFrelon_001.pr[10] es un proyecto creado a partir de una foto descargada de internet y tratada para animar las abejas con la danza con la se anuncian la presencia y dirección del alimento. Muy interesante, tanto desde el punto de vista de la técnica de animación como por su valor didáctico. La foto de un grupo de abejas en un panal de miel se disocia en sus objetos (fondo, abejas, zánganos). ¿Cómo lo ha hecho? Se seleccionan varias abejas con la ayuda de la opción «seleccionar una parte de la pantalla con un polígono» de la herramienta Nuevo Morph. Seguidamente hace desaparecer el
LINUX USER • Educación
Figura 8: Hamlet en Tusitala.
Figura 6: Arte y Squeak, de Dreyfuss.
resto de abejas cubriéndolas con zonas del panal vacías y la imagen la trata con un editor gráfico para cambiar los colores. Finalmente crea el objeto zángano, y programa el desplazamiento de las abejas y de los zánganos sobre el fondo transformado.
Tusitala Vamos a revelar descubrimientos. Por un lado el nombre: storyteller, el contador de historias, el apelativo que los aborígenes polinesios daban A Robert Louis Stevenson. Por otro lado el proyecto, el generador de historias en inglés de Félix Martín, Pilar Reyes y José Luis Redrejo: «El objetivo principal de este proyecto es que los usuarios (alumnos de inglés de 3º y 4º cursos de la Educación Secundaria Obligatoria, 15 y 16 años) sean capaces de utilizar sus conocimientos previos de inglés para crear una historia de forma atractiva e interactiva y motivadora dentro de un contexto comunicativo real, fomentando así la lectura e
Figura 7: El generador de historias Tusitala.
82
Número 17
introduciéndolos en el mundo de la literatura inglesa»[11]. ¿Dónde podemos encontrar el programa, y la imagen algebra-squeak del ejemplo matemático que citamos antes? Es evidente (¿se han fijado en los autores?): en el repositorio de Linex deb http://www.linex.org/U sources/linex/debian/ sargeU main contrib linex non-free
Bastará con instalar tusitala, que se encargará de traer sus dependencias tusitala-images y tusitala-squeak. Tusitala (figura 7) es una de la imágenes de Squeak producidas en Extremadura que aconsejamos instalar en el primer artículo. La imagen está compuesta por diez proyectos, correspondientes a diez obras de Shakespeare. Cada uno de estos proyectos contiene a su vez un proyecto de Ejercicios, otro de Vocabulario y otro de Teatro.
Cito del manual: «La aplicación Tusitala nos permite realizar tres tipos de ejercicios: relacionar parejas, rellenar huecos y preguntas de elección múltiple. Sólo tenemos que introducir los datos en las casillas que trae la aplicación y guardarlos. Habremos creado entonces un archivo de datos. Este archivo contiene los elementos (palabras, textos, preguntas) que aparecerán en el ejercicio cuando éste se genere. Podemos generar un ejercicio cuantas veces queramos abriendo el archivo de datos con la aplicación correspondiente (Matching Pairs, Filling Gaps o Quiz) y haciendo click en Generate». La creación de ejercicios está descrita con detalle en la documentación y no vamos a reproducirla. Los subproyectos vocabulario permiten crear libros (en el sentido de Squeak) con los tan en boga bits de vocabulario. Pulsando en el botón «Start» se suceden los términos ingleses, las imágenes correspondientes y las palabras en castellano (por ejemplo «king», el dibujo de un rey y la palabra «rey»). La estrella de tusitala es la herramienta de composición de escenas, con un
Figura 8: Hamlet en Tusitala.
WWW.LINUX- MAGAZINE.ES
Educación • LINUX USER
Figura 9: Imagen personalizada con paquete aula.
texto narrativo, fondos y personajes. A cada personaje se le puede añadir movimiento y diálogo. Los alumnos pueden crear sus propios textos o utilizar los proporcionados por los profesores, y lo mismo ocurre con los elementos gráficos. A manera de ilustración en el proyecto Hamlet se ha creado ya una escena (figura 8): los personajes hablan por turno y se mueven sobre los distintos fondos. De nuevo la creación de escenas está perfectamente documentada en el manual, lo que hace innecesario que sigamos exponiéndola aquí.
Hay una entrada en el menú que requiere comentario: vemos una entrada de menú Classroom (en otras ocasiones, como en la imagen algebrasqueak, está traducida como aula), con las opciones «It’s a teacher» e «It’s a student». Se trata del paquete aula, de un desarrollo de José Luis Redrejo para permitir la organización del trabajo en un aula en red. El profesor entrará como profesor y los alumnos se identificarán como alumnos (a esto se referían las opciones). A partir de ese momento en la esquina superior izquierda aparecerá la ip del ordenador del profesor y la lista de los ordenadores de los alumnos que están en la misma subred. Arrastrando un ejercicio (o vocabulario o una escena) sobre esta lista estaremos enviándoselo a los alumnos. La instalación del paquete está documentada en la bitácora de José Luis Redrejo en una entrada del 18 de mayo de 2005[12]. Yo mismo lo he instalado con éxito con SqueakMap y tengo la nueva pestaña en mi imagen personalizada (imagen 9).
Pero las posibilidades para la explotación didáctica de Squeak no se agotan aquí. A Tusitala podrían añadírsele las capacidades multimedia del sistema: los personajes pueden hablar sus textos (hay un sintetizador de voz integrado), o el recitado de los alumnos puede grabarse como sonido o como video… la imaginación es el límite.
Y en el próximo número… Hemos visto ejemplos creo que muy ilustrativos de lo que se puede hacer con Squeak. Ahora bien, no debemos escabullirnos y cerrar el estudio en falso: nos falta examinar la creación de recursos didácticos con eToys, la programación de los guiones, la elaboración de libros dinámicos ¿está fuera del alcance de lo que se puede esperar razonablemente de un profesor medio? Y nos faltan los testigos de este juicio: ¿qué dicen los desarrolladores?, ¿qué dicen los profesores?, ¿cómo lo usan? y más importante aún, ¿qué dicen los ■ niños?
NOTAS [1] Para leer sobre Scratch, http://weblogs.media.mit.edu/llk/scratch/index.html. El wiki de OLTP (http://wiki.laptop.org/wiki/ One_Laptop_per_Child) irá incluyendo información relevante sobre el proyecto. [2] No siempre y no todos; no vamos a señalar, que está feo. Pero dejemos que el dedo de los hechos señale por nosotros. ¿Buscamos hechos? http://www.juntaex.es/consejerias/idt/sg/contratacionag.html. O haber contratado a uno de los principales desarrolladores de Squeak del mundo. O las traducciones de proyectos Squeak de la NASA. Y los fantásticos sitios y proyectos Squeak que presentamos en este artículo. [3] Ya vimos en el primer artículo que existe traducción castellana en http://swiki.agro.uba.ar/small_land/193. La cita es de la introducción al proyecto 2. En el ejemplo del coche, frecuentemente utilizado como introducción a las capacidades de Squeak, los alumnos dibujan un cochecito y aprenden primero a hacerlo avanzar mediante un guión, y después a controlar su dirección, velocidad… la tarea de controlar el coche les enfrenta a la necesidad de resolver problemas matemáticos que de otra forma no se habrían planteado más que de forma pasiva («hoy tocan los números negativos»). [4] http://dewey.uab.es/pmarques/pdigital/simo/adriana.pdf. Artículo encontrado en la estupenda relación de Squeakpolis (http://squeak. educarex.es/Squeakpolis/37). [5] Math et Squeak está alojado en http://p7app.geneve.ch:8090/squeak/34. [6] http://squeak.educarex.es/Squeakpolis/uploads/gissp.pr. Es uno de los proyectos traducidos de que hablábamos antes. Antonio Moreno está haciendo un trabajo fantástico en Squeakpolis. [7] El sitio original del mundo kedama es http://www.is.titech.ac.jp/~ohshima/squeak/kedama/ (en inglés). Kedama está incluido en las imágenes Squeak desde la versión 3.8. Se encontrará documentación en http://www.squeakalpha.org/fun_projects/kedama/ kedma_welcome.htm. El ejemplo del hormiguero concretamente puede descargarse de http://www.is.titech.ac.jp/~ohshima/squeak/ kedama/ants2.pr. [8] ODEco puede encontrarse en http://languagegame.org:8080/ggame/15. Para la biblioteca libode puede consultarse http://www.ode. org (hay paquetes Debian y al menos un juego construido con la biblioteca, xmoto). Para SqueakBot, http://www.iutc3.unicaen.fr/ serge/SqueakBot. BotsInc está en http://community.ofset.org/wiki/BotsInc. [9] http://p7app.geneve.ch:8090/squeak/7. [10] http://p7app.geneve.ch:8090/squeak/uploads/59/abeilleFrelon_001.pr, en la página http://p7app.geneve.ch:8090/squeak/59. [11] Manual de Tusitala, de Félix Martín, Pilar Reyes y José Luis Redrejo, página 3. [12] Presentado en http://www.itais.net/index.php?title=mi_primer_paquete_para_squeak&more=1&c=1&tb=1&pb=1. Instalación detallada en http://www.itais.net/index.php?title=classroom_en_espanol_y_su_instalacion&more=1&c=1&tb=1&pb=1.
WWW.LINUX- MAGAZINE.ES
Número 17
83
LINUX USER • Linea de Comandos: Cat
Examinando ficheros con cat, more, less, head y tail
LÉELO TODO Herramientas prácticas como cat, less, y head son ideales para visionar textos. POR HEIKE JURZIK
N
o siempre es necesario arrancar un editor para visionar los ficheros de texto en la consola. Muy a menudo, un simple visor es mucho más rápido. Además, los programas que vemos en el número de este mes tienen mucho más que ofrecer. Si se está buscando un método para concatenar múltiples ficheros en uno solo, cat es la herramienta apropiada. Este artículo también examina cómo funcionan para los paginadores more y less, enseñando los métodos más convenientes para el uso de estas herramientas. Y si se está interesado en coger las primeras o las últimas líneas de un fichero, vemos cómo hacerlo con head y tail.
El gato con botas cat permite mostrar un fichero de texto en la salida estándar: cat fichero.txt
Podemos añadir números de línea a esta salida, podemos escribir -n. Si se pretende mostrar con cat un fichero binario en lugar de uno de texto, la shell mostrará todo tipo de extraños caracteres. Para resetear la pantalla se escribe reset en la línea de comandos (puede que tengas que hacerlo a ciegas). Pero cat puede hacer mucho más. El nombre del programa deriva del verbo inglés “to concatenate” (es decir, concatenar), ya que cat realmente lo que
84
Número 17
permite es pegar juntos dos o más ficheros. Para concatenar dos ficheros de texto en uno se usan cat y el operador >: cat fichero1 fichero2 > fichero3
Se aconseja ser prudente si ya existe el fichero3, ya que cat lo reescribirá. Pero puede usarse el operador >> para decirle a cat que adjunten los dos primeros al tercero, sin sobreescribir su contenido:
número de la línea actual, se pulsa la tecla del signo igual (=), la combinación de [Shift + ;] y [F] (:f) presenta el nombre del fichero con el número de la línea. Para buscar en el fichero, se escribe el carácter barra (/) y se introduce la clave de búsqueda. Si fuera necesario, more puede presentar múltiples ficheros de texto simultáneamente. Para hacerlo, simplemente es suficiente pasar todos los nombres de los ficheros a la herramienta cuando ésta se arranca. El paginador indica el nombre de cada fichero: :::::::::::::: wget.txt ::::::::::::::
cat fichero1 fichero2 >> fichero3
Más o Menos Si necesitamos ver un fichero de texto en la shell, pero permitiéndonos mover arriba y abajo y buscar en el fichero, lo mejor es usar un paginador como more o less. Para ver el fichero página a página, se escribe: more fichero
Se presiona la barra espaciadora para bajar una línea y la tecla Enter para subir otra. Una línea de estado en la parte inferior de la página muestra la posición de la página actual a modo de un porcentaje del fichero completo. [B] (“back”) lleva a la página anterior, [H] presenta la ayuda y [Q] (“quit”) sale del programa. more sale automáticamente cuando llega al final del fichero. Además, more posee unos cuantos atajos de teclado más: si se está interesado en el
WWW.LINUX- MAGAZINE.ES
Puede presionarse :n (“next”, es decir, siguiente) o :p (“previous” o previo) para saltar de un fichero a otro. El comando :p lleva al comienzo del fichero actual; si se presiona :p por segunda vez, vuelve al fichero de texto previo. Para editar un fichero no es necesario dejar more y arrancar tu editor favorito. En lugar de eso, se presiona [V] mientras se está viendo el fichero. Con ello se arranca por defecto el editor vi, pudiéndose entonces modificar el fichero. Si se prefiere usar more para invocar a un editor diferente hay que modificar el valor de la variable de entorno EDITOR, la cual es evaluada por otros muchos programas. Por ejemplo, si se prefiere trabajar con el editor Xemacs, puede definirse la variable con el siguiente comando: export EDITOR=xemacs
Linea de Comandos: Cat • LINUX USER
Cuando se sale del editor, se vuelve a more. Para modificar permanentemente el valor de la variable de entorno EDITOR, se añade el comando export al fichero de configuración bash, ~/.bashrc, y se reanaliza el fichero como sigue: source ~/.bashrc
Las opciones permiten influir en el modo en el que reacciona more; éstas pueden ser especificadas cuando se arranca la herramienta. Por ejemplo, si se necesita editar un fichero con muchas líneas vacías, puede introducirse
limpia. Este comportamiento puede cambiarse si se desea, estableciendo el parámetro -X en la línea de comandos. Al igual que en more, puede definirse una variable de entorno para less y así especificar los parámetros por defecto. Por ejemplo, para usar la opción -X permanentemente hay que añadir la siguiente línea a ~/.bashrc:
Figura 1: Pulsa [F] para que less muestre nuevas líneas de un fichero.
export LESS=" -X" more -s fichero
para decirle al paginador que reduzca múltiples líneas vacías a una sola. Para restringir la salida a 10 líneas en la ventana actual, se añade -10 como una opción de arranque, y para evitar que more se olvide de esta configuración cuando se desplaza a través del fichero se añade la opción -p. Si se desea que more use los mismos parámetros de la línea de comandos cada vez que se corre la herramienta, puede establecerse la variable de entorno MORE y conservar mucho de lo escrito. Para hacerlo se añade lo siguiente (o algo similar) al fichero de configuración bash ~/.bashrc: export MORE=" -10 -p -s"
seguidamente, para reanalizar el fichero se corre el siguiente comando: source ~/.bashrc
Menos es Más less es el sucesor de more: reconoce los mismos atajos de teclado, aunque añade unas cuantas funciones propias. Si no se desea usar la barra espaciadora y [B] para moverse, pueden emplearse los cursores en su lugar. [G] salta al comienzo del fichero y [Shift + G] al final. less no solamente dispone de una búsqueda hacia adelante (/ ), sino que con el interrogante (?) podemos movernos hacia atrás. A diferencia de more, este paginador no sale automáticamente cuando se alcanza el final del fichero, sino que es preciso salir explícitamente del programa escribiendo [Q]. Mientras que more no limpia la presentación cuando sale y presenta el último trozo de texto en la pantalla, less la deja
Como en more, less analiza la variable EDITOR y arranca el editor de texto cuando se pulsa [V]. Los atajos de teclado que se usan para visionar múltiples ficheros son idénticos. Si se pasan múltiples ficheros al paginador, puede presionarse :n para moverse al fichero siguiente y -p para volver al anterior. A diferencia de more, less recuerda la posición en el fichero cuando se escribió el comando. Otra característica práctica del comando less es que, si se está trabajando con múltiples ficheros, muestra el nombre del fichero siguiente en la línea de estado de la parte inferior de la página: textfiles.txt (file 1 of 2) U (END) - Next: spellcheck.txt
o zipeados. Las herramientas ofrecen los mismos atajos de teclado que los paginadores de los que heredan. En lugar de usar una secuencia de comandos complicada como: zcat Xinerama-HOWTO.gz | less
puede escribirse zless Xinerama-HOWTO.gz
para leer el fichero comprimido en la pantalla.
De Cabo a Rabo Si se está interesado en las primeras o en las últimas líneas de un fichero de texto, head y tail son la herramienta que necesitas: head <I>fichero.txt<I>
Para evitar tener que presionar :p para cambiar al fichero previo, puede establecerse la opción -e cuando se arranca less. Con esta opción se le dice que cambie automáticamente al fichero siguiente cuando llegue al final del actual y se pulse la barra espaciadora, [Cursor hacia abajo] o [Avance de Página]. less dispone de una característica práctica para controlar los cambios de los ficheros. Si se presiona [f], el paginador muestra las líneas añadidas recientemente. Esto resulta extremadamente práctico mientras se usa less para ver ficheros log. La línea de estado presenta Waiting for data...(interrupt to abort) para mostrar que less está esperando cambios (Figura 1). [Ctrl + C] sale del modo “follow” y vuelve a las funciones de paginador normal.
Paquetes Empaquetados Los comandos zless y zmore hacen posible que se vean los ficheros comprimidos
WWW.LINUX- MAGAZINE.ES
presenta las primeras diez líneas de un fichero. tail es el equivalente de head para el final de fichero. Al igual que head, puede manejar como entrada múltiples nombres de ficheros. tail posee muchos extras prácticos: -f es con toda probabilidad el más comunmente utilizado. Al igual que ocurriera con el paginador less, esta opción permite que se active el modo “follow” y se registre cualquier cambio. Esto es útil para controlar los ficheros log. El comando siguiente: tail -f /var/log/messages
envía a tail a un bucle infinito, donde controla un fichero en busca de cambios y presenta las últimas entradas. Para abandonar el modo “follow” se ■ presiona [Ctrl + C].
Número 17
85
LINUX USER • Juegos
Una de conejitos
LUGARU Contrastando con la inmejorable calidad gráfica que mostramos el mes pasado con Quake 4, este mes os traemos un título que precisamente no destaca por sus gráficos. Pero de vez en cuando conviene recordar que el aspecto visual no lo es todo en un buen juego, y Lugaru viene dispuesto a demostrarlo. POR VICENTE CARRO
W
olfire [1], creadores de Black Shades y Lightning’s Shadow, ganadores del concurso de videojuegos UDG 2002 y 2003 respectivamente, han dado su primer paso en el mundo de los videojuegos comerciales con Lugaru[2]. Pero estos chicos crean juegos sin centrarse en los gráficos, destacando sobre todo lo demás la jugabilidad y el amor por los detalles. Y es que este juego rebosa eso: jugabilidad y pequeños detalles.
pequeña aclaración es fundamental para jugar, ya que si nos ponemos a luchar “a las bravas”, esto es como en el resto de los juegos, cuando lleguemos a los combates más avanzados veremos que la fuerza muscular de un conejo, por muy fuerte que sea, no es comparable a la de un lobo. Así que tendremos que asumir que tenemos que redirigir los ataques de los enemigos más fuertes contra ellos mismos.
El conejo vengador
Este cambio de rol en un juego de acción nos obligará a practicar bastante hasta acostumbrarnos. Afortunadamente hay un modo tutorial para aprender a desenvolvernos con cierto éxito en un combate. Como norma, debemos permanecer esperando a nuestro atacante, y justo cuando lance el ataque pulsaremos la tecla de defensa (mayúsculas) para realizar un movimiento Figura 1: Cuando estemos recibiendo golpes se activará un automático. Turner efecto “doble” para marearnos. podrá golpearlo, blo-
El juego nos pone en la piel de Turner, un hábil conejo humanoide que, en un ataque a su pueblo, pierde a toda su familia. Sin nada que perder y con un notable sentimiento de venganza se dirige a por la cabeza del culpable de esa matanza sin sentido. Pero no se enfrentará a sus enemigos sólo con su mala leche, ya que Turner domina las artes marciales, en las que se basará todo el juego.
Jiu-Jitsu y Aikido Turner es un experto en una mezcla de Jiu-Jitsu y Aikido. Estas artes marciales se basan en redirigir la energía del ataque contra el atacante, no en dar fuertes golpes como en el karate. Esta
86
Número 17
Paso a paso
WWW.LINUX- MAGAZINE.ES
quearlo, lanzarlo por los aires o incluso desarmarlo quedándose con su arma. Además, cuando bloqueamos un ataque, el atacante suele quedarse desprotegido, momento que aprovecharemos para contraatacar. Turner además podrá usar tres tipos de armas, que son cuchillos, espadas y palos. Las técnicas de ataque y defensa cambian según se use uno u otro tipo. Aquí notamos uno de esos detalles de los chicos de Wolfire: las heridas recibidas tendrán su representación correcta en nuestro modelo. Es decir, si nos propinan un espadazo en el pecho, vere-
Juegos • LINUX USER
vayamos superando las fases, nuevos puntos se harán accesibles en el mapa principal para avanzar en la trama del guión.
Gráficos simples
muy
Sin lugar a dudas la primera impresión que nos transmite lugaru no es tan buena como debería. Sus gráficos son simples, al igual Figura 1: A veces los enemigos acabarán literalmente estampaque sus texturas y los dos contra la pared. objetos del juego. Al menos, los modelos de mos el corte en el pecho. Si la herida es los personajes tienen mejor aspecto. Lo profunda, la sangre salpicará en el suelo más parecido que veremos a edificios dejando una visible mancha, y además serán cubos con texturas aceptables. La la espada quedará notablemente ensanrazón de esto es que era necesario un grentada e incluso goteará durante un altísimo frameado (número de imágenes tiempo dejando un rastro de gotas en el por segundo), así como dejar el procesuelo. También será posible rematar a sador despejado para gestionar las anilos enemigos caídos de diversas mamaciones dinámicas (no son fijas-repetineras. tivas como en multitud de juegos). El palo de madera no provocará cortes pero, cuando propinemos un golpe realEl juego incluye un motor de física que mente demoledor, el rival saldrá volando mejora el sistema de ragdoll (aclaramos y nuestro palo se convertirá en astillas. que ragdoll es el sistema que se usa para Junto a este estilo de juego también se que los personajes inconscientes caigan permite un estilo “sigilo”, acercándonos volando de una manera más o menos silenciosamente y matándolos de un solo realista, en contraposición a sistemas en golpe. Pero atención a la sangre en nueslos que los personajes caen siempre tras armas, ya que los enemigos la igual). olerán.
¿Cómo gritan los conejos?
Modos de Juego En el menú principal tenemos 3 opciones de juego: Challenge (desafío), Tutorial y el modo historia. Los desafíos consisten en 14 fases independientes en las que sólo importa lo rápido que podemos derrotar a los enemigos. Además, dependiendo de nuestra manera de jugar, podremos recibir alguna mención especial como Divide and conquer (divide y vencerás), Take no prisoners (no hagas prisioneros) o Aikido master entre otras. En el breve modo tutorial se nos irán explicando las bases del novedoso sistema de combate que ya habíamos comentado. El modo historia no está reflejado como tal, para acceder a él tendremos que pulsar en los puntos rojos del mapa principal del juego. A medida que
El apartado sonoro tampoco brilla demasiado. Es muy curioso escuchar cómo chillan los personajes (conejos o lobos). También podemos destacar efectos como el sonido de dos espadas que chocan entre sí, o el sonido del viento cuando saltamos muy rápido. El resto del audio se limita a cumplir lo mínimo. Los temas musicales del juego son muy correctos, de un estilo oriental, y apenas nos daremos cuenta de que están ahí.
1, y guardamos el fichero. A partir de ese momento el juego estará en modo edición. Durante la partida, si pulsamos mayúsculas+m se activará el modo edición que nos permitirá una serie de acciones que alargarán la vida del juego durante mucho tiempo. En primer lugar podemos crear nuestras propias fases, cambiarnos la vestimenta, explotar a los enemigos ( mayúsculas + i), volar (saltando), cambiar el tipo de terreno (j), cambiar opciones del motor gráfico, y muchas cosas más. Podéis encontrar una lista de las teclas usadas en el editor en el fichero /Data/Debug Readme de la carpeta de instalación del juego. También os avisamos que para usar la consola tendréis que tener el teclado en inglés. Nosotros lo hemos logrado escribiendo setxkbmap us en una terminal y después ejecutando el juego, pero hay más maneras.
Pruébalo Afortunadamente el juego puede ser probado antes de comprarlo a través de su demo, que podéis descargar desde este enlace [3]. Hay que decir también que lugaru, a pesar de sus gráficos, ha resultado ser un éxito de ventas y ya está en desarrollo una segunda parte que también saldrá para linux, y esta vez traducida al castellano, con un novísimo motor gráfico que promete dejar a estos violentos conejos con mejor aspecto que nunca. Dadle una ■ oportunidad y no os defraudará.
Puntuación Lo mejor • Divertido como pocos • Nuevo estilo de combate
7
• Muchos detalles Lo peor • Gráficos demasiado simples • Cuesta aprender a pelear
Modo edición Además del propio juego podemos acceder al modo de edición. Para esto tendremos que irnos a nuestra carpeta de usuario y dentro de la carpeta oculta .lugaru/Data/, editaremos el fichero config.txt. La edición es muy simple. Buscaremos la linea “Debug:” y cambiaremos el 0 que tiene bajo ella por un
WWW.LINUX- MAGAZINE.ES
• No está traducido
RECURSOS [1] Wolfire: http://www.wolfire.com [2] Web de lugaru: http://www.wolfire. com/lugaru.html [3] Demo linux de lugaru: http://www. wolfiles.com/lugaru-linux-x86-1.0.zip
Número 17
87
COMUNIDAD · Konsultorio
EL CONSULTORIO DE KLAUS Klaus Knopper es el creador de Knoppix y co-fundador de la LinuxTag Expo. Trabaja en la actualidad como profesor, programador y consultor. Si tiene algún problema de configuración, o simplemente quiere cono-
No Me Arranca el DVD
cer mejor cómo funciona Linux, no dude en escribir sus preguntas a:
Tengo un “viejo” PC a 1 GHZ con un lector de DVD y grabadora de CD, 512 MB de RAM y dos discos de 80 MB. Desafortunadamente, parece que la BIOS no es capaz de arrancar desde el lector de DVD. Mi pregunta es: cada mes recibo un valioso DVD de esta revista. ¿Cómo podría convertir este DVD en varios CD’s desde los que pueda arrancar?
preguntas@linux-magazine.es.
He estado pensando bastante en estos problemas últimamente. En especial porque hay algunos ordenadores viejos que ni siquiera arrancan desde la unidad de CD-Rom de manera directa. El verdadero problema es que, cuando se arranca desde CD o DVD, no tenemos sistema operativo funcionando aún, y todos los pasos necesarios para cargar un kernel y un disco RAM inicial desde el CD o DVD los tiene que hacer la BIOS del ordenador. El modo en el que esto trabaja para CD’s y DVD’s se llama “el torito” , y existen muchos modos posibles. La manera en la que arrancan la mayoría de las BIOS más viejas desde CD es conmutando virtualmente la unidad de CD-ROM con la disquetera y cargando una imagen de un floppy desde CD. Como esta imagen del floppy sólo puede existir en ciertos tamaños, no es fácil que quepa un kernel, un disco RAM inicial, más todos los scripts de arranque y los programas. Knoppix 3.x fue la última versión con un kernel
88
Número 17
suficientemente pequeño para caber en un único disquete. Ahora tenemos que usar el llamado “modo sin emulación”, en el cual un bootloader (isolinux) carga el kernel y el initrd directamente desde el CD. Este modo de arranque no lo soportan todos los ordenadores antiguos, por lo que puede que a tu “viejo” ordenador le ocurra otro tanto. Por cierto, el ordenador más antiguo que tenemos para probar Knoppix es un 486 con 100 MHz y 28MB de RAM. Y tengo que arrancarlo con algunos trucos como los que estoy describiendo. Si intentamos arrancar en primer lugar desde un disquete, para poder acceder al CD y poder continuar el arranque desde allí, tenemos que incluir en este disquete todos los drivers necesarios para todos los tipos de CD o DVD-ROM (probablemente esto incluya tanto SCSI, USB, Firewire o SATA). Esto es ciertamente complicado. La idea de “dividir” el DVD en varios CD’s no es imposible, pero es bastante difícil. Con Knoppix/unionfs se pueden “unir” varios CD’s en un único sistema de archivos. Pero necesitaríamos una unidad de CD para cada disco, y además tendríamos que modificar los scripts de arranque para verificar la presencia de un componente unionfs en cada unidad. La manera más sencilla y mejor de arrancar para ti, de momento, es crear un
WWW.LINUX-MAGAZINE.ES
CD arrancable con el kernel y el disco RAM inicial, y (para mayor seguridad) EXTRAER este CD de “sólo-arranque” de nuestra unidad tan pronto como se hayan cargado el kernel y el initrd. En este punto, al menos para el caso de Knoppix, se buscan los archivos necesarios para continuar la configuración del equipo en todas las unidades, incluida la del DVD. Esos son los pasos necesarios para crear un CD ejecutable con Knoppix, que contiene sólo los archivos necesarios para arrancar. (El DVD de Knoppix debe estar montado en /mnt/dvd para este ejemplo): mkdir /tmp/bootcd cp -a /mnt/dvd/boot /tmp/bootcd/ chmod -R u+w /tmp/bootcd/ mkisofs -input-charset U ISO-8859-1 -pad -l -r -J U -no-emul-boot -boot-load-size U 4 -boot-info-table -b U boot/isolinux/isolinux.bin -c U boot/isolinux/boot.cat U -hide-rr-moved -o U /tmp/bootcd.iso /tmp/bootcd
Ahora sólo tenemos que grabar /tmp/bootcd.iso en un CD-R vacío con nuestro programa de grabación preferido que tenga soporte directo para grabar imágenes iso (como cdrecord). No se
Konsultorio • COMUNIDAD
Figura 1: Pantalla de arranque de Knoppix 4.01.
sorprenda: este CD puede tener tan sólo de 4 a 16 MB de tamaño. Como la mayoría de los live CD tienen que volver a verificar todas las unidades tras cargar el kernel y el initrd, este truco debería funcionar con la mayoría de los Live DVD’s. Podríamos incluso crear un CD multiarranque que permita arrancar diferentes DVD’s con el mismo CD inicial.
Opciones de Arranque Existen muchísimas opciones de arranque en Linux. Supongo que algunas se usan más a menudo, mientras que otras se usarán muy de vez en cuando. ¿Cuáles son las opciones de arranque más importantes que deban conocerse, y cómo se usan? ¿Cuál sería el “top ten” de los parámetros de arranque imprescindibles? ¿Tienes algún favorito que encuentres de utilidad y que sea más o menos desconocido? En primer lugar tenemos que distinguir entre opciones del kernel, parámetros de los módulos y las opciones “no oficiales” que no se usan nunca, salvo que una distribución las evalúe dentro de un script en un proceso posterior al arranque (como hace Knoppix). Cualquier cosa que tecleemos (o indiquemos con un parámetro de LILO o isolinux) después del nombre del kernel, aparecerá en texto plano dentro del archivo /proc/cmdline. Las verdaderas opciones del kernel se configuran en la parte estática de éste. Por ejemplo: noapic o pci=bios. El primer ejemplo deshabilita el “controlador avanzado de interrupciones”, que es un apaño para algunos problemas observados con
frecuencia en las rutinas de interrupción (o por hardware defectuoso). El segundo ejemplo indica al kernel que ciña la distribución de interrupciones a la fijada por la BIOS, en lugar de intentar un método directo (como el método “interrupción más probable”). Esto puede arreglar los problemas en un punto muy temprano del arranque. Desafortunadamente, no hay manera de “deshacer” los cambios con otra opción posterior, por lo que, ponerlas en la línea de opciones como “apéndice” en lilo.conf, syslinux.cfg o isolinux.cfg sólo se recomienda si estamos seguros de que no vamos a necesitar apic o pci=direct al arrancar en otro ordenador con el mismo disco de arranque. Y luego están las placas que insisten en tener soporte de apic o acpi, sin los que no podremos instalar Linux de ninguna manera. Podemos encontrar una lista bastante larga, pero incompleta, de opciones del kernel en la documentación que acompaña a cada lanzamiento del kernel de Linux, en el archivo Documentation/kernelparameters.txt El segundo tipo de opciones, los parámetros de módulo, son aquéllos que se pasan a módulos específicos del kernel que se compilan dentro del kernel. Estos parámetros de módulo contienen a veces el nombre del módulo en la primera parte, y las opciones (o una lista de ellas) a continuación, a modo de lista (separada por comas, si hay más de una opción). Algo como: psmouse.psmouse_proto=imps
Este ejemplo le indicaría al módulo psmouse (puerto de ratón ps/2, referido a veces como /dev/psaux), que, en este ejemplo, se compila directamente en el kernel, para usar el protocolo imps con la rueda de desplazamiento habilitada, en lugar del protocolo ps/2 sencillo o la autodetección. A veces esto es necesario en portátiles cuando no se consigue que funcionen correctamente partes del touchpad o algunos botones (se usa frecuentemente en touchpads Synaptics que no responden al driver original de Synaptics), o en casos en los que el ratón efectúa saltos en pantalla sin razón aparente.
WWW.LINUX-MAGAZINE.ES
El tercer tipo de opción tiene que ver con los textos arbitrarios, separados por espacios, que se ignoran sin más por el kernel y por los módulos del kernel. Si estas opciones tienen la forma name=value, podemos evaluarlas directamente como variables de shell dentro de /linuxrc o en initrd (disco RAM inicial), lo cual es ciertamente práctico para configurar scripts que no implementan su propio analizador mejorado /proc/cmdline. Knoppix usa esto para activar la DMA cuando el usuario teclea knoppix dma en la línea de comandos del arranque. dma no es una opción del kernel (al menos, de momento), pero se usa como condición para la shell dentro de la parte de detección de hardware de /linuxrc. Esta es mi pequeña lista de parámetros “favoritos” del kernel: *acpi=off – Deshabilita la “interfaz avanzada de configuración y administración de energía”, que a veces no funciona bien. Algunos ordenadores no arrancarán sin la ACPI desconectada, mientras que otros realmente necesitan tenerla activada para poder distribuir adecuadamente las interrupciones correctamente. Si la ACPI funciona bien en su ordenador, debería usarla preferentemente a la más antigua APM. ACPI nos permite controlar cosas como la refrigeración del ventilador y los estados de suspensión mejor que APM, que es mucho más sencilla. Si sabemos que nuestro ordenador necesita ACPI, pero nuestro kernel lo desconecta por alguna razón, a pesar de estar seguros de que lo hemos compilado, podemos probar acpi=force en su lugar. • noapic – Se confunde frecuentemente con ACPI (véase el punto anterior). Es el “controlador programable avanzado de interrupciones”, que está parcialmente dentro de algunas CPU’s y parcialmente en un chip de la placa madre (especialmente para controlar el I/O). La opción noapic nos permite tener más de 15 interrupciones, que estarían muy limitadas y preasignadas, de manera que podamos controlar un gran número de dispositivos. Pero a veces no funciona (por ejemplo, algunos componentes como tarjetas de red aparentan estar “muertos”, en lugar de detectarse adecuadamente). noapic viene de “no APIC”. (Resulta
Número 17
89
COMUNIDAD · Konsultorio
algo extraño que unas veces se use “… off” y otras “no…”, ¿no?). noapic desconecta esta parte “avanzada” del chipset y nos deja con el viejo pero seguro método. Esto significa que es más probable que encontremos conflictos de interrupciones al usar noapic, pero algunos dispositivos que no estaban disponibles con apic, de repente funcionarán cuando parecía que estaban defectuosos. •pci=bios – Por defecto, Linux intenta asociar las interrupciones del sistema con componentes del hardware con un método “directo” basado en una especie de asociaciones “más probables”, pero sin intentar comprobar las configuraciones de la BIOS si no es absolutamente necesario. “pci=bios” le indica al kernel que use la configuración de la BIOS definida por el usuario para la distribución de interrupciones en lugar de intentar su propio método. En ocasiones tendremos que usar esta opción cuando a una tarjeta se le asigna una interrupción que ya estaba reservada por otro dispositivo que Linux no había detectado antes. •pnpbios=off – ¿Quien no recuerda las tarjetas “Plug and Play”? Este fue probablemente el primer intento de descargar al usuario de la tarea de configurar los drivers de manera manual y asignar las interrupciones a los distintos dispositivos (la mayor parte tarjetas tipo ISA). Como alternativa se leían combinaciones de direcciones I/O de interrupciones permitidas de una tarjeta y se hacía una configuración semiautomática. A menudo esto no funcionaba y en su lugar, el “plug and play” ponía a prueba la paciencia del usuario, hasta que abandonaba, desconectaba la tarjeta y se compraba otra nueva. En cualquier caso, la extensión Plug and Play de la BIOS que está aún presente en algunas placas antiguas puede causar problemas con interrupciones
mal asignadas. Si desconectamos el “plug and play”, deshabilitamos la configuración automática de tarjetas antiguas. A menos que tengamos todavía una tarjeta que requiera realmente plug and play (algunas tarjetas de sonido de este tipo se usaron mucho en su momento), al desconectarlo podemos solucionar toda una categoría de problemas potenciales. Muchos de estos problemas con interrupciones, direcciones I/O, buses, etc., podrían haberse evitado, para empezar, si el hardware de los PC no hubiese nacido con un diseño arbitrario y confuso, por no llamarlo chapucero directamente, que ha ido perviviendo progresivamente, pero que no llegó nunca a reemplazarse. La combinación de acpi=off noapic pci=bios pnpbios=off es capaz de solucionar la mayoría de los casos (al menos según mi experiencia) en los que Linux se cuelga durante el arranque sin motivo aparente (en especial con los kernels llenos de funcionalidades de los live CD’s). En la realidad, existe otro tipo de opción de arranque que no es una opción de arranque verdadera. Se usa por algún bootloader específico para encontrar y recolocar un disco RAM inicial, cambiar la cantidad de mensajes de información (verbosity level) o elegir la ubicación de la imagen del kernel. En ocasiones estas opciones (como initrd=..., que indica al bootloader desde dónde tiene que leer el disco RAM inicial ANTES de que se inicie el kernel) se pasan también como si fueran opciones del kernel reales.
Problemas con Sata Acabo de comprarme un HP Pavilion a1250n con un disco duro SATA. Uso únicamente Linux desde 1997, y no me considero precisamente un novato. Sin embargo, me he encontrado con un problema que no he podido resolver.
Listado 1: Secuencia de Arranque Problemática 01 Lading sata_sil 02 Ata1: SATA max udma/100 cmd OxF880E080 ct1 OxF88oeo8a bmdma oxF880E000 irq 11 03 Ata2: SATA max udma/100 cmd )xF880Eoco ct1 OxF88oEoca bmda OxF880E008 irq 11 04 Input: 1mEX ps/2 Logitecch explorer mouse on isa0060/serial01 05 Ata1: Dev o ata, max udma/100 488397168 sectors: lba48
90
Número 17
WWW.LINUX-MAGAZINE.ES
Parece que Linux no reconoce el disco duro Sata instalado en el HP Pavilion. Se cuelga justo después de la secuencia de arranque mostrada en el Listado 1. Llegados a este punto, el sistema no carga el controlador del disco duro. He probado a utilizar otros drivers SATA pero ninguno de ellos ha funcionado. Sin embargo, puedo arrancar Linux en modo seguro. Le agradecería cualquier ayuda que pueda ofrecerme, ya que HP no ha podido ayudarme. ¡Quiero tener mi Linux de nuevo! Para darte una respuesta definitiva a tu problema con el controlador tendría que hacer algunas pruebas, pero puedo darte algunas pistas acerca de problemas generales con los controladores SATA. En primer lugar, habría que ver si cambian algo las cosas al usar mis opciones “favoritas” comentadas en la consulta anterior, o bien con alguna combinación de ellas (como acpi=off noapic pnpbios=off pci=bios), dado que por lo general éstas no causan ninguna pérdida de rendimiento. Existen ciertos informes que afirman que algunos controladores SIL también funcionan con la opción del kernel irqpoll, aunque esta solución no es del todo recomendable, ya que puede causar daños colaterales en otros dispositivos, ralentizando el sistema. Algunas combinaciones de acpi/apic/ bios parecen tener también influencia en la manera en la que trabaja el controlador SATA, y aún no se ha conseguido la ingeniería inversa de las especificaciones completas para poder arreglar el driver. En tu caso, primero deberías probar a arrancar con irqpoll . La mejor recomendación para controladores SATA que no funcionen (puede que no te guste esta solución…) es esperar al siguiente lanzamiento del kernel, que puede que incluya el soporte para controladores nuevos o soluciones para los defectuosos. En tu caso, si el controlador SATA funciona en “modo seguro” (por cierto, ¿tiene tu distro la opción de arranque “modo seguro”?), podrías verificar qué kernel se está ejecutando en ese modo, y qué opciones se han habilitado. Prueba con los comandos uname -a ; cat /proc/cmdline, y puede que encuentres una solución de ■ momento.
Opinión • COMUNIDAD
Los sucios manejos por parte de ya-se-sabe-quién
GOLPES BAJOS C
Pero no voy a tratar aquí cuestiones técnicas ya que mi intención es hablar pura y exclusivamente del perverso uso de la palabra Linux por parte de Microsoft. Desafortunadamente, no nos encontramos ante el clásico “Coca cola Vs. Pepsi” sino de una empresa multinacional, (tal vez la primera que nos viene a la cabeza cuando se menciona la palabra “monopolio”) perpetrando un acto perverso contra una comunidad mundial que lucha por la libertad de expresión y del conocimiento. Esto es muy fuerte y por más que he tratado de encontrar un paralelismo, no me viene a la mente otro movimiento que haya reunido a tanta gente, ni que haya obtenido tanto para la humanidad en tan poco tiempo como lo ha hecho el software libre. ¿Cuál es el motivo de estos golpes bajos? ¿No tenemos acaso derecho de escribir software y hacerlo libre cuando se nos dé la gana? ¿A qué viene esto de desacreditar nuestro trabajo y difamar nuestros esfuerzos? Por más que ciertos medios nos consideren gente “rara” u “oscura”, o que hasta el mismísimo diario El País nos tilde de comunidad “con grandes tabúes que no se atreve a pronunciar el nombre Bill Gates” (hay que ver lo que es la ignorancia), la realidad es muy distinta. Nuestro principal objetivo es luchar por nuestro derecho a escribir software y compartirlo cómo y con quien nos dé la gana. La verdad es que este derecho de libertad influye sobre los intereses comerciales y le toca las narices a mucha gente. Por fortuna seguimos avanzando a pesar de este tipo de agresiones a las que estamos ya acostumbrados, pero debemos tomar conciencia y defender nuestros derechos, nuestro tiempo y nuestro dinero.
WWW.LINUX-MAGAZINE.ES
Las Juntas de Andalucía y Extremadura han hecho una gran inversión que permitió llevar a cabo la última Conferencia Internacional de Software Libre en Málaga. Dinero que hemos pagado todos, y cuyo fruto vemos a diario cuando encendemos nuestros ordenadores. ¿Es justo, entonces, que una empresa extranjera venga a aprovecharse de tal esfuerzo para promocionar sus producto?. ¿Es justo que este usuario que descubrió “Linux” durante la Conferencia, vaya a buscar información en Google y le acabe comprando un producto a Microsoft? Pues no lo es, y personalmente este tema me ofende sobremanera. Asimismo, hay muchas empresas, asociaciones y usuarios en España que se ven afectados de la misma manera. Si bien poco nos interesa lo que Microsoft haga o deje de hacer con su producto, nos preocupan mucho este tipo de agresiones que directa y explícitamente violan la ley Española para obtener beneficio económico. Afortunadamente la conciencia del software libre está llegando cada vez a más oídos en diversos ámbitos, a pesar del continuo esfuerzo que ciertas empresas invierten en desacreditarla. Gracias a esto contamos día a día con más gente que, mediante el uso de la Ley como defensa, nos ampara y permite que el software libre siga siendo hoy una realidad. A todos ellos, y aprovechando este medio, les doy infini■ tamente las gracias.
EL AUTOR
omo si no fuera suficiente el tener que exprimir nuestra agenda diaria para poder colaborar en este gran proyecto llamado “Linux”, tenemos además que aguantar los golpes bajos de cierta gente, cuyos intereses económicos se ven afectados por nuestra labor altruista. Es así como muchos lo sentimos al encontrarnos noticias como la campaña publicitaria iniciada hace semanas por Microsoft en la versión española de Google (http://www.google.es). Mediante el servicio Adwords, Microsoft paga para que cada persona que busque la palabra “Linux” en el buscador, se encuentre en primer lugar con una publicidad de Windows. La publicidad expone el caso de éxito de una empresa que ha ganado millones al utilizar Windows en lugar de Linux para su sitio de comercio electrónico. Curiosamente el sitio en cuestión (http:// www.tommy.com) es una implementación de OpenCMS, un software de comercio electrónico libre que según Netcraft está corriendo sobre Apache y Linux.
Julian Coccia es el fundador y presidente de Linux Español, una Asociación Española sin ánimos de lucro que cuenta con una sub-licencia de la marca Linux emitida por Linus Torvalds en el territorio español: http://linux.es. Julián lleva años desarrollando aplicaciones, escribiendo código y artículos para ayudar en la difusión del software libre entre sus semejantes.
Número 17
91
ยกHazte con tus ejemplares atrasados! #06
#07
#08
#09
#10
#11
o d a t o g a
#12
#13
#14
W W W. L I N U X - M A G A Z I N E . E S / AT R A S A D O S
¡pídelos ya! el REPOSITORIO
de conocimientos LINUX más COMPLETO
¡No esperes a que se agoten! #15
#16
W W W. L I N U X - M A G A Z I N E . E S / AT R A S A D O S
EVENTOS
Debconf 6
GUADEC 2006
Fecha: 14-22 Mayo 06
Fecha: 24-30 Junio 06
Ciudad: Oaxtepec, México
Ciudad: Vilanova, España
Sitio Web:
Sitio Web:
http://www.debconf.org
http://2006.guadec.org
Calendario de Eventos Evento DallasCon LinuxTag 2006 LinuxWorld Conference & Expo Italy LinuxWorld Conference & Expo SA LinuxWorld Conference & Expo Brazil LinuxWorld Conference & Expo Japan USENIX ’06 6º Fórum Internacional Software Livre LinuxWorld Conference & Expo Robocup GUADEC 2006 DIMVA 2006 LinuxWorld Conference & Expo Linux Symposium OSCON 2006 Black Hat USA 2006 LinuxWorld Conference & Expo LinuxWorld Conference & Expo NL LinuxWorld Conference & Expo UK
Fecha 1-6 Mayo 06 3-6 Mayo 06 9-10 Mayo 06 16-19 Mayo 06 23-25 Mayo 06 31 Mayo - 6 Junio 06 30 Mayo - 3 Junio 06 4-6 Junio 06 5-6 Junio 06 14-20 Junio 06 24-30 Junio 06 13-14 Julio 06 19 Julio 06 19-22 Julio 06 24-28 Julio 06 29 Julio - 3 Agosto 06 14-17 Agosto 06 11-12 Octubre 06 25-26 Octubre 06
LinuxWorld Conf. & Expo Singapore Fecha: 19 Julio 06 Ciudad: Singapore Sitio Web: www.linuxworldexpo.com
Ciudad Dallas,TX, EE.UU. Wiesbaden, Alemania Milan, Italia ohanesburgo, S. África Sao Paulo, Brasil Tokio, Japón Boston, MA, USA Porto Alegre, Brazil Korea Seúl, Korea Bremen, Alemania Vilanova, España Berlín, Alemania Singapore Ottawa, Canada Portland, EE.UU. Las Vegas, EE.UU. San Francisco, EE.UU. Utrecht, Holanda Londres, R.U.
Sitio Web www.dallascon.com www.linuxtag.org www.linuxworldexpo.it www.linuxworldexpo.co.za www.linuxworldexpo.com www.linuxworldexpo.com www.usenix.org/events/usenix06 http://fisl.softwarelivre.org www.linuxworldkorea.com www.robocup2006.org/start http://2006.guadec.org www.gi-ev.de/fachbereiche www.linuxworldexpo.com www.linuxsymposium.org http://conferences.oreillynet.com www.blackhat.com www.linuxworldexpo.com www.linuxworldexpo.nl www.linuxworldexpo.co.uk
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
Jefe de Producción Francisco Fernández
Traductores Paqui Martín Vergara, Paul C. Brown, Víctor Tienda, Oliver Kurz.
Subscripciones: www.linux-magazine.es/magazine/subs
Maquetación Francisco Fernández Diseño de Portada Pinball info@pinball-werbeagentur.de Publicidad www.linux-magazine.es/pub/ Para España Marketing y Comunicaciones anuncios@linux-magazine.es Tel.: (+ 34) 951 010 556 Fax.: (+ 34) 951 010 516 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 17
Precios Subscripción España: Europa: Resto del Mundo - Euros: Tel.: Fax.: subs@linux-magazine.es
54,90 € 64,90 € 84,90 € (+34) 951 010 556 (+34) 951 010 516
Linux Magazine Linux New Media Spain, S.L. Avda. Juan López Peñalver, 21 29590 - Campanillas Málaga ESPAÑA info@linux-magazine.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 © 2006 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.
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
GuadaGames
vicentecarro@guadagames.com
www.guadagames.com
Exprecom
info@exprecom.com
www.exprecom.com
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 17
97
PRÓXIMO NÚMERO
Número 18
PRÓXIMO NÚMERO LINUX TUNING El Tuning no es sólo cosa de los apasionados de los coches. En el próximo número de Linux Magazine vemos cómo mejorar tu distro Linux, acelerando discos duros, mejorando el rendimiento para aplicaciones multimedia y escogiendo el sistema de ficheros idóneo para cada caso. Primero examinamos cómo conseguir el máximo rendimiento de un disco duro utilizando DMA. Con una simple instrucción las caídas de velocidad de aplicaciones por culpa de las lecturas y escrituras al disco serán cosa del pasado. A continuación enseñamos a optimizar un sistema para aplicaciones multimedia que requieren ejecución en tiempo real. Con unos pocos ajustes al kernel, comprobamos cómo realtime priority puede aumentar la velocidad de reproducción de programas de audio y vídeo. Finalmente ayudamos a los lectores a decidir qué sistema de ficheros es el ideal para cada ocasión. Examinamos las opciones existentes y las comparamos en función de su velocidad, fiabilidad y rendimiento. Si quieres tener un sistema que funcione de manera fiable y como un rayo, no te pierdas el próximo número de Linux Magazine.
MESSENGER BAJO LINUX Todos tus contactos utilizan Windows y no sabes exactamente cómo ponerte en contacto con ellos con mensajería instantánea utilizando Linux. Si esto es un problema, te mostramos las distintas soluciones y cómo empezar a utilizar las herramientas que Linux te proporciona.PostgreSQL.
ANIMACIÓN 3D No hay que hacer una gran inversión en software de diseño 3D para crear películas animadas al estilo de Shrek o Madagascar. De hecho, lo único que hace falta es Blender. En el número 18 de Linux Magazine comenzamos un tutorial que sacará a flote el artista que todos llevamos dentro.
¡PÍDELO EN TU QUIOSCO! 98
Número 17
WWW.LINUX- MAGAZINE.ES