01_okladka.indd 2009-04-14, 16:20 1
Transcripción
01_okladka.indd 2009-04-14, 16:20 1
01_okladka.indd 1 2009-04-14, 16:20 02_rekl_CyberNET.indd 1 2009-04-14, 14:08 a modo de introducción Linux, ¿menos de 1%? Linux, ¿menos de 1%? H oy por la mañana mi amiga me preguntó si Linux era fácil porque quería comprarse un portátil con Ubuntu preinstalado. El otro día otro amigo mío gracias a una Live CD de esta misma distribución sacó sus datos del disco duro en el que falló Windows. En cada parte se puede oír o leer que Linux es más seguro, más barato, que las empresas y la administración pública se instalan este sistema operativo masivamente para ahorrar dinero, que las empresas grandes cada vez venden más equipos con diferentes distribuciones preinstaladas, etc. Pero si todo esto es verdad, ¿cómo es posible que, como muestran las estadísticas en uno de los artículos publicados en la revista, Linux no haya superado todavía el 1% de sistemas utilizados en el mundo? ¿Son estas estadísticas fiables? ¿Creéis que son verdaderas? A lo mejor diréis que nosotros como una revista dedicada a este Sistema Operativo deberíamos saber estas cosas, poseer nuestras propias estadísticas. Pero la verdad es que es muy difícil obtener datos objetivos, las encuestas que solemos realizar entre nuestros lectores no pueden serlo por razones obvias. Por eso tenemos que basarnos en los datos recogidos por otras organizaciones, lo que significa que nos es imposible averiguar su objetividad. Lo que me interesa es, cómo a vosotros os parecen estas estadísticas, ¿creéis en ellas? ¿Realmente tan poca gente utiliza Linux en casa o en el trabajo? Nos gustaría recibir vuestras opiniones acerca de este tema, podéis escribirnos o publicar en nuestro foro. Los autores de las opiniones que publicaremos recibirán 3 números de la revista como regalo. El tema central de este número es Cloud Computing, la tecnología que desde hace algún tiempo gana terreno con gran rapidez. ¿Qué es Cloud Computing? ¿Merece la pena aprovecharlo? ¿Es seguro? Las respuestas a estas y muchas otras preguntas las encontraréis en una serie de artículos que publicamos en este número y que tratan sobre este tema. Esperamos os ayuden a profundizar las posibilidades que nos trae la nueva tecnología y ver los peligros que puede llevar consigo. Además del tema central encontraréis otros artículos sobre los temas como seguridad (¿son realmente seguros nuestros datos?), virtualización (la segunda parte del extenso artículo sobre creación y uso de máquinas virtuales), programación (creación de frontends en Gambas y programación de Aplicaciones de Internet Enriquecidas con Flex y AMFPHP) y mucho, mucho más. ¡Os deseamos buena lectura y nos vemos en julio! Paulina Pyrowicz Redactora Jefe de Linux+ 3 www.lpmagazine.org 03_Wstepniak.indd 3 2009-04-14, 14:08 índice En este número descripción de DVD 6 30 CentOS José Manuel Rodríguez, director de Software de Sun Microsystems Ibérica Pedro Ramón Fariñas La consolidación de Internet como medio de acceso y compartición de la información y como plataforma de comunicaciones por parte de ciudadanos, empresas y gobiernos (ya es utilizada por más de 1.000 millones de personas diariamente en todo el mundo, una cifra que se habrá doblado en 2011) ha forzado a los grandes proveedores de tecnologías de información a evolucionar sus estrategias hacia el aprovisionamiento de todo tipo de servicios informáticos a través de la red como si de un servicio básico y a medida se tratara. novedades 10 Alex Sandoval 12 Francisco Javier Carazo Gil Noticias Ubuntu 13 Juan Gamez 14 Diego Rivero Montes 32 Mandriva Cloud Computing: ¿Stairway To Heaven? Lino García Morales A mediados de los 90 Marc Andreessen (cofundador de la empresa Netscape Communications Corporation y coautor de Mosaic, uno de los primeros navegadores web con interfaz gráfico) predijo que Microsoft Windows estaba destinado a ser un “pobre conjunto de drivers ejecutándose en Netscape Navigator”. Netscape desapareció en Marzo del 2008, sin embargo, su predicción va camino de cumplirse en algún Navegador web. Fedora Cloud Computing 16 Cloud Computing cobra su mayor sentido en una aproximación Open Source Cloud Computing: El sistema operativo EyeOS José B. Alós Alquézar Bajo el término Cloud Computing, se engloba un conjunto de soluciones tecnológicas que permiten ofrecer servicios de computación a través de los protocolos TCP-IP, de forma que todo aquello que pueda ofrecer un sistema informático concreto, tanto a bajo nivel como a nivel de aplicación, es accesible a usuarios ajenos a éste. 22 Cloud Computing: ¿La gran oportunidad para Linux? Diego Gernan Gonzalez Desde la liberación en 1992 de las primeras distribuciones se viene vaticinando el “gran despegue de Linux”. 17 años después ni el interés de grandes empresas como IBM, ni la aparición de una distro orientada específicamente al público masivo como UBUNTU, ni el atractivo innegable para el usuario sin conocimientos de proyectos como COMPIZ han permitido perforar el techo del 1% del mercado. En cuanto al tan deseado aluvión de nuevos usuarios que se esperaba a causa de la desilusión con Windows Vista se quedó en algunos miles, el resto de los no conformes se volvió a XP. 4 04_05_Spis_tresci.indd software 36 Juegos 38 Interconexión de Sistemas Abiertos Francisco Javier Carazo Gil Lino García Morales El modelo de referencia de interconexión de sistemas abiertos (OSI, Open System Interconnection) fue desarrollado por la ISO (Organización Internacional de Normalización) en 1977 para describir las arquitecturas de redes y compatibilizar la comunicación entre los fabricantes de ordenadores. Linux+ 6/2009 4 2009-04-14, 16:42 índice Tema del número Cloud Computing virtualización programación 42 66 Maquinas virtuales, parte II Daniel García En esta segunda entrega nos adentraremos en los detalles de implementación sobre el entorno de prueba. Se detallará paso a paso una instalación de Debian, para los principiantes, clonación de máquinas virtuales y configuración de diversos servicios red, entre ellos: un firewall perimetral, un proxy cache transparente, un servidor DNS, etcétcera. Gestión Potente de Procesos: Creación de FrontEnds en Gambas Jorge Emanuel Capurro GNU/Linux posee infinitas alternativas a distintos programas de aplicación. Muchas de estas son de interfaz de modo texto, lo que lleva al usuario principiante/intermedio a una difícil interacción con el programa. Gambas pensó en este problema, por lo que como era de esperar, nos trae una solución: La creación de FrontEnds. 80 Aplicaciones de Internet Enriquecidas (RIA): Programando RIA con Flex y AMFPHP Matías Barletta ¿Qué programador no quisiera darle a sus usuarios la mejor experiencia de uso, una herramienta intuitiva, fácil de usar y que tenga los beneficios de las aplicaciones web? Además, que el desarrollo e implementación sea sencillo y... placentero. seguridad 58 Su información, ¿a salvo? David Puente Castro (Blackngel) ¿De qué serviría un ordenador si no pudiésemos almacenar información en él? Absurda máquina si esto ocurriese. Pero aun no siendo así, de nada sirve si no podemos mantener esta información lejos de curiosos atacantes. El problema es claro. ¿Hasta qué punto la privacidad de nuestros datos está garantizada? opinión 86 Distribuidores polivalentes Fernando de la Cuadra, director de Educación de Ontinet.com Los administradores de sistemas de las empresas suelen tener que sufrir una gran dicotomía en su trabajo: ¿Windows o Linux? Es una batalla perdida. Por mucho que nos empeñemos, la inmensa mayoría de usuarios va a rechazar un cambio a Linux en los puestos de trabajo mientras sigan teniendo Windows en casa. entrevista 88 Entrevista a Ignacio Molina Palacios, Proyect Manager de AXARnet Comunicaciones 5 www.lpmagazine.org 04_05_Spis_tresci.indd 5 2009-04-14, 15:38 descripción de DVD DVDs Centos 5.3 P or fin ha salido esta tan esperada entrega de Centos, fue liberada el día uno de abril, un poco después de la Scientif (también basada en Red Hat y liberada el día veintiocho de marzo). Es curiosa la larga espera que se ha tenido que sufrir hasta la aparición de esta versión pues la 5,3 de Red Hat fue liberada el 20 de enero, aunque queda patente que esta demora no es responsabilidad de la comunidad desarrolladora de Centos al darse el caso también en otras distribuciones derivadas de Red Hat. Casi todas estas distribuciones como también se da el caso en Debian tienen un pequeño inconveniente que se convierte a la vez en ventaja, tienen paquetes algo antiguos, lo que aunque no te ofrece las últimas novedades hace que sea mucho más fiable al estar más probados sus paquetes. Si se quieren las últimas novedades habría que recurrir a Fedora. Bueno, vamos a dejarnos de comentarios que pueden ser más o menos interesantes o curiosos y vamos a lo que realmente nos importa, la instalación y configuración básica de Centos. Lo primero es disponer de soporte de instalación, bien sea DVD o CD, en este caso nos decantaremos por la instalación desde el DVD que acompaña este número de la revista, si necesitamos los CD por que el equipo en el que lo vallamos a instalar no posea lector para DVD podremos obtenerlos en www.centos.org . Una vez arrancamos desde la unidad lectora la primera pantalla que nos encontramos nos ofrece varias posibilidades de arranque, en nuestro caso para instalar y teniendo en cuenta que nuestra máquina tiene suficiente procesador y RAM y vamos a instalar también el entorno gráfico nos decantamos por la instalación por defecto y pulsamos enter, en caso de instalar un servidor la mayoría de las veces no instalamos el entorno gráfico por lo que habría que modificar los parámetros de arranque para instalación de modo texto, prestando especial atención a que no necesitemos el entorno gráfico para el servidor como se da el caso en algunas bases de datosa aplicaciones de ERP y BW. El siguiente paso que nos pide como en casi todas las versiones de Red Hat y distribuciones derivadas es la comprobación del disco, en este caso no es necesario y si la hemos descargado de Internet pasándole después la suma MD5 de comprobación se puede decir que tampoco, pero si tenemos dudas de la integridad del soporte es muy recomendable. En nuestro caso al provenir de una fuente de confianza omitiremos este paso seleccionando Skip con el tabulador el enter. En estos momentos empieza a cargar 6 06_07_Opis_DVD.indd el Anaconda, instalador gráfico de Red Hat utilizado también por otras distribuciones como puedan ser sus derivadas u otras tan dispares como Linex o Valdemoro (Hasta donde sé a día de hoy discontinuada). Pulsamos siguiente y el primer paso consiste en la selección de idioma para ello tenemos la opción de recorrernos la lista buscándolo o empezar a escribirlo para que nos lo vaya buscando la instalación y ya nos movemos por muchas menos opciones, yo siempre me decanto por esta segunda opción (Hay que escribirlo en inglés). Seleccionamos el teclado adecuado, normalmente nos sirve el que viene por defecto y procedemos al particionado del disco, tenemos varias opciones para ello desde todo por defecto para no complicarnos la vida hasta hacer las particiones de manera automática, en este caso como prima el valor didáctico al productivo nos decantamos por la opción de crear diseño personalizado. Normalmente se ha hablado de la necesidad de tres particiones -una para el sistema, otra para datos y la última para swap (aunque actualmente podemos hablar de la necesidad de simplemente dos por la RAM que suelen tener los equipos que hacen innecesaria la partición para swap), aunque en este caso vamos a crearla. En primer lugar vamos a crear la partición raíz y le vamos a dar por ejemplo cuatro gigas de espacio para ello nos vamos a nuevo, ponemos punto de montaje /, la dejamos como ext3 y la forzamos como primaria, en segundo lugar crearemos la swap (la que se dice que como norma general tendrá el doble de espacio que la memoria RAM hasta que llegue ésta al medio giga, después tendrá la misma dimensión) para ello nos vamos a nuevo, ponemos swap y le damos el tamaño deseado y con lo que quede hacemos la tercera partición ext3 definiendo el punto de montaje como /home. Cuando ya tenemos nuestras particiones definidas procedemos a lo que es ya la instalación en sí, es decir la copia de archivos al disco, lo primero que nos pide es en qué partición deseamos instalar, en nuestro caso nos decidimos por la sda1 que es la que hemos preparado a tal efecto, y dejamos que nos instale el gestor de arranque grub en este caso, el que podemos modificar desde aquí mismo para adecuarlo a nuestras necesidades. El siguiente paso es el de la configuración de la red, en nuestro caso es a través de un servidor de DHCP ubicado en el ruter de conexión a Internet, en caso de que en vuestra red de área local tengáis configurada ip fija tendréis que rellenar los otros campos. Seleccionamos la zona horaria y ya nos pide la contraseña de root para después proceder a seleccionar los paquetes a instalar. En nuestro caso vamos a personalizar la instalación ahora, seleccionamos esa opción, pulsamos en siguiente y ya nos muestra los paquetes a instalar separados por categorías, en mi caso voy a instalar el entorno de escritorio gnome por defecto, las herramientas de autoría y publicación, los editores, gráficos, la Internet (tanto gráfica como texto), las herramientas de oficina, el sistema base, las herramientas de administración. Pulsamos siguiente, nos comprueba las dependencias y después ya nos indica Figura 1. Pantalla de arranque de Centos 5,3 desde la que podemos modificar los parámetros de arranque que deseemos para la instalación Linux+ 6/2009 6 2009-04-14, 14:09 descripción de DVDs DVDs • Figura 2. Aquí tenemos nuestra tabla de particiones con las tres definidas que va a proceder a la instalación de los paquetes seleccionados. Una vez completada la copia de archivos comenzamos con la configuración básica del sistema. El primer paso es el cortafuegos, si el equipo está conectado directamente a Internet es obligatorio tenerlo habilitado y si está dentro de una red de área local protegida por un cortafuegos lo podemos deshabilitar y nos es más sencilla la administración, cuestión de gustos. Luego nos pregunta por la configuración del SecurityEnhanced Linux (SELinux), un parche para mejorar la seguridad de linux que o es un entorno de muy alta seguridad o no es recomendable su empleo por que la complejidad de su configuración en un principio merma notablemente la productividad. Tras esto llega el momento de poner en hora el sistema. El siguiente paso es la creación de un usuario,muy importante si no quieres trabajar siempre como root. Y para finalizar la instalación comprobar la tarjeta de sonido y si hacen falta Cd's adicionales. Ahora si se quiere se puede instalar compiz para efectos 3D o las aplicaciones que necesitemos pero al usarse principalmente en servidores no le vamos a instalar escritorios que consuman recursos de la máquina de forma innecesaria ni a mostrar la configuración de servidores porque si no, nos alargaríamos más de lo conveniente. Por Pedro Ramón Fariñas BitDefender Antivirus Scanner for Unices Integración basada en Scripts y extensiones con diferentes aplicaciones y servicios: – Cliente de correo (Ej. Pine, Evolution) y servicios de Servidor de Correo, – Servicios de programación (ej. Cron) para asegurar la automatización del análisis y. actualización. – Análisis clásico de línea de comando completo con una interfaz gráfica para una mayor integración con los entornos desktop. – Inclusión automática del GUI del análisis al menú del sistema. – Plugins Open source para tres de los más populares administradores de archivos: Konqueror (KDE), Nautilus (GNOME) y Thunar (Xfce). – Configuración de acción basada en el tipo de resultado del análisis. Requisitos del sistema • • • • • • • Sistema operativo:Linux, FreeBSD Linux Kernel: 2.4.x or 2.6.x (rec.) FreeBSD: 5.4 (o superior con compat5x) glibc: version 2.3.1 o superior, y libstdc++5 desde gcc 3.2.2 o superior Procesador: x86 compatible 300 MHz; i686 a 500MHz rec.; amd64(x86_64) Memoria mínima: 64MB (128MB rec.) Espacio libre mínimo en disco duro: 100MB BitDefender Antivirus Scanner for Unices es una versátil solución antivirus bajo demanda diseñada Distribuciones soportadas para sistemas Linux y FreeBSD. Ofrece análisis antivirus y antispyware para UNIX y particiones • RedHat Enterprise Linux 3 o superior • SuSE Linux Enterprise Server 9 o superior basadas en Windows. • Fedora Core 1 o superior Características principales • Debian GNU/Linux 3.1 o superior • Slackware 9.x o superior • Análisis antivirus y antispyware bajo de- • Mandrake/Mandriva 9.1 o superior manda. • FreeBSD 5.4 o superior Política de licencia La solución BitDefender Antivirus Scanner for Unices es totalmente gratuita únicamente en el caso de usuarios domésticos. Si desea utilizar BitDefender Antivirus for Unices con fines comerciales, la licencia deberá ser comprada en la tienda online de BitDefender o a través de la red de distribuidores oficiales de BitDefender. EyeOS, Cloud Computing Operating System En el DVD encontraréis la distribución EyeOS, versión 32 bit. Sobre la distro y su uso podréis leer en el artículo de José B. Alos incluido en la revista. Figura 3. Centos 5.3 con escritorio Gnome 7 www.lpmagazine.org 06_07_Opis_DVD.indd 7 2009-04-14, 14:09 08_09_rekl_ES045_B_LinuxPlus_0609.indd 2 2009-04-20, 15:54 08_09_rekl_ES045_B_LinuxPlus_0609.indd 3 2009-04-20, 15:54 NE WS novedades Noticias sección llevada por Alex Sandoval [email protected] Nftables, el nuevo firewall de Linux Al igual que ocurrió en el pasado con ipfwadm e ipchains, ahora le toca a iptables ir preparándose para quedar aparcado en el baúl de los recuerdos. El grupo encargado de Netfilter ha publicado una versión preliminar del que previsiblemente será su sucesor: nftables. La nueva herramienta es más adaptable, tiene una sintaxis más simple y permite ejecutar más de una acción por línea. Nftables está formado por tres componentes: la implementación en el kernel, la biblioteca de comunicación (libnl) y el frontend. La reescritura ha sido necesaria ya que cada vez estaban siendo incluídas más extensiones en netfilter que resultaban difíciles de manejar para quienes administraban los sistemas. Se ha decidido, además, sacar del kernel la mayor parte del sistema de evaluación de reglas. El código se encuentra actualmente en estado alpha, lo que quiere decir que se puede empezar a experimentar con él. http://softlibre.barrapunto.com/softlibre/09/ 04/06/117240.shtml Ututo XS 2009 Finalmente se anunció el lanzamiendo de Ututo XS 2009, la más reciente actualización de la primera distribución GNU/Linux argentina. Esta nueva versión está disponible en formato LiveDVD e incluye importantes novedades, como por ejemplo: Soporte para conexión a redes de datos móviles (GPRS y 3G), mejor capacidad de placas de video con acceleración gráfica, se fusionan la versión instalable y el autoejecutable (Vivo!) en un solo DVD, Soporte para las MacBook Mac mini de Apple y las netbooks MSI Wind y ASUS EeePC, Kernel 2.6.28.1 con capacidades extendidas de detección de hardware, hibernación y suspensión del sistema. Para más adelante, el proyecto de Ututo promete versiones optimizadas para procesadores AMD de 32 y 64 bits, Intel de 64 bits e incluso el Intel Atom. https://www.ututo.org/www/modules/news/ news.php?ID_news=339 Brasil ahorró US$ 167,8 millones usando software libre B rasil es uno de los países más comprometidos con los programas de código abierto de latinoamerica y del mundo. Esa fidelidad al software libre le trajo un beneficio directo que según un cálculo de la organización Servicio Federal de Procesamiento de Datos (Serviço Federal de Processamento de Dados, Serpro) del Ministerio de Hacienda, muestra que en los últimos 12 meses, Brasil ha ahorrado 370 millones de reales, unos US$ 167,8 millones de dólares, con el uso de sistemas operativos, navegadores de Internet, correo electrónico y software libre para diversos fines. Según Marcus Vinicius Ferreira Mazón, presidente del Serpro, la cantidad podría ser aún mayor, ya que apenas 62 de las 90 reparticiones consultadas respondieron la encuesta. Las instituciones que contestaron cuentan en total con 2 millones de equipos. El Serpro utiliza Fedora en sus ordenadores, además de soluciones de correos electrónicos Carteiro y Expresso. Actualmente, todas las dependencias del gobierno federal tienen alguna experiencia con software libre, pero todavía existe potencial de desarrollo. La previsión indica que este ahorro continuará creciendo. “Conforme se verifican los resultados positivos de la tecnología libre, su uso aumenta fuertemente”, resumió Ferreira, quien señaló que los programas de código abierto son superiores no sólo por su precio, sino también por su adaptabilidad. El ahorro permitió la instalación de 5.000 telecentros para el programa de inclusión digital en comunidades carentes. Después de la adopción del uso del software libre por parte del Gobierno brasileño, el 40% El ahorro permitió la instalación de 5.000 telecentros para el programa de inclusión digital en comunidades de escasos recursos de los organismos estatales ya implementó sus programas hasta el usuario final con sistemas de código abierto. El 15 de abril, el Serpro hizo accesible para el público una plataforma para desarrollo de programas informáticos llamada Demoiselle en homenaje al piloto brasileño Santos Dumont, quien en 1907 dejó libre el patente del avión que diseñó en Francia. Esta buena noticia muestra a otros países, que existe vida más allá de MS Office y sistemas operativos pagados en las instituciones gubernamentales. http://tecnologia.terra.com.br/interna/ 0,,OI3685118-EI4795,00-Governo+economiza+ R+mi+com+sistemas+operacionais.html Gmail te permite arrepentirte Los desarrolladores de Gmail siguen agregándole funciones a su popular servicio de correo electrónico. Antes fue un sistema para adjuntar archivos y agregaron una herramienta para evitar que mandes correos estando ebrio. Ahora el correo electrónico de Google te permitirá cancelar el envío de un correo cuando te des cuenta que la dirección está mal escrita, el mensaje está incompleto o te arrepientes de haber enviado ese correo a tu jefe. Esta opción “Undo Send” se activa en Gmail Labs y entrega aproximadamente 5 segundos de reflexión después de presionar el botón “Enviar” para detener el viaje por internet. Después de ese lapso, ya no hay nada que hacer. Esta aplicación es ideal para aquellos usuarios de dedos rápidos que presionan impulsivamente “Send”, lo que les puede acarrear más de algún problema personal o laboral. http://gmailblog.blogspot.com/2009/03/newin-labs-undo-send.html 10 10_11_News.indd Sun termina negociaciones con IBM y acciones se desploman L as acciones de Sun Microsystems Inc. cayeron más del 22 por ciento tras rechazar una oferta de compra de IBM por 7.000 millones de dólares, lo que dejó a la productora de servidores y programas vulnerable a demandas de sus accionistas. Mientras aún creen que las negociaciones podrían reactivarse, una fuente cercana con información sobre el asunto dijo que los contactos cesaron el fin de semana luego de que Sun rechazara la oferta de IBM de 9,40 dólares por acción. Las acciones de Sun cayeron un 22,5 por ciento a 6,58 dólares, aunque siguen cotizán- dose por arriba del nivel de 4,97 dólares, que era el valor del papel antes de que las negociaciones con IBM fueran reportadas por primera vez en marzo de este año. La primera reacción de Sun fue asegurar que no habrá cambio de nombres en la cúpula. Nuestra política es no comentar rumores o especulaciones. Lo que podemos decir es que Sun sigue comprometida con su equipo de liderazgo, estrategia de crecimiento y con crear valor para los accionistas, dijo la empresa en un comunicado enviado por correo electrónico. El comunicado llegó en medio de especulaciones de que el fin de la negociación con Linux+ 6/2009 10 2009-04-14, 14:11 novedades sección llevada por Alex Sandoval [email protected] Noticias IBM podía provocar la renuncia del presidente ejecutivo, Jonathan Schwartz. Muchos analistas creen que tomar la oferta de IBM hubiese sido la mejor opción para Sun, que está perdiendo participación de mercado, y que el cese de las negociaciones dejó en evidencia que tenía una posición mucho más débil que el comprador. Parece que están en un dilema. La historia operacional de Sun en los últimos cuatro a ocho trimestres no parece estar funcionando bien para ellos, ni tampoco sus esfuerzos por vender activos, dijo Tom Smith, analista de S&P Equity Research. El analista bajó la recomendación para los papeles de Sun a vender de mantener y también redujo su precio objetivo de 12 meses a 6 dólares de 9,50 dólares. Fuentes financieras aseguran que Sun se ha estado ofreciendo en el mercado por meses y que aparentemente no apareció ningún otro interesado más que IBM. Las fallidas negociaciones con IBM implican que Sun debería tomar una oferta aún menor, o peor aún, ninguna oferta. Otros creen que Sun podría venderse en partes a distintas empresas de software que no quieren, o no pueden pagar, la empresa en su totalidad. Otro Yahoo! dente ejecutivo, Jerry Yang, rechazó una oferta de Microsoft por 47.500 millones de dólares el año pasado. Yang eventualmente renunció en medio de fuertes críticas y fue reemplazado por Carol Bartz. Algunos analistas han dicho que de haber aceptado la oferta de Microsoft se habría creado 30.000 millones de dólares de valor para los accionistas de Yahoo. De verdad esperamos que a los accionistas no les toque un Yahoo, dijo Keith Wirtz, presidente de inversión de Fifth Third Asset Management, que tienen acciones tanto de Sun como de IBM. Si bien IBM ha estado negociando el precio de la adquisición a la baja, según una fuente, su última oferta aún representaba un premio de un 89 por ciento frente al precio de los títulos de Sun cuando por primera vez se habló de las discusiones a mediados de marzo. Dado el tamaño del premio y considerando que el directorio de Sun ha encabezado una baja de las acciones de la empresa en los últimos ocho años desde los 250 dólares a menos de 5 dólares, creemos que Sun va a enfrentar un malestar significativo de los accionistas, dijo el analista Toni Sacconaghi de Sanford C. Bernstein. Sun es actualmente encabezada por Jonathan Schwartz, quien reemplazó a Scott McNealy en el 2006. McNealy, uno de los fundadores del pionero de Silicon Valley, se mantiene como presidente del directorio. Algunos pronostican que Sun puede exponerse a la ira de sus accionistas, como le ocurrió http://www.emol.com/noticias/tecnologia/ a Yahoo cuando su fundador y entonces presi- detalle/detallenoticias.asp?idnoticia=352520 NE WS Publicada la versión 2.6.29 del kernel Linux Linus Torvalds ha hecho oficial la disponibilidad del kernel Linux 2.6.29, tras meses después de la publicación del 2.6.28. Esta nueva versión, además del cambio temporal de mascota, cuenta entre sus nuevas características con el soporte de modesetting del subsistema gráfico, integración de la tecnología WiMAX, soporte de puntos de acceso Wi-Fi, el sistema de archivos SquashFS, una versión preliminar de Btrfs, una versión más escalable de RCU, cifrado de nombres de archivos con eCryptfs, modo no journaling de ext4, checksums para metadatos de OCFS2, nuevos drivers y muchas otras mejoras menores. http://softlibre.barrapunto.com/softlibre/09/ 03/24/1044208.shtml G-Monster PCIe: PhotoFast anuncia un SSD de 1TB de capacidad Una noticia de hardware. Como ya hemos comentado en varias ocasiones anteriormente, el desarrollo de discos SSD sigue avanzando a pasos agigantados. Ahora la compañía japonesa Photofast ofrece las unidades de 256GB, 512GB y 1TB de capacidad. Igual de sorprendente es la velocidad de lectura y escritura de estas, ya que alcanzan tasas de transferencia de 750 y 700MB/s en cada caso. http://www.fayerwayer.com/2009/03/g-monster-pcie-photofast-anuncia-un-ssd-de-1tb-decapacidad/ EVO Smart: una nueva consola basada en Linux Envizions ha anunciado que ya se puede reservar su propia consola Linux, es la EVO Smart. Si la analizamos bien nos daremos cuenta que es un ordenador con forma de consola ya que tiene un procesador AMD Athlon 64 x2 5600 a 2.4 GHz, 2 GB de memoria RAM DDR2, su disco rígido es de 120 GB de almacenamiento y tiene una tarjeta gráfica ATi HD 3200. No menos destacable es que la EVO Smart usa una versión de Fedora de arranque rápido (conocida como Mirrors) y que Envizions tiene planeado vender juegos desde la web en tarjetas SD por un precio de 20 €. http://www.evosmartconsole.com/ Mandriva ayuda a portar K3B a Qt4 Muchos analistas creen que tomar la oferta de IBM hubiese sido la mejor opción para Sun, que está perdiendo participación de mercado Mandriva decidió ayudar a portar el popularísimo y premiado software de grabación de CDs y DVDs K3B a Qt4. Dos ingenieros del equipo de KDE de Mandriva comenzarán a trabajar con Sebastian Trueg, el desarrollador principal de K3B, para que su renovada versión pueda lanzarse más temprano y así incluirse en la versión final del próximo Mandriva 2009.1 "Spring". El resultado será que K3B podrá usar todo el poder de la plataforma de KDE4, como Solid, Phonon y todo el entorno Plasma. http://www.vivalinux.com.ar/eventos/ mandriva-k3b-a-qt4 11 www.lpmagazine.org 10_11_News.indd 11 2009-04-14, 14:11 novedades Ubuntu sección llevada por Francisco Javier Carazo Gil [email protected] Fedora 11 vs Ubuntu 9.04 Los seguidores de Ubuntu estamos acostumbrados a no poder disfrutar de lo último en las versiones más actuales de nuestra distribución preferida. Por sólo poneros un ejemplo, mirad esta comparativa entre Ubuntu y Fedora: • Kernel: 2.6.29 (Fedora) vs. 2.6.28 (Ubuntu), • Firefox: 3.1 (Fedora) vs. 3.0 (Ubuntu), • Thunderbird: 3.0 (Fedora) vs. 2.0 (Ubuntu), • OpenOffice: 3.1 (Fedora) vs. 3.0 (Ubuntu). Como podéis apreciar Fedora 11 viene mucho mejor equipada en cuanto a últimas versiones de software muy importantes que Ubuntu 9.04, pero ¿por qué Canonical no incorpora las últimas versiones? La estabilidad es uno de los aspectos que más se le critica a la distribución de Canonical en comparación con otras como Debian o Slackware que aseguran fiabilidad en todas las circunstancias. La empresa creada por Shuttleworth ha llegado a una solución de compromiso entre tener versiones modernas del software y tener versiones estables. Las versiones que trae consigo Fedora son tan modernas que están llenas de bugs, como el tan comentado del sistema ext4, y que pueden tener consecuencias nefastas. En el caso de Ubuntu, el software que se incopora está más pulido y tenemos la seguridad de que su estabilidad es superior, aunque no esté tan contrastada como las versiones veteranas y no modificadas que incorporan otras distribuciones. Quinto cumpleaños... Y ahora que lo pienso me parece que fue ayer cuando en la universidad oí hablar a un compañero de una distribución llamada Ubuntu. La primera impresión, con los tonos marrones, no me resultó buena en absoluto y tuvo que pasar 1 año para que me decidiera a sustituir mi antigua Mandrake por esta distribución de la que cada vez leía más líneas en la red. Su nombre Ubuntu, la versión con la que empecé la 5.10 y aunque he probado otras muchas, ninguna me ha gustado tanto como Ubuntu (al menos hasta el momento). Esperemos que este cumpleaños, el quinto, sea sólo uno más y que se repitan durante años y podamos ver cada 6 meses novedades y una mejor posición para batallar contras los otros sistemas operativos de escritorio. ...cumpliendo los plazos Si algo caracteriza a Ubuntu es su exquisita puntualidad con respecto a otras distribuciones y proyectos de software libre a la hora de cumplir los plazos de salida. Hace ya un tiempo, en la versión que debió ser la 6.04, hubo un retraso y al final salió en Junio, por lo que su nombre cambió a 6.06. A excepción de este caso, las faltas de puntualidad han sido mínimas y la posibilidad de ver la planificación del proyecto a meses vista es todo una ventaja tanto para los usuarios domésticos como para los profesionales. Ni siquiera proyectos comerciales cumplen los plazos en la medida en que lo hace Ubuntu. 12 12_Ubuntu.indd Ubuntu 9.04 Jaunty Jackalope L a última versión de Ubuntu ya está disponible y con ella, todas las novedades que se esperan de la distribución más popular del mundo GNU/Linux en el mercado del escritorio. Antes de comenzar a comentar las novedades que incluye, como siempre, vamos a conocer el significado de las dos palabras clave que lo identifican. Jaunty significa alegre y el Jackalope, es un animal mitológico mezcla de liebre y antílope. Ya podemos empezar a comentar las novedades de ésta, como siempre, esperadísima versión. Soporte para el sistema de ficheros ext4 Gnome 2.26 Soporte para suspender e hibernar mejorado La primera novedad es la inclusión de la nueva versión del entorno de escritorio Gnome. Sin lugar a dudas, es una de las partes más importantes del sistema puesto que es la que la mayoría de lo usuarios utilizan para comunicarse con el mismo. Además de mejoras menores, incluye Brasero por defecto como grabador de CDs en sustitución de Gnome Baker (algo que ya hizo Ubuntu en la versión anterior) y aparte un mejorado sistema de manejo de mútiples monitores. Servidor X.org 1.6 Nueva versión del servidor X (el que soporta todos los gráficos en el sistema). Incluye un soporte mejorado para muchas tarjetas gráficas y aparte mejoras de rendimiento tanto en 2D como en 3D en muchas otras. Arranque mejorado El sistema de ficheros más extendido del mundo GNU/Linux, el ext, tanto en su versión 2 como en la 3 tiene ya un sustituto llamado ext4. Mucho se ha hablado de si merece la pena incorporarlo por las mejoras en rendimiento que ofrece y por los problemas que han surgido en la fase beta del mismo. Por ahora, personalmente no lo recomiendo y en lugar de usar ext4 utilizarías reiserfs si queréis probar algo distinto a ext3. El soporte está incluido, por lo que los más valientes tenéis libertad para probarlo. Dos de los aspectos más criticados en sistemas GNU/Linux, la no posibilidad en muchas ocasiones de suspender e hibernar, han sido objeto de un importante esfuerzo para mejorar la compatibilidad con todo tipo de sistemas hardware, en especial, con los portátiles y ultraportátiles que son los dispositivos que más manejan esta opción, debido al ahorro de energía que suponen. Soporte mejorado para “hotkeys” Las hotkeys, las combinaciones de teclas que permiten modificar aspectos como el brillo de la pantalla, subir el volumen o permutar la salida de gráficos, son de especial importancia cuando se trata, al igual que en el caso de las suspensión y la hibernación, de dispositivos como los portátiles y los ultraportátiles. Se ha mejorado la compatibilidad aunque desde Canonical se pide que los dispositivos en los que no funcione esta posibilidad sean notificados para así poder aumentar el número de dispositivos compatibles. La gran cantidad y variedad presente en el mercado impide una compatiblidad total cuando los fabricantes de hardware no dan demasiadas facilidades. Mejoras en el sistema de arranque para rebajar el tiempo en que el sistema es utilizable por los usuarios. Éste ha sido uno de los aspectos que Ubuntu siempre ha procurado mejorar respecto a otras distribuciones desde hace tiempo. Se han paralelizado procesos y se han hecho más eficientes otros para mejorar el tiempo de carga Kerneloop La instalación por defecto de kerneloop posibidel sistema sin perder estabilidad. lita que en caso de un fallo kernel, incluso de un Kernel 2.6.28 kernel panic, error que deja al sistema totalmenGracias a él Ubuntu soporta ahora ext4 (punto te bloqueado como a lo mejor habéis probado del que hablaremos a continuación) y ade- alguna vez vosotros mismos, la información más trae otras novedades importantes, como del mismo se almacene y se transmita en el sison: GEM, un gestor de la memoria gráfica; guiente arranque a un servidor donde se gestiosoporte de Ultra Wide Band (UWB); USB nará dicho error para ver las posibles fuentes del inalámbrico; y UWB-IP, escalabilidad de la ges- mismo y evitar que se produzca de nuevo. Éstas tión de memoria, además de otras muchas y algunas novedades más, como el nuevo sistemejoras técnicas que podéis consultar en la ma de notificaciones del que se ha modificado la red. Además de por supuesto las mejoras en estética y se han añadido transparencias, hacen compatibilidad hardware que trae cada nuevo de esta versión, una lanza más en la larga guerra kernel. de los sistemas operativos de escritorio. Linux+ 6/2009 12 2009-04-14, 14:11 novedades Mandriva sección llevada por Juan Gamez [email protected] Mandriva impulsando el software libre M ientras esperamos la publicación de la nueva Madriva 2009 Spring con KDE 4.2, Gnome 2.26, firefox 3 y otras muchas novedades que ya comentaremos en su debido tiempo, querría hablaros un poco de lo que está haciendo Mandriva como divulgador y como optimizador del mundo GNU/Linux y del software libre en general. Es decir que es lo que Mandriva está aportando y ayudando fuera de su distribución y dentro del software GNU/Linux. Hace poco en el blog oficial de Mandriva (http://blog.mandriva.com/) leíamos que Mandriva había decidido ayudar a portar el famoso software de grabación de Cd y DVD k3b a qt4.2. es decir que ingenieros del equipo KDE de Mandriva trabajarían junto al líder de desarrollo del proyecto de k3b, Sebastian Trueg, para que la nueva versión de este popular programa fuera publicada lo antes posible, incluso a tiempo de ser incluida en Mandriva 2009.1 Spring. Con este trabajo se conseguirá que k3b utilice toda la potencia de la plataforma KDE4. Según nos cuenta en el blog He portado el soporte para arrastrar y soltar, arreglado la gestión de plugins, y algunas otras cosas que se rompieron con el cambio de KDE3 a KDE4. Esto generará una aplicación aún mejor y más depurada. Así mismo en su versión 2009.1 Spring Mandriva ha decidido incluir el Qt Creator, un IDE multiplataforma orientado al desarrollo con C++ y Qt desarrollado por Qt software, nombre con el que renombró Nokia a Trolltech el 29 de septiembre de 2008, meses después de su compra. Con este IDE podremos crear proyectos en C++, además incorpora un diseñador de formularios, autocompletado y reconocimiento de propiedades y métodos, y como es usual en los productos de Trolltech, una abundante documentación integrada. Además incluye una herramienta de debugger y abundantes nuevas opciones. Mandriva es una de las primeras distribuciones de GNU/Linux que ofrece este IDE desde sus repositorios, estando, a partir de Mandriva 2009.1 Spring, a disposición de los usuarios dentro del repositorio Main. Estos son solo dos de los ejemplos más recientes, a estos podemos incluir el impulso que dio Mandriva a Pulse Audio al ser la primera distribución en incluirla, o bien, la fuerte apuesta que ha realizado Mandriva en el área de escritorios 3D, tanto con Compiz como con su escritorio propio Matisse. Todo esto hace que Mandriva sea una de las distribuciones que más a la vanguardia se encuentra en el mundo GNU/Linux. Incorpora en cada lanzamiento las últimas versiones y novedades tanto del núcleo como de aplicaciones. Esto podría llevar asociado una inestabilidad de la distribución, pero gracias al duro trabajo de los ingenieros de Mandriva, siempre se encuentra un equilibrio entre lo nuevo y lo estable. Por todo ello, Mandriva sigue siendo nuestra distribución favorita, no solo por su calidad sino por el interés y compromiso tanto con el software libre como con su comunidad de usuarios, esto último, muy valorable pues no debemos de olvidar el carácter de empresa privada que es Mandriva. Mandriva Enterprise Server 5 beta Se ha anunciado el inicio del periodo de pruebas de Mandriva Enterprise Server 5. Este producto es el sustituto del Corporate Server 4 y está basado en la versión 2009.0 de Mandriva. Entre las características más destacables tenemos: • Si se escoge un entorno grafico se instalará un sistema GNOME con los mínimos requisitos. • Nueva guía de configuración vía web para las funcionalidades propias de un servidor: correo electrónico, servidor de impresión, servidor de archivos, etc. • Todos los servicios son gestionables desde Mandriva Directory Server. • Vitalización con Xen y KVM. Mandriva está interesada en recabar toda la información, errores, etc. de las pruebas que realicen los usuarios. Podéis descargarla de: https:// my.mandriva.com/mes5/beta/ Mandriva y el Google Summer of Code 2009 Mandriva ha anunciado su disposición de apoyar a participantes en el Google Summer of Code. Para ello debemos proponer nuestros proyectos en el wiki de Mandriva (http://wiki.mandriva.com/ en/Google_Summer_of_Code_2009_ Ideas). Google Summer of Code 2009 consiste en el patrocinio por parte de Google a desarrolladores de software libre para llevar a cabo el proyecto propuesto. Un proyecto debe de ser guiado por un mentor, en este caso los mentores pertenecerían a Mandriva. Mandriva Pulse 2 v.1.2 Mandriva ha anunciado la publicación de Mandriva Pulse 2 en su version 1.2. Mandriva Pulse 2 es una herramienta Open Source para la gestión de ordenadores portátiles y sobremesa, así como servidores. Mandriva Pulse 2 mantiene un inventario del software y hardware de cada ordenador en su base de datos, así como el despliegue y actualización de aplicaciones. Otras características incluyen el diagnóstico y los módulos de control remoto. Podéis bajaros una versión de evaluación (como imagen de WMware) de: https://my.mandriva.com/pulse-2/ preview/ Mandriva Pulse 2 v.1.2 13 www.lpmagazine.org 13_Mandriva.indd 13 2009-04-14, 14:11 novedades Fedora sección llevada por Diego Rivero Montes [email protected] ¿Stallman contra Linux? Según se ha publicado en el diario Público en su página web, el padre del movimiento del Software libre no dejó títere con cabeza en su conferencia ofrecida el día 4 de marzo en el Medialab Prado de Madrid. Arremetió según el periódico contra Microsoft y Apple porque son ...representantes de una industria que quiere imponer la dictadura de los programas privativos.... Los fabricantes de móviles no se quedaron sin su ración, manifestando además Sería más cómodo para mí tener móvil, pero hay cosas más importantes que la comodidad, pero la mayor concentración de su ira se la dedicó a Linus Torvalds y su creación, No es justo que el trabajo que hemos hecho desde hace 25 años se atribuya a uno [en referencia a Torvalds] que está en contra de los valores del software libre, dijo Stallman entre el silencio de los asistentes. http://www.publico.es/ciencias/206550/ stallman/linux/software/libre Fedora 8 EOL Para los usuarios que aún siguen aferrados a Fedora 8 ésta es sin duda una mala noticia, ya que lo que anunciamos es el fin del soporte para la versión octava de Fedora. Pues sí, ya en enero se produjo el End of life, lo que significa que desde entonces los que aún disfruten de las bondades de esta release ya no tienen actualizaciones de ningún tipo para las aplicaciones implementadas en ella y que los bugs que se hayan encontrado para esta versión en especial se darán como cerrados sin solucionar. Bueno, todo no va a ser malo, para todos aquellos que aún sean usuarios e esta versión les animamos a actualizarse y migrar a una versión más reciente que de lo más seguro no les defraudará en absoluto. Fedora Paraguay El nacimiento de nuevas comunidades en Linux siempre es una buena noticia y en este caso aún más ya que se ha producido el lanzamiento del sitio oficial de Fedora Paraguay, lo cual deja patente que la comunidad Fedora es una comunidad viva, unida y que crece día a día. En efecto en marzo inició su andadura en la web y desde aquí queremos dar la más cordial felicitación a los que han hecho posible esta gran idea. http://proyectofedora.org/paraguay/ Fedora… Cada vez más usuarios No es de extrañar al menos para la comunidad Fedora que el resto del mundo Linux se vea sorprendido gratamente por las cualidades de las últimas versiones de esta distribución. Las estadísticas, aunque siempre frías, no dejan lugar a dudas y nos muestran un incremento del 15% de usuarios en Fedora 10 respecto a la anterior versión. Entre los motivos que se apuntan como responsables de este aumento de usuarios podemos citar: el hecho de que la innovación sea un compromiso del equipo realizador, que la calidad sea una conditio sine qua non, y que es acreedora de una de las mayores y mejores comunidades de apoyo de Linux. 14 14_Fedora.indd GNOME 2.26 para Fedora 11 A quí tenemos la última entrega del escritorio GNOME, uno de los más populares entornos de escritorio. GNOME es sin duda uno de los que más han sido enfocados a la facilidad de uso, con unas características en lo que se refiere a estabilidad e internacionalización que pocos se acercan a lograr además de poseer una accesibilidad digna de encomio. Además de tratarse por supuesto de Software Libre, lleva consigo las más usuales herramientas que todos necesitamos y deseamos encontrar en un equipo de nuestros tiempos ya sea si queremos enviar un e-mail, chatear, visitar webs, gestionar grupos de trabajo y archivos, jugar, etc. Igualmente para aquellos que se dedican al desarrollo no se ha dejado de lado esta vertiente de la plataforma, convirtiéndose e una de las más potentes en vías a la creación tanto para escritorio como si se trata de dispositivos móviles. El proyecto GNOME se centra en los usuarios y la usabilidad, y continúa en GNOME 2.26 con cientos de arreglos y mejoras pedidas por los usuarios. Este impresionante número de mejoras hacen imposible listar cada cambio que se ha realizado pero esperamos resaltar algunas de las características orientadas al usuario más excitantes de este lanzamiento de GNOME: • • • • • GNOME 2.26 • • • • Soporte para múltiples monitores y proyectores, Comunicación casi telepática, Barra de direcciones de Epiphany, Integración de lector de huellas. Y muchos otros cambios que harán el deleite de los usuarios. Novedades para los desarrolladores No se trata sólo del escritorio, GNOME 2.26 es la última versión de la plataforma de desarrollo GNOME. Los desarrolladores saben bien lo que es esto, se trata de un conjunto de bibliotecasAPI yABI disponibles bajo la licencia GNU LGPL que se pueden usar para desarrollar aplicaciones multiplataforma. Según la web, a partir de GNOME 3.0 se empezarán a eliminar diversas partes de GNOME obsoletas, como libgnome, libgnomeui, libgnomeprint, libgnomeprintui, libgladey libgnomevfs. Para las aplicaciones que se incluyen en el Escritorio GNOME, se han llevado a cabo ciertas tareas de limpieza para asegurar que no se usa ningún código obsoleto. Nueva grabación de discos completa, Esto asegurará una transición suave a GNOCompartición de archivos simple, Evolution evoluciona su migración desde ME 3.0. Desde la página oficial del proyecto, se Windows, urge a los desarrolladores que sigan el ejemplo Mejoras en el reproductor multimedia, Control de volumen integrado con Pulse- en sus propias aplicaciones. Audio, La velocidad en extremo ¿ Quién diría que podemos tener iniciado el sistema en 5 segundos? Yo por supuesto que no... Acabo de leer que en la Linux Plumber Conference o sea la conferencia sobre “fontanería” Linux, es decir lo que hace funcionar un Linux en las entrañas, que según se comenta ha sido lo más interesante de los últimos años en lo que a nuestro sistema se refiere. Pues bien los ingenieros de Intel que se dedican a Linux han hecho una demostración pública de algo sorprendente, un sistema Linux que tarda en cargar únicamente cinco segundos. El sistema en cuestión se trata de un EEE PC de Asus y además con la parti- cularidad de que estaba equipado con un disco duro flash, si se equipase con un disco duro tradicional la velocidad se vería reducida y tardaría unos 10 segundos. Aunque a simple vista pudiera parecer algo típico de Hackers y de dudosa utilidad para distribuciones de uso común, no es algo tan descabellado. Según se desprende de lo visto en la conferencia, en los sistemas de escritorio el 95% se podría sustentar en un kernel con algunos módulos compilados estáticamente y el 5% restante con un kernel alternativo que lleve initrd. Linux+ 6/2009 14 2009-04-14, 14:11 Si no puedes leer el disco DVD y no notas ningún tipo de deterioro mecánico, por favor, pruébalo en al menos dos unidades de disco diferentes. 6/2009 En caso de problemas, escribir a: [email protected] 15_pod_dvd.indd 11 2009-04-14, 14:12 Cloud Computing Cloud Computing: El sistema operativo EyeOS Cloud Computing: El sistema operativo EyeOS José B. Alós Alquézar [email protected] Bajo el término Cloud Computing, se engloba un conjunto de soluciones tecnológicas que permiten ofrecer servicios de computación a través de los protocolos TCP-IP, de forma que todo aquello que pueda ofrecer un sistema informático concreto, tanto a bajo nivel como a nivel de aplicación, es accesible a usuarios ajenos a éste. E n el paradigma Cloud Computing, de conformidad a lo establecido por IEEE Society, la información se almacena de forma permanente en servidores conectados a la red, siendo enviada a las cachés temporales de cada cliente, como equipos de sobremesa, portátiles, y por supuesto, los novedosos Netbooks a fin de lograr un mejor aprovechamiento de los recursos ofertados por el hardware actual. Esto es especialmente importante de cara a no confundir con la computación Grid, en la que el propósito final es la producción de un supercomputador virtual integrado por diferentes nodos remotos actuando conjuntamente para realizar actividades de proceso masivo de cálculos y datos. Cualquier usuario al conectarse a Internet puede encontrar numerosos ejemplos de todo ello, como los ofertados por Google Apps, Amazon EC2 y Microsoft Azure, que permiten acceder a aplicaciones comunes a partir de un navegador Web aprovechando la generalización de las tecnologías AJAX y Web 2.0. Aun cuando existe una tendencia generalizada a confundir los términos Cloud Computing y Grid Computing, el motivo fundamental que explica su aparición es la necesidad de albergar aplicaciones como servicios externos (SaaS) a un 16 16_17_18_19_20_21_EyeOS.indd En este artículo aprenderás ... • • Instalación, configuración y administración del SO eyeOS. Configuración básica de eyeOS. determinado dispositivo o computador, de forma que sean fácilmente accesibles a los usuarios de estos, sin necesidad de poseer una copia local de estas instaladas en sus equipos. Cloud Computing no es más que el resultado de la evolución lógica de la informática iniciada en la década de los 60 y 70 con los mainframes y continuada en los 80-90 con los equipos personales. Otra alternativa, para evitar la posible dependencia de código no libre y que tanto preocupa a los responsables de la GNU Foundation son los sistemas FLOSS o SO libres para Clould Computing. En este sentido, el proyecto eyeOS nace como respuesta a estas necesidades, además de proporcionar una compatibilidad con soluciones propietarias actualmente en uso así como a desarrollos cerrados de WebOS como Microsoft Azure. Linux+ 6/2009 16 2009-04-14, 14:12 Cloud Computing Cloud Computing: El sistema operativo EyeOS Lo que deberías saber ... • • • • Nociones básicas de tecnologías Cloud Computing y Web 2.0. Conocimientos de sistemas Unix a nivel de desarrollador. Instalación de paquetes en sistemas GNU/Linux. Configuración de servidores HTTP Apache 2.x. Caracterísitcas fundamentales de eyeOS El sistema operativo eyeOS proporciona los • servicios básicos descritos con antelación de los sistemas WebOS de cara a satisfacer la necesidad de que las aplicaciones sean accesibles remotamente por los usuarios desde un navegador compatible con los estándares • W3C: • Gestión de ficheros, permite la carga y descarga (upload/download) de múltiples fi- • cheros con capacidades de compresión ZIP/ USTAR así como su visualización. Gestión de información personal y contactos, incluyendo calendario con múltiples vistas, gestor de contactos y posibilidad de exportación e importación de estos en formato vCard. Aplicaciones ofimáticas; incorpora un procesador de textos, hoja de cálculo y motor de presentaciones, todos ellos compatibles con MS Office y las suites ofimáticas OpenOffice y StarOffice. Comunicaciones; posee un sistema de mensajería interna para los usuarios de eyeOS, un bulletin board, cliente proxy FTP así como un lector de semillas RSS. Administración del sistema; permite la instalación de paquetes y cuenta además con un novedoso repositorio basado en ports, característica asimilada de los sistemas FreeBSD/NetBSD además de la gestión de usuarios y grupos. El advenimiento de las tecnologías Web 2.0 ha conducido al desarrollo de sistemas operativos basados en esta estructura, denominados • como WebOS y que se prevé conduzca al nuevo paradigma Web 4.0 en el futuro. EyeOS es un sistema operativo orientado Listado 1. Instalación de los módulos PHP a la computación distribuida y que require hospedaje HTTP para su instalación y posterior # yum install mod_suphp puesta en marcha elaborado por www.eyeos.org y liberado bajo la licencia GPL Affero (AGPL ========================================================================= ======= versión 3). Package Arch Version Repository eyeOS=Internet + Ficheros + Size Aplicaciones ========================================================================= El propósito fundamental de eyeOS consiste en la creación de un producto de fácil instalación, configuración y gestión, que permita a un usuario de sistemas UNIX poseer su propio sistema de cloud computing bajo su entero control, permitiendo además la participación en una comunidad de usuarios y desarrolladores cada vez más amplia, con la finalidad de desarrollar sus propias aplicaciones para este sistema. En cualquier caso, los responsables del proyecto ofrecen como alternativa a la instalación del producto, la apertura de una cuenta de usuario en su sistema a fin de poder evaluar las bondades del producto. Para mayor información, conectar con http://www.eyeos.info amén de numerosos documentos y podcast informativos acerca de este. ======= Installing: mod_suphp i386 0.6.3-1.fc9 fedora i386 5.2.6-2.fc9 updates-newkey i386 5.2.6-2.fc9 updates-newkey i386 5.2.6-2.fc9 updates-newkey 89 k Installing for dependencies: php 1.2 M php-cli 2.3 M php-common 228 k Listado 2. Instalación del soporte multilenguaje PHP # yum install php-mbstring ========================================================================= ======= Package Arch Version Repository Size Acrónimos y abreviaturas ========================================================================= • • Installing: • • • • • • CVS : Control Version Source, DAV : Web-based Distributed Authoring and Versioning, DSO : Dynamic Shared Object, EC2 : Elastic Cloud Computing, FLOSS : Free Libre Open Source Software, ODF : Open Document Format, SaaS : Software As A Service, SVN : Subversion Management System. ======= php-mbstring i386 5.2.6-2.fc9 Transaction Summary ========================================================================= ======= Install 1 Package(s) Update 0 Package(s) Remove 0 Package(s) Total download size: 1.1 M 17 www.lpmagazine.org 16_17_18_19_20_21_EyeOS.indd 17 updates-newkey 1.1 M 2009-04-14, 14:12 Cloud Computing Cloud Computing: El sistema operativo EyeOS Figura 2. Acceso y autentificación de usuarios en eyeOS legios de lectura y escritura en los directorios resultantes de la descompresión del fichero ZIP; esto es, por debajo de eyeos/ a fin de poder iniciar el proceso de instalación propiamente dicho. Tareas básicas de administración en eyeOS Figura 1. Instalación del sistema operativo eyeOS Uno de los puntos más importantes que permite • En el directorio DocumentRoot, descomeyeOS es la posibilidad de gestionar múltiples primir el fichero eyeOS_1.8.0.4.zip: # cd /var/www/html instancias de una misma aplicación. # unzip eyeOS_1.8.0.4.zip Por otra parte, eyeOS viene con un conjunto de aplicaciones instaladas aunque existe • Posteriormente, seleccionar la URL http:// localhost/eyehost y el proceso de instala posibilidad de migrar aplicaciones propias, lación del producto se iniciará de forma simplificando ostensiblemente los costes de automática. administración y mantenimiento, o desarrollar nuevas aplicaciones para el sistema. Evidentemente, el usuario utilizado para ejecuRequisitos previos tar los demonios httpd(8) deberá poseer priviLos requisitos de instalación son los siguientes: Sin duda y debido a la apariencia de eyeOS, no faltará quien piense que no se trata más que de otra aplicación Web 2.0. Nada más lejos de la realidad, ya que eyeOS posee un sistema propio de planificación y gestión de procesos, como puede verse en la Figura 5. Las tareas típicas de administración de usuarios y grupos se pueden realizar a partir del menú System Preferences que muestra una ventana repleta de enlaces para la configuración del escritorio, modificación de datos de usuario, así como la creación de usuarios y grupos, y finalmente, la definición de repositorios. Listado 3. Habilitación del módulo UserDir en Apache • • Servidor HTTP con soporte PHP5 para cadenas multibyte UTF-8, o superior, como Apache 2.0.39 o superior. Cliente HTTP compatible con las especificaciones W3C como Mozilla Firefox 2 o MSIE 6. Generalmente, aunque la mayoría de las distribuciones Linux incorporan el servidor Apache por defecto, los módulos DSO PHP no son instalados. Para obviar este inconveniente, es preciso descargar dicho servidor. En un sistema basado en la distribución de paquetes RPM, se podría realizar esta operación mediante yum. que además deposita el fichero de configuración php.conf necesario para la carga de dicho módulo por el servidor Apache. Finalmente, es preciso instalar el modulo mbstring para habilitar el soporte UTF-8 para aplicaciones PHP: Una vez realizada la configuración del servidor HTTP, el proceso de instalación es muy simple teniendo en cuenta el fichero de configuración httpd.conf del servidor Apache: 18 16_17_18_19_20_21_EyeOS.indd <IfModule mod_userdir.c> # # Esta directiva requiere habilitar el control de acceso de los # directorios /home/*/public_html mediante <Directory>...</Directory>. # UserDir enable UserDir public_html </IfModule> <Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec <Limit GET POST OPTIONS> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> </Directory> Linux+ 6/2009 18 2009-04-14, 14:12 Cloud Computing Cloud Computing: El sistema operativo EyeOS Figura 6. Administración del sistema eyeOS Es importante recordar que la habilitación del soporte para los ficheros MS Office/Open Office requiere OpenOffice.org junto con la instalación macro de cara a poder utilizar esta funcionalidad con eyeOS Word Processor. Gestión de Contactos: EyeAddressBook EyeOS incorpora por defecto un gestor de contactos con una colección de funcionalidades Figura 3. Escritorio del sistema operativo eyeOS semejantes a las existentes en otras aplicaciones Cada usuario eyeOS posee por defecto sus Por otro lado, un usuario puede adscribirse a un similares, permitiendo también la definición de propias carpetas donde se almacenan tanto sus grupo concreto, lo cual resulta de gran interés al grupos de contactos, la importación de imágeficheros como los parámetros de configuración generalizar el uso de eyeOS a entornos comple- nes, así como datos binarios. de estos: jos e incluso de carácter empresarial. Descripción de Aplicaciones ./files/Documents: EyeOS introduce en su escritorio sustanciales mejoras, como una barra de aplicaciones minimizada indicando qué aplicación se está utilizando en cada momento, así como en la gestión de ventanas, que indica en todo momento la ventana activa; o como una nueva colección de iconos. Además, existe la posibilidad de utilizar un escritorio menos pesado, ya existente en las versiones eyeOS 1.x y conocido como Light Desktop junto con la capacidad para utilizar extensiones adicionales como Fusion y Oxigene, disponibles en la sección Theme, correspondiente al menú System Preferences. Dentro de este contexto, y teniendo en cuenta que eyeOS se encuentra todavía en fases tempranas de madurez (especialmente en lo concerniente a la documentación accesible), vamos a detallar alguna de las aplicaciones más importantes disponibles en la versión objeto del presente artículo. ./files/Images: ./files/Music: ./files/Videos: ./public: ./swap: ./tmp: ./trash: Figura 4. Aplicaciones disponibles Procesadores de textos: EyeOS Word Processor Figura 5. El gestor de procesos de eyeOS Gestión multimedia audio: EyeMedia A fin de mejorar las prestaciones de eyeMP3, como aplicación disponible en anteriores versiones de eyeOS, Hunter Perrin ha desarrollado eyeMedia, que permite gestionar listas de música o playlists de cara a convertir eyeOS en una especie de reproductor de música online tal y como se muestra en la Figura 9. Compartición de ficheros con otros usuarios eyeOS El cuadro de diálogo Share with… accesible tanto desde el menú contextual de eyeOS co- Figura 7. Procesado de textos eyeOS Word Processor Dotado de una apaciencia similar a los procesadores de textos existentes en la actualidad, tal y como aparece en la Figura 7, eyeOS Word Processor incorpora un diseño de página mejorado, con nuevas herramientas accesibles a través de una barra de herramientas y la posibilidad de trabajar con formatos MS Word, OpenDocument Figura 8. Gestión de contactos. eyeAdressBook (ODF) además del formato nativo eyeOS. 19 www.lpmagazine.org 16_17_18_19_20_21_EyeOS.indd 19 2009-04-14, 14:12 Cloud Computing Cloud Computing: El sistema operativo EyeOS de instalación se iniciará de forma automática, • siempre y cuando se disponga de conexión a Internet. Desarrollo de aplicaciones en eyeOS Figura 9. Aplicaciones multimedia. eyeMedia Figura 10. Compartición de ficheros en eyeOS Resulta interesante también aleccionar a la comunidad de desarrolladores interesados en colaborar con el desarrollo de eyeOS como sistema webOS sobre los pasos a seguir de cara al trabajo dentro de este ámbito. El código fuente de eyeOS es accesible a través del repositorio SVN desde la siguiente URL: https:// eyeos.svn.sourceforge.net/svnroot/eyeos/ eyeOS/branches/production/. que contiene la rama de desarrollo estable actual. A tal efecto, deberán instalarse en el equipo local los interfaces CLI de Subversion, disponibles en http://subversion.tigris.org. Téngase en cuenta que la revisión de eyeOS dentro del repositorio Subversion está específicamente concebida para su utilización en un entorno de desarrollo de software y no está en absoluto pensada para los usuarios finales. De este modo, la obtención del código de desarrollo puede resumirse en tres pasos detallados a continuación: mo desde el panel Actions presente en Files Manager permite la copia directa de ficheros a los grupos de usuarios creando enlances entre los ficheros privados de usuario y los grupos de usuarios compartidos, tal y como se indica en la Figura 10, a fin de hacer posible la distribución • de ficheros, siempre y cuando se posean los permisos necesarios para ello. También, y como colofón, es posible descargar e instalar o actualizar el sistema eyeOS a través del enlace Donwloads page presente en el escritorio; actividad a tener presente debido a que el desarrollo de eyeOS se encuentra en permanente evolución. Ejecutar el comando svn(1): $ svn checkout https://eyeos.svn .sourceforge.net/svnroot/eyeos/ eyeOS/branches/production Opcionalmente, actualizar el código a la última versión mediante el comando: $ svn update Una posibilidad interesante reside en utilizar el módulo userdir en el servidor Apache editando el fichero httpd.conf tal y como se muestra en el Listado 1, de tal modo que descarguemos la rama de desarrollo eyeOS dentro del directorio public_dir. Este módulo, permite la adición de un directorio definido previamente en el fichero de configuración httpd.conf cada vez que se inicie en el navegador WWW una solicitud que contenga la cadena ~user. Para ello deben satisfacerse las siguientes condiciones: • • • El árbol de directorios que llevan hasta public_html deben ser accesibles al usuario que ejecuta el servidor HTTP. El directorio ~userid debe poseer permisos 711. El directorio ~userid/public_html debe poseer permisos 755. En caso de no procederse de la forma indicada, el servidor HTTP lanzará como resultado el error 403. Forbidden. Tras lo cual, deberá procederse de nuevo a la parada y arranque del servidor HTTP mediante el comando: $ apachectl stop && apache ctl start a fin de efectuar la carga del nuevo módulo. Instalación de nuevas aplicaciones Uno de los puntos débiles de eyeOS en el momento actual es la ausencia de repositorios consolidados para la descarga de aplicaciones, así como su estado de madurez. No obstante, eyeOS permite la instalación de nuevas aplicaciones mediante un sencillo procedimiento que se describe a continuación. • • • Figura 11. Configuración de eyeSync Seleccionar el menú Applications AT, Acceder al menú Install Apps, Una vez aparece en pantalla la ventana con el título Packages Manager, seleccionar Update. De este modo, a la izquierda del escritorio eyeOS aparece el listado Categories que permite seleccionar la o las aplicaciones deseadas. Una vez realizada esta selección, únicamente es preciso seleccionar el botón Install y el proceso Figura 12. Configuración de eyeSync 20 16_17_18_19_20_21_EyeOS.indd Linux+ 6/2009 20 2009-04-14, 14:12 Cloud Computing Cloud Computing: El sistema operativo EyeOS a partir de la URL http://www.eyeos.org/downloads y seguir los siguientes pasos: • Figura 13. Sincronización de directorios en eyeOS Una vez obtenido el código fuente de eyeOS, es necesario dotarse de las herramientas de desarrollo cliente, presentes en eyeOS toolkit, que permitirán la realización de operaciones de depuración sin necesidad de volver a ejecutar la aplicación. Para ello, siempre y cuando el desarrollador utilice Firefox como navegador por defecto, es conveniente descargar el addon Firebug desde http://addons.mozilla.org. Firebug es un complemento ideal no sólo para el desarrollo de aplicaciones eyeOS sino para cualquier tipo de aplicaciones web gracias a su integración con el navegador. En cualquier caso, y como conclusión, el siguiente paso será la lectura de la documentación asociada: eyeOS Application Manual y Developers Reference, disponibles en http://wiki.eyeos.org/ Developers_Reference_Index. Sincronización remota mediante eyeSync EyeSync es una aplicación que permite sincronizar ficheros entre plataformas locales de usuario como MS Windows XP, MacOS X Leopard y, por supuesto, GNU/Linux para hacerlos accesibles a eyeOS. Para la utilización, es preciso descargar el paquete de instalación. Desgraciadamente, sólo está disponible el paquete DEB, por lo cual, vamos a realizar la instalación a partir del código fuente, $ tar xvfz eyeSync_1.0_Alpha_Source.tar.gz && cd eyeSync-1.0Alpha/ Sobre el autor José B. Alós es administrador de sistemas especializado en SunOS 5.x/HP-UX/AIX desde 1999 de la mano de EDS, desarrollando su trabajo en Telefónica de España, S. A. U.; y lleva trabajando con sistemas GNU/Linux desde los tiempos del núcleo 1.2.13. Ha sido profesor de la Universidad de Zaragoza. Está especializado en sistemas de Alta Disponibilidad y posee un doctorado en Ingeniería Nuclear. Verificar que el sistema anfitrión posee los siguientes paquetes instalados: – Qt 4.3 o superior, – Extensión Python pyQt4 disponible en http://www.riverbankcomputing.co.uk/ pyqt, – Extensión PyNotify, disponible en http:// pynotify.sourceforge.net para monitorización de sistemas de ficheros. Figura 14. Jugando al ajedrez con eyeOS En caso contrario, proceder a su instalación. Conclusiones finales En distribuciones GNU/Linux basadas en Tras esta breve introducción a eyeOS como RPM, la forma más simple es mediante la uno de los exponentes más prometedores de la nueva generación de sistemas webOS para utilidad YUM: Cloud Computing, debe tenerse en cuenta la # yum install PyQt.i386 pythongran cantidad de posibilidades que encierra, inotify.i386 especialmente con los esfuerzos de la comunidad de desarrolladores de nuevas aplicaciones. y para sistemas basados en Debian: Para ello nada mejor que utilizar el repositorio SVN donde pueden encontrarse las últimas # apt-get install python-pyinotify versiones disponibles de la documentación python-qt4 sobre este sistema. Uno de los aspectos más destacables de • Ejecutar el script Python eyeSync utilizan- eyeOS es la posibilidad de contar, además del do un usuario eyeOS con permisos de es- nivel de soporte Open Source, con un soporte critura en este, que da como resultado una profesional, que ofrece a las empresas unos pantalla tal y como se muestra en la Figura tiempos de respuesta a incidencias sustan11 para su configuración preliminar: cialmente más reducidos (que llega incluso a niveles de asistencia in-house para el nivel En el menú 'Preferences' deberá seleccionarse de soporte Premium). la URL de acceso al sistema eyeOS, tras lo cual, No contentos con ello, el proyecto eyeOS debe reiniciarse eyeSync. posee también tres niveles de formación, dirigidos a usuarios finales, administradores del • Finalmente, seleccionar los directorios del sistema y desarrolladores del mismo, respecsistema operativo local que se deseen sin- tivamente. Además, eyeOS ha sido selecciocronizar con eyeOS tal y como se indica nado para la próxima Cloud Computing Expo en la Figura 12. 2009 a celebrar en Nueva York como alternativa libre. El resultado de esta operación, puede apreciarse directamente en la Figura 13 al iniciar una sesión en eyeOS, donde podemos ver los ficheros correspondientes a este artículo directamente En la red en nuestro entorno Cloud Computing. • EyeOS Web SO Main Site: Conviene no olvidar que eyeSync es una http://www.eyeos.org aplicación independiente que debe ser ejecu• Comunidad de desarrolladores tada por cada usuario definido en eyeOS con EyeOS: permisos de lectura/escritura, por lo que su inshttp://eyeos.org/en/developers talación en el equipo local deberá ser accesible • EyeOS Wiki Main Site: a todos los usuarios que deseen utilizarla. http://wiki.eyeos.org Otra actividad importante es la realización • Apache HTTP Server Main Site: de copias de seguridad, mediante eyeBackup, http://www.apache.org que estará disponible en un futuro próximo. De • PHP Language Main Site: momento, la opción más razonable, es la realihttp://www.php.net zación de copias de seguridad tradicionales o • Subversion (SVN) Main Site: bien mediante software dedicado como Bacula, http://subversion.tigris.org NAS Backup o BackupPC. 21 www.lpmagazine.org 16_17_18_19_20_21_EyeOS.indd 21 2009-04-14, 14:12 Cloud Computing Cloud Computing: ¿La gran oportunidad para Linux? Cloud Computing: ¿La gran oportunidad para Linux? Diego Gernan Gonzalez [email protected] Desde la liberación en 1992 de las primeras distribuciones se viene vaticinando el “gran despegue de Linux”. 17 años después ni el interés de grandes empresas como IBM, ni la aparición de una distro orientada específicamente al público masivo como UBUNTU, ni el atractivo innegable para el usuario sin conocimientos de proyectos como COMPIZ han permitido perforar el techo del 1% del mercado. E n cuanto al tan deseado aluvión de nuevos usuarios que se esperaba a causa de la desilusión con Windows Vista se quedó en algunos miles, el resto de los no conformes se volvió a XP. Digámoslo de esta manera, la batalla por el mercado de los sistemas operativos de escritorio está terminada y la ganó Microsoft. ¿Significa eso que debemos resignarnos a ser una minoría? No, según algunos especialistas la industria informática tal cual la conocemos está por cambiar y con ese cambio la relación de los usuarios con sus computadoras. En los últimos tiempos en los portales y publicaciones dedicados a la informática se está hablando mucho de la computación en nube o Cloud Computing, algunos creen que será un punto de inflexión que marcará la nueva era en Internet. Para otros sin embargo es sólo la forma en que la industria de la tecnología de la información aplica una vieja técnica de los fabricantes de productos de consumo masivo, cambiar el envase para hacer creer que un producto es nuevo. En este artículo vamos a explicar por qué creemos, o mejor dicho, deseamos que la computación en nube sea una revolución en el mercado de la informática y por qué en caso 22 22_23_24_25_26_27_28_29_Cloud_Linux.indd de serlo es lo que Linux en particular y el código abierto en general estaban necesitando. Características de la Cloud Computing Estoy escribiendo el borrador de este artículo en mi Palm z22, para corregirlo lo pasaré por medio del programa JPILOT al disco rígido de mi computadora. Una vez terminado irá como archivo adjunto en un e-mail a la redacción de la revista, la cual lo guardará y reenviará a los betatester, que a su vez lo archivarán en sus respectivos dispositivos de almacenamiento. Imaginen en cambio que yo desde mi Palm lo mandará vía web a un servidor, ingresará a él desde mi computadora para hacer las correcciones y después comunicará a la revista que ya está listo para su revisión. Ellos a su vez habilitarán un acceso restringido a los betatester para hacer los comentarios que consideren convenientes, la cantidad de hardware necesario y de copias se reduce notablemente. Esa es la idea, el usuario con un equipo con las capacidades suficientes para conectarse a Internet puede acceder por medio de ésta al software y hardware que le haga falta sólo cuando le haga falta. Linux+ 6/2009 22 2009-04-14, 14:13 Cloud Computing Cloud Computing: ¿La gran oportunidad para Linux? Detrás de la computación en nube hay una tecnología y un concepto clave: virtualización y escalabilidad. La virtualización permite que varios usuarios utilicen en un mismo servidor diferentes sistemas operativos y aplicaciones. Cuando la capacidad de ese servidor se ve sobrepasada, el exceso de trabajo se transfiere automáticamente a otro servidor conectado en línea, eso es escalabilidad. Algunas de las consultas más comunes en los foros tienen que ver con el reemplazo de programas de Windows en Linux, existen casos de aplicaciones muy específicas que todavía no tienen equivalencia. Con la tecnología de la computación en nube podríamos usar una de esas aplicaciones en Windows, hacer la carátula del informe en Mac y mandarla por e-mail con la versión Linux de Thunderbird, y todo sin resetear. En un documento conocido como El manifiesto de la nube abierta del cual hablaremos más tarde, se da una muy buena descripción sobre las posibilidades de esta tecnología. La característica principal de la nube es la posibilidad de ofrecer servicios de computación escalables a un costo eficiente permitiendo al usuario utilizar todo su poder sin necesidad de tener que manejar las complejidades subyacentes a la tecnología. Ya sea que la nube resida en la red privada de una organización o esté en Internet, sus ventajas son las siguientes: Adaptación del tamaño según las necesidades Processes y en la descripción del ítem los autores se refieran claramente a actividades comerciales, bien podemos permitirnos una interpretación más amplia. En la redacción original se habla de organizaciones, sus asociados y sus proveedores compartiendo una infraestructura tecnológica que les permita intercambiar información y reducir costos dedicándose a sus actividades específicas. Sin embargo el modelo bien puede aplicarse a otros ámbitos. Alumnos preparando un trabajo práctico a través de un software de colaboración en red, el profesor calificándolo y la nota ingresando automáticamente al expediente de cada uno. Todo hecho con una misma nube alojada en el datacenter de la Universidad. Reducción de los costos de inicio Toda actividad nueva requiere una inversión de puesta en marcha y difícilmente en la actualidad se pueda emprender alguna que no requiera la utilización de recursos computacionales. La nube pone a disposición de estos proyectos un datacenter ya funcionando permitiendo destinar más fondos a otras partes del proyecto. Desde ya que no hay rosas sin espinas, analicemos brevemente algunos de los desafíos y barreras que según los signatarios del manifiesto deben tenerse en cuenta. y que por una vulnerabilidad en la base de datos de las claves de acceso, una de las empresas logra tener acceso a los planes de desarrollo de nuevos productos de la otra. Las pérdidas de la empresa perjudicada serían varias veces mayores que el ahorro de costos en tecnología de la información. Pero no sólo puede darse esta situación por neglicencia sino también por corrupción, los empleados de la empresa que administra la infraestructura podrían utilizar su acceso privilegiado para ganarse un sueldo extra. Se trata entonces de establecer unos adecuados procedimientos en materia de autenticación, validación, medios de acceso y utilización de los servicios, además de normas de control interno para el personal que garanticen la transparencia de las operaciones. Interoperabilidad entre datos y aplicaciones Para que las ventajas de la computación en nube sean posibles es necesario que datos y aplicaciones alojados en diferentes lugares físicos puedan interactuar entre sí. Portabilidad de datos y aplicaciones Uno de los factores que tendrá en cuenta cualquier organización a la hora de optar por Seguridad servicios de computación en nube es la depenSupongamos que Coca Cola y Pepsi utilizan dencia de su proveedor, es decir la facilidad el mismo proveedor de servicios de nube con que puede migrar a otro o volver a un Tanto las organizaciones como las personas debemos hacer frente a un entorno cambiante, cambios que requerirán diferentes soluciones computacionales. El organismo recaudador de impuestos de una zona de veraneo tiene que optar por ver colapsados sus equipos en los tres meses de mayor trabajo, o verlos subutilizados los otros nueve. Un juego en red requiere diferentes capacidades gráficas que un procesador de textos, sin embargo, cuando escribimos, la tarjeta gráfica sigue estando ahí. El aporte de la cloud computing es, se paga por lo que se usa. Reducción del centro de datos Para cualquier organización tener un centro de datos significa una importante inversión en tecnología, programas, personal que lo opere e instalaciones adecuadas para su funcionamiento. Mejoramiento de procesos de negocios Aquí aunque opté por mantener una traducción literal del original inglés Improving Business Figura 1. Participación de mercado de sistemas operativos en marzo 2009 23 www.lpmagazine.org 22_23_24_25_26_27_28_29_Cloud_Linux.indd 23 2009-04-14, 14:13 Cloud Computing Cloud Computing: ¿La gran oportunidad para Linux? datacenter tradicional. Es muy fuerte la tenta- • ción de muchas compañías del sector a tener • clientes cautivos por lo que se hace necesario el establecimiento de estándares que permitan el cambio. • Administración Las políticas de licencias, manejo del ciclo • de vida y cálculo de costos utilizados en el esquema tradicional del manejo de tecnología de la información no son aplicables a la Cloud • Computing por lo que deben crearse otros más adecuados. Medición y monitoreo Para tomar decisiones es necesario tener información, para poder comparar informaciones de orígenes diferentes es necesario que exista una consistencia. ¿Es mejor proveedor A o B? ¿Conviene crear una nube privada o utilizar una basada en Internet? Todo esto lleva a la necesidad de creación de un sistema de medición normalizado que permita comparar los datos de funcionamiento brindados por las diferentes compañías proveedoras de servicio y organismos verificadores que determinen la veracidad de las mismas. La importancia que pueden tener los servicios de computación en nube pueden verse en dos de las distribuciones liberadas a principios de este año, Ubuntu Jaunty Jackalope y Novell Suse Enterprise Edition. Adopta la API de Amazon EC2, Cualquiera utilizando herramientas de código abierto como Eucalyptus pueda crear su propia nube, Facilidad de creación de AMI'S (Amazon Machine Image) de Ubuntu, adaptadas a las necesidades de cada usuario, Creación de herramientas para utilizar en Amazon EC2 tan fáciles de utilizar como APT para el manejo de paquetes, Uso eficiente del consumo de energía para reducir al mínimo su consumo cuando el hardware no es utilizado. Novell La versión 11 de Suse Enterprise Edition lanzada en marzo de este año, promete grandes avances en materia de virtualización, interoperabilidad, alta disponibilidad e informática de escritorio. Incluye el monitoreo de máquinas virtuales (plataforma de visualización que permite utilizar simultáneamente más de un sistema operativo) Xen 3.3, y está optimizada para correr en otros hipervisores como VMware ESX o Microsoft Hyper-V. En abril lanzará SUSE Linux Enterprise JeOS (Just enough Operating System), una versión que traerá solamente las partes del sistema operativo necesarias para el desarrollo de aplicaciones virtuales. Esta versión está certificada para funcionar en la plataforma Amazon EC2. Linux en el mercado Hace un tiempo escribí en el foro de esta revista mi opinión en el sentido de que el software libre si bien debía seguir siendo libre, debería dejar de ser gratuito y que su desarrollo debería dejarse en manos de empresas. Mi argumento era el siguiente: en la actualidad al ser el trabajo de desarrollo realizado en su mayor parte por voluntarios, el software libre no logra el nivel de calidad del software propietario. Es cierto que cualquiera de las distros es mejor que Windows; pero Gimp no tiene las prestaciones de Photoshop, OpenOffice.org Calc no tiene todas las funciones de Excel, ni Cinelerra la de SONY VEGAS. Otro tema es el de los foros de ayuda, muchos de los participantes se quejan de contestar siempre las mismas preguntas, y muchos de los que necesitan ayuda de no encontrar respuestas. El poder pagar personas que se puedan dedicar full time a programar y contestar preguntas mejoraría notablemente la calidad del software. Además el tener que competir en el mercado eliminaría la superabundancia de distros que no aportan nada. A decir verdad en cada foro que planteé esta postura no tuve ninguna adhesión, aunque más allá de lo extremista de mi postura es un hecho de que las organizaciones con fines de lucro tienen cada vez mayor participación en el desarrollo. En un estudio sobre la evolución y contribuciones al kernel se detalla que Ubuntu Quienes probaron la versión beta de Jaunty Jackalope o la final, que al momento de publicación de este artículo es probable que esté disponible, habrán notado dos cosas. Los dineros que Mark Shuttleworth decidió gastarse en pagar a diseñadores gráficos dieron sus frutos en una mejora del aspecto visual (al menos en la pantalla de inicio) y la inclusión en los repositorios de Eucalyptus (Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems), un proyecto de la Universidad de California en Santa Bárbara destinado a generar una infraestructura de software de fuente abierta para la implementación de proyectos de Cloud Computing. Pero lo de Jaunty apenas son atisbos de lo que traerá Karmic Koala, la versión a liberarse en octubre de este año. En un e-mail enviado a los desarrolladores Shuttleworth explica cuales serán las características vinculadas al tema de la nube. • Estar a la vanguardia de Cloud Computing Figura 2. Participación según versión utilizando software libre, 24 22_23_24_25_26_27_28_29_Cloud_Linux.indd Linux+ 6/2009 24 2009-04-14, 14:13 Cloud Computing Cloud Computing: ¿La gran oportunidad para Linux? en su mayor parte fueron hechas por programadores e ingenieros de software de grandes corporaciones norteamericanas, exactamente un 74,2%. Las principales contribuciones son de Red Hat, Novell, INTEL e IBM. Y si vamos más allá del núcleo, con excepción de Debian, las distros más usadas, Ubuntu, OpenSuse y Fedora están apoyadas por empresas. Openoffice.org cuenta con el respaldo de Sun, el principal financiador de la fundación Mozilla (Firefox y Thunderbird) es Google, Canonical paga desarrolladores y diseñadores gráficos para GNOME y KDE. Como muchos de nosotros utilizamos versiones gratuitas tendemos a creer que desarrollar Linux es gratis, sin embargo siempre según la Linux Foundation, el costo de desarrollar la versión 9 de Fedora puede calcularse en 10,8 billones de dólares (en EE.UU. un billón son mil millones) a lo que hay que sumarle 1,4 billones en desarrollo del kernel. Para todos los que estudian la disciplina del marketing, los libros de Philip Kotler son el equivalente de la Biblia para los teólogos. Para entender el por qué sostenemos el fracaso de Linux permítanme un breve resumen de lo que dice este autor sobre la estructura de los mercados competitivos. Este autor divide a los participantes en un mercado según sus fortalezas y debilidades en: • • Estrategias de competencia • • Dominante: este participante en el mercado puede controlar el comportamiento de los demás participantes. Fuerte: este participante en el mercado puede mantener su independencia y libertad de acción. Favorable: este participante tiene posibilidades de mejorar su posición en el mercado, obtiene resultados lo suficientemente buenos para justificar su continuidad pero su existencia depende de lo que haga el competidor dominante y no está en sus manos mejorar su posición. • • Sostenible: este participante en el mercado obtiene resultados lo suficientemente buenos para justificar su continuidad pero su existencia depende de lo que haga el competidor dominante y no está en sus manos mejorar su posición. Débil: este participante tiene un desempeño insatisfactorio pero hay posibilidades de mejorar. Inviable: este participante no tiene un desempeño satisfactorio ni tampoco posibilidad de mejorar. Según su actitud pueden calificarse en: • Si bajamos el análisis al detalle de utilización por versión, Linux desciende al sexto lugar detrás de: • • • • • El comparativo con mayo del año pasado nos permite ver que Windows XP perdió un 9,27% mientras que el vapuleado Vista creció un 8,34%, como dato anecdótico la beta de Windows 7 alcanzó en 30 días un 0,26%, es decir más de la cuarta parte de la porción de mercado que Linux tiene después de 17 años. De acuerdo al esquema de Kotler no es difícil decidir que Microsoft es el competidor en posición dominante. ¿Un escenario pesimista? Bueno, tengo otro peor, el del sitio gs.statcounter.com correspondiente al período 1º de julio de 2008 - 31 de marzo de 2009: Competidor rezagado: no reacciona con rapidez ni fuerza a las acciones de los otros participantes. • Competidor selectivo: solamente responde a determinado tipo de acciones de los otros participantes. • Competidor tigre: reacciona rápidamente a todas las acciones de los otros participantes. • Competidor aleatorio: nadie sabe a qué, • cómo y por qué va a reaccionar. • Según el tipo de posición competitiva que • uno ocupe en el juego podrá adoptar distintas • • estrategias. • • • • Ampliación de mercado: si el número de usuarios aumenta, los ingresos lo harán en función de la participación en el mercado. Defensa de la participación del mercado: se trata de impedir que los competidores quiten clientes al competidor dominante. Aumento de la participación en el mercado: se trata de quitarles sus clientes a los demás competidores. Nicho de mercado: se trata de encontrar un sector del mercado que no esté explotado por no haber sido descubierto o ser considerado no rentable por los demás participantes. • Figura 3. Participación a lo largo del año WinXP: 74,82%, WinVista: 18,48%, MacOSX: 1,96%, Win2000: 1,13%, Linux: 0,66%. Conozco la frase de Mark Twain “existen tres grandes mentiras: las pequeñas, las medianas y las estadísticas”. También sé que “las estadísticas son como la minifalda, muestran algo muy interesante pero ocultan lo esencial”. Además presté la suficiente atención en las clases de la Facultad para saber que hay que tomar con pinzas el resultado de un muestreo hecho en base a las visitas a sitios web por más que entre esos sitios figuren la Fundación Mozilla, el New York Times, la CNN y Fortune, pero son las estadísticas que tenemos para trabajar y basta con salir a la calle para confirmarlo. ¿A cuántos familiares y amigos nuestros hemos convencido de que instalaran Linux por propia voluntad? Hagamos el ejercicio de aplicar las categorías de Kotler a los sistemas operativos: Utilicemos este modelo teórico en el análisis del mercado de los sistemas operativos de escrito- • rio. Según las estadísticas de Net Applications a marzo de 2009 la situación es la siguiente: • • Windows XP 62,85%, Windows Vista 22,91%, Mac OS X 10.5 6%, Mac OS X 10.4 2,66%, Windows 2000 1,24%. Competidores tigres serían Microsoft con Windows y Canonical con Ubuntu, Competidor selectivo sería Apple y en el mercado empresarial Red Hat y Novell, Competidor rezagado sin dudas Debian al privilegiar la estabilidad por sobre la actualidad. Windows en sus diferentes versiones tiene • el 88,14% de la porción de mercado contra el 9,77 de Mac y el 0,90 de Linux, Comparado con abril de 2008 Windows perdió 2,94%, Mac creció 1,94% y Linux Se podría decir que Linux no fracasó sino que un 0,22%. simplemente ocupa un nicho de mercado, tam- 25 www.lpmagazine.org 22_23_24_25_26_27_28_29_Cloud_Linux.indd 25 2009-04-14, 14:13 Cloud Computing Cloud Computing: ¿La gran oportunidad para Linux? mación en sus propias manos, en lugar de entregarlos a un tercero. Una razón por la que no deben usarse aplicaciones web es que se pierde el control”. Dijo además: “Es tan malo como utilizar un programa propietario. Utilizar un programa propietario o una aplicación web lo pone en manos de quien desarrolló el software”. Tal vez sea una postura un poco extremista pero sus preocupaciones son atendibles a tal punto que un grupo de organizaciones creó el antes mencionado Manifiesto de la Nube Abierta que postula los siguientes principios: • Figura 4. Página web de Net Applicactions bién teníamos pendiente el explicar el por qué para mí Linux estaba en una posición sostenible y no favorable. Para eso volvamos al libro de Kotler. La historia de cualquier producto puede dividirse en cuatro etapas: • • • • Introducción: el producto va siendo lentamente adoptado por los consumidores adictos a las novedades, Crecimiento: la cantidad de nuevos usuarios del producto aumenta velozmente, Madurez: el producto fue aceptado por la mayoría de los consumidores potenciales, Decrecimiento: el ingreso de nuevos usuarios disminuye y aumenta el cambio de usuarios actuales a otros productos. tiene un nombre, recesión, nuevas reglas, gastar lo menos posible y un nuevo escenario, la nube. • Si todo el mundo habla sobre la computación en nube, Richard Stallman fundador de la Free Software Foundation no iba a ser la excepción, su opinión sobre el tema fue: “la computación en nube es una trampa para obligar a más y más gente a comprar siste- • mas propietarios cerrados que les costarán más y más caros con el tiempo. Es estúpido, peor que estúpido es una campaña de marketing publicitario, hay quienes dicen que es inevitable, y cuando alguien dice eso se puede estar seguro que detrás hay una campaña de marketing. Los usuarios de computadoras deben estar dispuestos a mantener su infor- Los proveedores de servicios de Cloud Computing deben trabajar juntos para responder a los desafíos que presenta su adopción: seguridad, integración, portabilidad, interoperabilidad, manejo y administración, medición y seguimiento. Estos deben abordarse a través de una colaboración abierta y el uso adecuado de estándares. Los proveedores de servicios de Cloud Computing no deben utilizar su posición en el mercado para obligar a los consumidores a permanecer en sus plataformas o limitarles sus opciones de elegir proveedores. Los proveedores de servicios de Cloud Computing deben utilizar y adoptar los estándares existentes siempre que sea apropiado. La industria de tecnología de la información ha invertido mucho en la creación de los estándares existentes y en la creación de organismos para dictarlos y aplicarlos por lo que no hay necesidad de reinventarlos o duplicarlos. El mercado de los sistemas operativos de escritorio evidentemente llegó hasta donde podía llegar, ¿qué más pueden ofrecernos que animaciones más bonitas sin ninguna aplicación práctica? Como dijo Matt Assay de la consultora Alfresco: gran parte del fracaso de Vista es que Microsoft no pudo ofrecer una buena razón para dejar XP. El futuro es abierto Si nos gusta el fútbol seguramente la emoción de jugar un partido contra Messi o Ronaldinho nos compensará por el hecho de que nos llenen de goles, ahora si lo que queremos es ganarles lo mejor es proponerles una partida de ajedrez, lograr que jueguen a un juego en donde sus habilidades no sean útiles y las nuestras si. En la industria informática el nuevo juego Figura 5. Página web de StatCounter 26 22_23_24_25_26_27_28_29_Cloud_Linux.indd Linux+ 6/2009 26 2009-04-14, 14:13 Cloud Computing Cloud Computing: ¿La gran oportunidad para Linux? 27 www.lpmagazine.org 22_23_24_25_26_27_28_29_Cloud_Linux.indd 27 2009-04-14, 14:13 Cloud Computing Cloud Computing: ¿La gran oportunidad para Linux? Figura 6. Página web de Open Cloud Manifesto • • • La creación de nuevos estándares o la modificación de los ya existentes, de ser necesario, debe hacerse de forma juiciosa y pragmática. La función de los estándares es fomentar la innovación y no inhibirla. Los esfuerzos de la comunidad de la nube abierta deben estar dirigidos a satisfacer las necesidades de los clientes y no solamente la de los requerimientos técnicos de los proveedores de servicios de Cloud Computing. Debe probarse y verificarse que realmente se está respondiendo a sus requerimientos. Las organizaciones reguladoras de estándares, los grupos de promoción de la tecnología de Cloud Computing y la comunidad deben trabajar de manera conjunta y coordinada para evitar que sus esfuerzos se superpongan y entren en conflicto. web, sistemas operativos o tecnologías. Linux por muy bonito visualmente que sea KDE 4 o inspirador el discurso del software libre no logra alcanzar los dos dígitos de participación en el mercado. Durante mucho tiempo las relaciones económicas se entendieron como una guerra, para que el competidor A ganara tenía que perder (y de ser posible desaparecer) el competidor B, el bienestar económico de los trabajadores era incompatible con la rentabilidad de la empresa. Si es necesario aumentar los precios para obtener más ganancias se aumenta y que los clientes se arreglen como puedan. En palabras del escritor Gore Vidal, no es suficiente tener éxito, otros tienen que sucumbir. Ese tipo de pensamiento trasladado a la informática le dio muy buen resultado a Microsoft y en menor medida a Apple, en cambio para el software de código abierto fue un fracaso, Linux tiene apenas un 1% del mercado. El modelo que necesitamos tiene nombre, Coopetencia. Quien lo bautizó fue Ray Norda, fundador de Novell, tal vez sea por eso que Novell fue la primera empresa en establecer acuerdos de colaboración con Microsoft. La coopetencia es una dinámica en la que uno al mismo tiempo compite y coopera con otros participantes en un mismo mercado. De acuerdo a Nalebuff y Brandenburger, dos autores que desarrollaron la idea de Norda, el mercado puede imaginarse como un juego en el que intervienen cuatro tipos de participantes. Es evidente que las corporaciones están dándose cuenta de que el modelo tradicional de negocios no funcionará en los años venideros por lo que se hace necesario crear uno acorde a las nuevas realidades. En 1913 el uso de automóviles en Estados Unidos no estaba demasiado difundido, por lo tanto no había sido necesaria una red vial en condiciones, la inexistencia de una red vial en condiciones trababa la venta de automóviles y ésto la de partes para autos fabricadas por terceros. Cuatro fabricantes de automóviles (General Motors, Packard y Wyllis Overland), un fabricante de neumáticos (Goodyear) y uno de faros (Prest -O-LITE) unieron esfuerzos para pavimentar diversos sectores de carretera a lo largo del país. La gente vio la practicidad del nuevo medio de transporte y exigió a sus gobernantes la construcción de más caminos modernos. La analogía se puede extender al mercado informático. Vista terminó por demostrar lo que Firefox, Opera y Google Chrome ya habían insinuado, Microsoft por sí solo no puede imponer nada que el consumidor no quiera aceptar, ya se trate de estándares Figura 7. Página web de Linux Fundation 28 22_23_24_25_26_27_28_29_Cloud_Linux.indd Clientes, Proveedores, Competidores y Complementadores. Los dos primeros definen a los dos últimos. Desde el punto de vista de los compradores: • • Competidores: A y B son competidores cuando el consumidor valora más el producto de A cuando no existe el producto de B. Ejemplos Gnome y KDE, Complementadores: A y B son complementadores cuando la gente valora más el producto A si tiene el producto B. Ejemplos Windows XP y Norton Antivirus. Desde el punto de vista del proveedor: • • Competidores: A y B son competidores cuando a un proveedor le es más conveniente venderle solamente a uno de los dos que a los dos, Complementadores: A y B son complementadores cuando a los proveedores les es conveniente venderles a los dos que a uno solo. El gran cambio de la computación en nube con el modelo tradicional de la computación de escritorio es que convierte a Linux y Windows de competidores en complementadores. Para entender esto debemos dividir a la nube en tres capas: • Infraestructura como un servicio: se refiere a la capacidad de ofrecer servicios Linux+ 6/2009 28 2009-04-17, 11:44 Cloud Computing Cloud Computing: ¿La gran oportunidad para Linux? • • de almacenamiento, procesamiento y velocidad de transmisión del hardware, Plataforma como un servicio: se refiere al sistema operativo virtualizado y servicios adicionales como motores de bases de datos, Software como un servicio: se trata de las aplicaciones que queremos usar dentro del sistema operativo virtualizado. El servicio básico de la nube es el de infraestructura, es decir capacidad de almacenamiento y cálculo, independientemente del sistema operativo y aplicaciones. El proveedor más conocido Amazon EC2, permite seleccionar un sistema operativo o bien virtualizar uno seleccionado por el usuario. Se factura únicamente el tiempo de procesamiento, el espacio de almacenamiento y el ancho de banda. Existen también alternativas de código abierto como el ya mencionado proyecto Eucalyptus que tiene una interfaz compatible con el servicio comercial de Amazon. Otra es Enomalism que además de proveer funcionalidades similares a los otros dos incorpora Turbo Gear y Python. Aquí vemos bien cómo funciona el concepto de complementarios. Las empresas de hardware que manufacturen los equipos necesarios para la cloud computing necesitan software lo suficientemente potente como para sacarles el máximo provecho. Para los clientes de la cloud computing es necesario que existan aplicaciones que cubran sus necesidades y que no requieran un excesivo tiempo de aprendizaje cumpliendo además con los requisitos de interoperabilidad y portabilidad. Los tres servicios de infraestructura mencionados están basados en Xen, un proyecto de código abierto de la Universidad de Cambridge que permite que varios sistemas operativos se ejecuten simultáneamente en un solo equipo. Puede encontrarse en los repositorios de las distribuciones más importantes. Es indudable que las mejores aplicaciones están disponibles para Windows, ni siquiera proyectos como Gimp u OpenOffice. org pueden competir en prestaciones con Photoshop y Microsoft Office por no hablar de necesidades como diseño CAD e investigación cualitativa en la que las versiones Linux están varios años atrasadas. Gran parte de la culpa de ésto lo tiene la comunidad; como dijo Frank Feldman jefe de producto de Red Hat para el mercado asiático: puede ser difícil encontrar una cantidad de desarrolladores entusiasmados por crear una aplicación para calcular el pago de impuestos. No se trata de renunciar al mercado de las aplicaciones ni convencer a la gente de las virtudes del software libre. Como definen Nalebuff y Branderburger lo que debemos hacer es cooperar para crear un nuevo mercado y después competir por una mayor parte de él. Palabras finales El borrador original de este artículo llevaba por título La nube y el elefante, lo de nube ya se imaginarán por qué es. El proboscideo era una metáfora basada en el famoso poema de John Saxe Cox en el que unos ciegos tocando cada uno una parte del animal sacan conclusiones sobre cómo es el animal completo. Al final tuve que renunciar a la idea porque hasta para lo que es habitual en mi el enfoque era demasiado raro. Sin embargo la metáfora me sigue gustando, cada uno de nosotros, ciegos por la venda de nuestras expectativas, valores, creencias y actitudes ve una sola parte del estado actual de la informática. Stallman, con su postura de que todo lo que signifca software privativo es una amenaza, critica duramente a usuarios cuyo único interés es mandar facilmente mails, chatear con sus hijos que trabajan lejos o compartir con sus antiguos compañeros de colegio la foto de su nieto recién nacido. Microsoft en su preocupación por generar dividendos a sus accionistas no duda en aplicar prácticas monopólicas y presiones judiciales contra pequeñas empresas que podrían aportar grandes innovaciones para todos. Dentro de la comunidad de usuarios de productos de código abierto estamos más entretenidos en pelearnos entre nosotros que en mejorar el producto final para hacerlo accesible a todos los usuarios. Si algo demostraron los últimos años (y ahora no estoy hablando solo de informática) es que el esquema tradicional de pensamiento en el que el triunfo de uno depende del fracaso de los demás no dio resultado. Estamos viviendo una época difícil desde el punto de vista económico, millones de personas quedarán sin trabajo, empresas que eran sinónimo de sólidez están al borde de la quiebra. Más alla de un sistema operativo, linux es una forma de trabajo. Una forma de trabajo en la que lo que cada uno sabe está a disposición de todos. Eso es lo que tenemos para aportar a un mundo que necesita soluciones diferentes a problemas nuevos. Pero esas soluciones tienen que ser fáciles de aplicar y entendibles por todos. Esa es la lección que podemos aprender de Microsoft. En la red • • • • • • • http://www.netapplications.com/, http://gs.statcounter.com/, http://www.opencloudmanifesto.org/, http://www.linuxfoundation.org/, http://www.xen.org/, http://eucalyptus.cs.ucsb.edu/, http://www.enomaly.com/. PUBLICIDAD Sobre el autor Diego Germán Gonzalez maneja las áreas de Marketing y Sistemas de una pequeña empresa textil, además asesora a otras pymes sobre la utilización de soluciones de código abierto. 29 www.lpmagazine.org 22_23_24_25_26_27_28_29_Cloud_Linux.indd 29 2009-04-17, 11:44 Cloud Computing Cloud Computing y Open Source Cloud Computing cobra su mayor sentido en una aproximación Open Source José Manuel Rodríguez, director de Software de Sun Microsystems Ibérica La consolidación de Internet como medio de acceso y compartición de la información y como plataforma de comunicaciones por parte de ciudadanos, empresas y gobiernos (ya es utilizada por más de 1.000 millones de personas diariamente en todo el mundo, una cifra que se habrá doblado en 2011) ha forzado a los grandes proveedores de tecnologías de información a evolucionar sus estrategias hacia el aprovisionamiento de todo tipo de servicios informáticos a través de la red como si de un servicio básico y a medida se tratara. C onceptos como pago por uso de la tecnología -incluyendo hardware, software de base y aplicaciones- o SaaS (Software as a Service) son cada vez más habituales para el usuario, de modo que entramos en una nueva etapa en la que los proveedores de tecnología pasamos, en gran medida, a seguir la estela de los suministradores de agua o electricidad. El modelo Cloud Computing permite, básicamente, eso, pero aplicado al aprovisionamiento de tecnologías de la información. Cuando hace 25 años Sun escogió como lema The Network is the Computer, -la red es el ordenador-, se sentaron las bases de lo que hoy todos conocemos como Cloud Computing. La expresión tiene actualmente, así, más vigencia que nunca y, de hecho, es la materialización de lo que será una revolución en la informática corporativa en los próximos años. te la primera plataforma Cloud Computing abierta del mercado. Bajo el nombre Sun Open Cloud la propuesta de Sun está basada en sus tecnologías de software open source -incluyendo el lenguaje de programación Java, la base de datos MySQL y el sistema operativo Open Solaris - y toda su innovación en almacenamiento Open Storage. Se trata de dar al mercado una alternativa clara y viable en sus aproximaciones al Cloud Computing que, además, supone un cambio paradigmático frente a los modelos cloud propietarios que limitan las opciones para el cliente e incrementan significativamente los costes ligados a licencias, especialmente de software. En nuestra opinión, sólo triunfarán en Cloud Computing aquellas compañías que logren atraer a un mayor número de integradores y programadores para sus tecnologías. La comunidad Open Source es la mejor vía para el desarrollo del Cloud Computing del futuro. Una apuesta férrea por el modelo Open Source Primeros servicios Desde el punto de vista de Sun, el modelo Cloud Computing tiene mayor sentido y fuerza si lo abordamos desde una aproximación Open Source. Por ello, la compañía ha presentado recientemen- 30 30_31_Cloud_Sun.indd En la base de Sun Open Cloud estarán los dos primeros servicios – Sun Cloud Storage Service y Sun Cloud Compute Service – ya disponibles para desarrolladores y que lo estarán también Linux+ 6/2009 30 2009-04-14, 15:37 Cloud Computing Cloud Computing y Open Source para empresas y gobiernos el próximo verano. Los clientes podrán beneficiarse del modelo Open Source para sus aproximaciones al modelo Cloud Computing a través de Sun Open Cloud para acelerar el suministro de nuevas aplicaciones reduciendo los riesgos totales y obteniendo mayor escalabilidad y capacidad de almacenamiento. Nuestra propuesta Open Cloud pone a disposición de la comunidad todas las tecnologías y servicios necesarios para que cada cliente pueda construir sus propias nubes, públicas o privadas, asegurando la interoperabilidad entre ellas y el resto. Además de la apuesta clara por el Open Source, otra de las claves para que una nube tenga éxito es que las tecnologías que se necesitan para crearla sean fáciles de usar en todos sus ámbitos, es decir, desde el despliegue de aplicaciones, al suministro de recursos, pasando por todas las fases intermedias. En este sentido, Sun Cloud Compute Service está basado en las capacidades Virtual Data Center (VDC) adquiridas mediante la compra de la compañía Q-Layer por parte de Sun el pasado mes de enero de 2009, que ofrecen todo lo que un equipo de proyecto necesita para construir y poner en funcionamiento un centro de datos en la nube. El VDC proporciona un interface unificado e integrado para ejecutar una aplicación que pueda correr sobre cualquier sistema operativo dentro de una nube, incluyendo OpenSolaris, Linux o Windows. Lleva consigo un método de arrastrar y soltar, además de interfaces de programación de aplicaciones -APIs- específicos y un interface de línea de comando para suministrar recursos de procesamiento, de almacenamiento y de conectividad a través de cualquier navegador. Por otra parte, el Sun Cloud Storage Service soporta protocolos WebDAV para un acceso sencillo a los ficheros y APIs de almacenamiento de objetos compatibles con los APIs S3 de Amazon. Como parte del compromiso de la compañía con la creación de comunidades, Sun también ha abierto sus APIs cloud para que puedan revisarse y comentarse por todos los desarrolladores de la comunidad Open Source, de forma que éstos puedan crear nubes públicas o privadas mejoradas y totalmente compatibles con Sun Open Cloud. Las especificaciones de los APIs de Sun Open Cloud han sido publicadas bajo licencia Creative Commons, que permite a cualquier persona el uso de las mismas de cualquier forma. Los desarrolladores podrán desplegar aplicaciones en Sun Cloud de forma inmediata, aprovechando VMIs (Virtual Machine Images) pre-empaquetadas del software open source de Sun, eliminando la necesidad de descargar, instalar o configurar software de infraestructura. Una oportunidad para todos Uno de los beneficios más evidentes del Cloud Computing es la mejora de utilización de los recursos informáticos disponibles. El cambio económico inherente al pago por uso que el modelo Cloud Computing trae de la mano es una de las principales virtudes de este modelo. Sólo se paga por lo que se utiliza, y las tarifas son generalmente inferiores al coste de desarrollo y mantenimiento interno de los servicios equivalentes. Este modelo permitirá a las empresas, grandes y pequeñas, y a los gobiernos sustituir fuertes inversiones en infraestructura informática (CAPEX) por gastos de operación (OPEX), adaptando de forma flexible la oferta a la demanda. Los desarrolladores serán uno de los colectivos más importantes para la apuesta de Sun por el Cloud Computing. Ejemplo claro de ello son las ampliaciones que la compañía ha realizado en algunos de sus programas más conocidos. En una versión de la suite ofimática OpenOffice, especialmente desarrollada para este fin, los usuarios podrán utilizar la nube pública de Sun para almacenar y recuperar documentos de la red, en lugar de emplear su ordenador; y con VirtualBox, nuestro producto de virtualización de escritorio, los usuarios podrán acceder a un servicio de carga cuando deseen ejecutar diferentes Sistemas Operativos o aplicaciones en la nube de Sun. Cloud Computing es el futuro, sin duda. Pero mejor, sobre el modelo Open Source. 31 www.lpmagazine.org 30_31_Cloud_Sun.indd 31 2009-04-14, 15:37 Cloud Computing Cloud Computing: ¿Stairway To Heaven? Cloud Computing: ¿Stairway To Heaven? Lino García Morales [email protected] A mediados de los 90 Marc Andreessen (cofundador de la empresa Netscape Communications Corporation y coautor de Mosaic, uno de los primeros navegadores web con interfaz gráfico) predijo que Microsoft Windows estaba destinado a ser un “pobre conjunto de drivers ejecutándose en Netscape Navigator”. N etscape desapareció en Marzo del 2008, sin embargo, su predicción va camino de cumplirse en algún Navegador web. En el artículo LINO Operating System [Linux+ 3/2009, pp: 42-45] se cuestiona el papel de los sistemas operativos en la actualidad en un mundo interconectado a alta velocidad llamado internet. Internet se puede considerar como un superordenador cuya potencia está distribuida por todo el globo. El paradigma de la computación distribuida, divide y vencerás, convive a diferentes escalas (según la aplicación y unidades de proceso involucradas): uso de múltiples ordenadores en una empresa en lugar de uno solo centralizado (aplicado desde finales de los 70s), uso de múltiples ordenadores en red distribuidos en un área geográfica extensa o en el mundo entero (vía internet) o el uso de múltiples dispositivos inteligentes en red; todo ello para resolver un solo problema (con la ilusión de muchos a la vez). Según TryCatch en su blog sobre programación: Web y tecnología: Sin miedo a las excepciones... (http://trycatch. lacoctelera.net/post/2008/12/15/cloud-computing-1-defi nicion-es-y-caracteristicas), Cloud Computing no es una tecnología nueva ni una arquitectura o framework de desa- 32 32_33_34_Cloud_heaven.indd rrollo Web más ágil y más productivo. Sino … un concepto, una comunión de ideas, como en su momento lo fue Web2.0, que engloba tanto nuevas tendencias como la evolución de servicios ya existentes. La IEEE la define como… un paradigma en el cual la información está permanentemente almacenada en servidores de Internet y es cacheada temporalmente por los clientes que incluye desktops, móviles, monitores, sensores, portátiles, etc. ¿Qué es todo esto? Que tanto datos como procesos ya no están en nuestros equipos sino en la nube. Nuestro sistema es un simple accesorio con escaleras al cielo (navegador/cuenta/ internet) para acceder y utilizar servicios (conjunto integrado de procesos) sin tener conocimientos expertos ni necesidad de controlar y configurar esas tecnologías o servicios. La Figura 1 ilustra las clases de Cloud Computing que se describen a continuación. SaaS (Software As A Service). Modelo de distribución de software donde una empresa sirve el mantenimiento, soporte y operación que usará el cliente durante el tiempo que haya contratado el servicio. Ejemplos: Salesforce (http://www.salesforce.com/es/), Basecamp (http://www. basecamphq.com/). Linux+ 6/2009 32 2009-04-14, 14:18 Cloud Computing Cloud Computing: ¿Stairway To Heaven? PaaS (Platform As A Service). Modelo en el que se ofrece todo lo necesario para soportar el ciclo de vida completo de construcción y puesta en marcha de aplicaciones y servicios web completamente disponibles en internet. Da soporte directamente al software que corre en la nube con la infraestructura contratada por el cliente. No hay descarga de software que instalar en los equipos de los desarrolladores. PaaS ofrece múltiples servicios, todos, como una solución integral en la web. Ejemplos: Google App Engine (http://code.google.com/ intl/es-ES/appengine/). IaaS (Infrastructure As A Service). Modelo de distribución de infraestructura de computación como un servicio (se suele considerar como la capa más inferior del modelo, incluyendo la capa HaaS o, como muestra la Figura 1, la zona intermedia de toda la arquitectura), normalmente mediante una plataforma de virtualización. En vez de adquirir servidores, espacio en un centro de datos o equipamiento de redes, los clientes compran todos estos recursos a un proveedor de servicios externo (hosting, capacidad de cómputo, mantenimiento y gestión de redes, etc.). Una diferencia fundamental con el hospedaje (hosting) virtual es que el aprovisionamiento de estos servicios se hace de manera integral a través de la web. Ejemplos: Amazon Web Services (http://aws.amazon.com/) y GoGrid (http://www.gogrid.com/). DaaS (Data Storage As A Service). Almacén de datos como servicio. Proporciona la gestión y el mantenimiento completo de los datos del cliente. Trabaja al mismo nivel que IaaS. CaaS (Communication As A Service). Provee el equipamiento de redes y la gestión de las comunicaciones como servicio (balance de carga, por ejemplo). Trabaja al mismo nivel que IaaS. Software Kernel. Gestión de los servidores físicos a través del sistema operativo, software de virtualización, middleware de gestión de clústeres y de la grid, etc. HaaS (Hardware As A Service). Gestión del hardware (elementos físicos de la nube) como servicio. Normalmente centros de datos gigantescos con todo tipo de máquinas que proporcionan cómputo, almacenamiento, catálogos, etc. Otras tecnologías consideradas Cloud Computing son: • • • Web2.0 Herramientas y aplicaciones como redes sociales, blogs, wikis, foros, etc. Web Os (sistemas operativos en la Web). Web Semántica o Web 3.0, etc. Grid Computing. Evolución natural de la nube. Es una arquitectura de procesado en paralelo, que permite compartir/distribuir los recursos de proceso de muchas máquinas a través de la red de manera que funcionen como un super-computador gigante. Por raro que parezca, los procesadores están ociosos la mayor parte del tiempo y este tiempo se puede poner en función de la solución de problemas computacionales enormes. Un ejemplo de ello es el Programa para la Búsqueda de Inteligencia Extraterrestre (SETI, Search for Extraterrestrial Intelligence, http://setiathome .ssl.berkeley.edu/). La Grid Computing, también se conoce como Peer-to-peer Computing (red punto a punto o P2P), Utility Computing, o simplemente Distributed Computing. Figura 1. Clases de Cloud Computing Las principales características de Cloud Computing provienen de las tecnologías que forman la nube y de las nuevas capacidades provenientes de la fusión de estos servicios: • • • • Escalabilidad. El sistema trabaja de forma eficiente aumentando o disminuyendo el uso de recursos según demanda, de forma automática y transparente para el usuario. Virtualización. El usuario puede hacer uso de la plataforma o entorno que desee, ya sea contratándolos o creándolos él y pasándoselas al servicio. Existe una total independencia entre datos y hardware; las aplicaciones corren en servidores y el acceso se suele realizar desde un navegador. Calidad de Servicio. Se rige por un Acuerdo de Nivel de Servicio (SLA, Service Level Agreement), que define varias políticas como: rendimiento, tiempos de acceso, capacidad de tráfico, picos de conexión soportados, etc. Calidad de servicio y escalabilidad están directamente relacionados; el sistema se encarga de gestionar los recursos según estos términos. Accesibilidad. Debido a las propiedades anteriores la nube es accesible desde un amplio abanico de dispositivos. Peldaños, plantas y desniveles Que nuestros datos y relaciones no estén en nuestros equipos ni dependan del sistema operativo de nuestras máquinas no es nada nuevo. Todo lo contrario, es anterior incluso de la aparición del primer ordenador personal, cuando nos conectábamos a las máquinas grandes (Supercomputer, Mainframes, Minicomputer, utilizadas principalmente por grandes organizaciones para aplicaciones críticas como el proceso de una enorme cantidad de datos) a través de un terminal tonto (dummy). Desde un punto de vista estrictamente técnico no es exactamente lo mismo. Nos comunicamos a internet a través de algún módem ADSL o interfaz inalámbrica como poco, en lugar de un solo superordenador gigante accedemos a muchos de menor potencia que interactúan entre sí para conseguir mayor funcionalidad y prestaciones, etc. Pero, desde un punto de vista funcional, sí. El navegador (browser) es una especie de versión superior del XTerm, y nuestro PC un terminal avanzado respecto al tonto en términos multimedia. 33 www.lpmagazine.org 32_33_34_Cloud_heaven.indd 33 2009-04-14, 14:18 Cloud Computing Cloud Computing: ¿Stairway To Heaven? Figura 2. Cloud Computing everything and kitchen sink Cuando entramos en http://picasaweb. google.es/ a subir fotos para compartirlas con familiares y amigos desde cualquier lugar del mundo sólo necesitamos un navegador, acceso a internet y una cuenta gmail. No sabemos dónde están, ni cómo son administradas, ni nos interesa; sólo que podemos verlas siempre que queramos, desde cualquier ordenador y lugar del planeta, cambiarlas o establecer permisos y restricciones de uso (a quién permitimos verlas, a quién descargarlas, etc.). Detrás de este servicio, puede haber mucho más de un ordenador (de diferente tecnología incluso) que valida la cuenta, sirve e interactúa con los usuarios. Incluso si toda esta tecnología cambia, mientras que el servicio se mantenga igual, no notaremos ninguna diferencia. ¿Por qué todo esto? Pues porque no hay nada que instalar localmente, no nos ocupa espacio, no tenemos que preocuparnos de averías o fallos, la mayoría de los servicios son gratuitos o de menor coste que si intentáramos hacerlo por nuestra cuenta y son segu- 34 32_33_34_Cloud_heaven.indd ros (Amazon ofrece un 99,95% de fiabilidad; tan solo 4,38 horas de caída al año). Eso sí, la información queda en manos de terceras personas; el propio Richard Stallman, considerado padre del software libre, ha dicho … el Cloud Computing es una trampa; pero bajo determinadas condiciones legales (esa letra pequeña que, aunque resulte un incordio, conviene leer) y medidas de seguridad (respecto al acceso, uso, distribución, etc.) y no al libre albedrío. Paradójicamente, con ordenadores cada vez más potentes, el uso de estos servicios sólo requiere ordenadores cada vez más tontos (cierta capacidad multimedia y conexión a red) pero esto tiene su lado positivo y es que aumenta el abanico de dispositivos desde dónde acceder/utilizar a/los servicios. Conclusiones La computación en nube es una realidad y permite tanto a, usuarios como a empresas, mayor flexibilidad para ofrecer/consumir servicios. La interconexión de estas nubes permitirá crear/usar servicios cada vez más complejos de manera más simple y desde un mayor número de dispositivos, incrementar y compartir el patrimonio cultural, democratización de la información, y así, un largo etcétera. Ahí están los ejemplos de servicios de Google: Scholar (enorme conjunto de artículos de interés educacional, científico...), Maps (mapas callejeros, planificadores de rutas óptimas, páginas amarillas…), Books (biblioteca digital gigantezca…), Talk (comunicación, búsqueda de contactos…), Earth (visión tridimensional del planeta; navegación en cualquier parte del mundo, es posible entrar incluso a los museos y acercarse a las obras hasta el milímetro; señalización…), Youtube (probablemente la videoteca más grande del mundo), Blogger (diarios digitales, bitácoras, narraciones compartidos, periodismo...). Todo este entramado de servicios está influyendo notable y positivamente en nuestro modo de vida en la medida en que facilitan su uso a menor complejidad y coste. Gracias a estas nubes los científicos pueden realizar cálculos en superordenadores de potencia ilimitada, un músico compartir sus creaciones, un cineasta sus películas, un escritor sus libros, narraciones o poesías, un grupo de amigos puede mantenerse en contacto, un conductor planificar su viaje de vacaciones, un turista reservar su itinerario de vacaciones, un amante de la cocina compartir una buena receta, un inventor sus ideas, una empresa mantener sus documentos a salvo, etcétera, etcétera, etcétera. La computación en nube es una vuelta al futuro. Llegará el día en que, aquellos que lo deseen, puedan olvidarse de los drivers, las tediosas instalaciones, la enorme espera del arranque del sistema operativo, la gestión de su equipo informático y puedan concentrarse en lo que realmente les importa; ese día, por fin, la inmersión digital será una experiencia realmente placentera, habremos tocado el cielo. Sobre el autor Graduado de Ingeniería en Control Automático, Máster en Sistemas y Redes de Comunicaciones y Doctor por la Universidad Politécnica de Madrid. Ha sido profesor en Instituto Superior de Arte, Universidad Pontificia Comillas y la Universidad Meléndez Pelayo. Actualmente Profesor de la Escuela Superior Politécnica de la Universidad Europea de Madrid y Director del Máster Oficial en Acústica Arquitectónica y Medioambiental. Lidera grupo de investigación transdisciplinar en la intersección Arte, Ciencia, Tecnología y Sociedad. Ha recibido becas por la Agencia Española de Cooperación Internacional (AECI), la Fundación para el Desarrollo de la Función Social de las Comunicaciones (FUNDESCO), el Consejo Superior de Investigaciones Científicas (CSIC) y la Universidad Politécnica de Madrid. Linux+ 6/2009 34 2009-04-14, 14:18 35_rekl_arroba.indd 1 2009-04-14, 14:18 software Juegos sección llevada por Francisco J. Carazo Gil Zero Ballistics E ste mes la sección comienza con un juego que mezcla dos géneros distintos consiguiendo un resultado divertido a la vez que original. Se trata de Zero Ballistics, un juego comercial pero gratuito que bajo el lema Fácil de aprender pero difícil de dominar sus desarrolladores han conseguido una mezcla muy buena entre géneros un tanto dispares. Los FPS, rápidos y de poco pensar como suelen decir al más puro estilo Quake junto con la estrategia y las posibilidades de todo juego de tanques. La mezcla consigue un equilibrio muy bueno, acaparando de cada uno características que se complementan. La rapidez de un FPS con la estrategia y el planeamiento de todo juego de tanques. Los gráficos son otra parte muy conseguida del juego. Además de estar muy cuidados, tienen unas escenas de paisajes alpinos con mucho detalle. Además el juego incorpora un motor físico que mejora aún más la percepción de calidad. Los tanques disponen de tres armas principales y tres armas secundarias. Para poder llegar a ser un gran jugador, Figura 1. Zero Ballistics tendremos que llegar a dominar los tres parámetros de los que depende el éxito de nuestro disparo: la velocidad de nuestro oponente, la trayectoria que cogerá el obús y la distancia real entre el objetivo y nosotros. Disponemos de multitud de posibilidades distintas de tanques, para las más diversas situaciones. Además de las distintas armas disponibles, también tenemos a nuestra disposición tanques y capacidad para sanar. Utilizamos tanto el ratón como las flechas del teclado para controlar nuestro tanque y tenemos posibilidad de jugar en red. Las dos modalidades de juego son all vs. all o el juego por equipo. Respecto a las necesidades hardware del equipo para ejecutarlo no necesitamos un gran equipo, porque aunque sean de calidad y estén muy cuidados, la cantidad de polígonos en movimiento no es demasiado grande. Respecto a versiones disponibles para otros sistemas operativos, existe una versión para Windows, además de la existente para Linux. Es una pena que no sea software libre, pero como tiene suficiente calidad y es gratuito creo que a muchos no os importará. En definitiva, un juego que combina dos géneros de manera original y con un resultado divertido y completo. La capacidad de jugar en equipo a través de la red, abre muchas posibilidades, ya que además del típico todos contra todos, el modo de juego en equipo favorece el crear estrategias en grupo y hacer un planteamiento previo muy interesante. Desde mi punto de vista personal, pasados los años y cuando los FPS se me empiezan a hacer algo repetidos ya, el aire fresco que da este título me ha resultado muy divertido y creo que a todos vosotros os pasará lo mismo. http://www.zeroballistics.com/ NOTA jugabilidad gráficos sonido H ace ya mucho tiempo, allá por el número 45 de la revista si no me engaña mi base de datos, comenté un juego dedicado a los solitarios llamados PySol y si lo leísteis probablemente sigáis usando para matar los ratos muertos. La inclusión del archiconocido solitario de Microsoft Windows, como juego por defecto en una versión del sistema operativo de Microsoft que ya ni recuerdo, implicó el resurgir de este tipo de juegos. En un mundo tan digitalizado como el actual y en una actividad en la que sólo hace falta una persona, como es la de jugar a un solitario, nada mejor que un programa de ordenador con cientos de variantes para tener posibilidades distintas para jugar año tras año. Pero bueno, este no es nuestro tema ahora en el segundo juego que cierra la sección de este mes. El tema que nos ocupa es PyChess y como podréis deducir de su nombre es un juego de ajedrez, implementado en Python. Sus creadores creo que no guardan relación alguna con los creadores de PySol, pero al igual que ocurre con los programas que comienzan o tienen una letra k significada que pertenecen a Proyecto KDE, la Py se está convirtiendo en todo un distintivo de los programas realizados con Python. En este caso el diseño es para Gnome y bajo su sencilla estética se esconFigura 2. PyChess de un potentísimo juego de ajedrez para jugar contra la máquina o con un amigo ya sea en persona o mediante la red (característica de la que pocos juegos de ajedrez libres puede presumir). Tenemos también opción de modificar la IA de la máquina, es decir, descargar otro motor de inteligencia artificial para jugar a ajedrez y cambiarlo, de manera que tendremos oponentes virtuales muy dispares. Por ejemplo, fruit y crafty son dos ejemplos de este tipo de motores de IA que además son software libre. Rybka, es otro famoso motor de IA, pero su código no es abierto. Esta característica, junto con la de la red, hacen de él un juego único. Por cierto, en la Wikipedia en su versión inglesa encontraréis más motores de inteligencia artificial para juegos de ajedrez. El juego es software libre y actualmente se encuentra en su versión 0.10 de nombre Staunton en fase Alfa 2. A pesar de ser una versión 0.10 ya han salido unas cuantas versiones anteriormente del juego, ya que la numeració comenzó con el 0.1. Existen paquetes descargables tanto en formato RPM como en formato DEB así como el código fuente comprimido y empaquetado en un tarball. En definitiva, un juego simple que al igual que PySol nos permitirá desconectar fácilmente del trabajo y que nos permitirá además tener unas posibilidades que con la práctica totalidad de los otros juegos similares no podemos disfrutar como el cambio de motor de IA y la posibilidad de jugar a través de red. Como punto final, comentaros que se encuentra en pleno proceso de desarrollo (un desarrollo muy activo por cierto) por lo que cada poco tiempo podremos disfrutar de nuevas versiones y funcionalidades. http://pychess.googlepages.com/ NOTA jugabilidad «««« gráficos «« sonido N/A «««« «««« ««« 36 36_Juegos.indd PyChess Linux+ 6/2009 36 2009-04-14, 14:18 Pedido de suscripción Por favor, rellena este cupón y mándalo por fax: +31 (0) 36 540 72 52 o por correo: EMD The Netherlands – Belgium, P.O. Box 30157, 1303 AC Almere, The Netherlands; e-mail: [email protected] Nombre(s) ................................................................................................... Apellido(s) .................................................................................................. Dirección .............................................................................................................................................................................................................................. C.P. .............................................................................................................. Población .................................................................................................... Teléfono ..................................................................................................... Fax ............................................................................................................... Suscripción a partir del No ................................................................................................................................................................................................... e-mail (para poder recibir la factura) .................................................................................................................................................................................. o Renovación automática de la suscripción Título número de ejemplares al año Linux+DVD (1 DVD) Mensual con un DVD dedicado a Linux número de suscripciones a partir del número 12 69 € En total Realizo el pago con: □ tarjeta de crédito (EuroCard/MasterCard/Visa/American Express) nO CVC Code Válida hasta □ transferencia bancaria a ABN AMRO Bank, Randstad 2025, 1314 BB ALMERE, The Netherlands Número de la cuenta bancaria: 59.49.12.075 IBAN: NL14ABNA0594912075 código SWIFT del banco (BIC): ABNANL2A 37_Formularz_prenumeraty.indd 89 Precio Fecha y firma obligatorias: 2009-04-14, 14:19 software Interconexión de Sistemas Abiertos Interconexión de Sistemas Abiertos Lino García Morales [email protected] El modelo de referencia de interconexión de sistemas abiertos (OSI, Open System Interconnection) fue desarrollado por la ISO (Organización Internacional de Normalización) en 1977 para describir las arquitecturas de redes y compatibilizar la comunicación entre los fabricantes de ordenadores. T res décadas después, el modelo ha demostrado sobradamente su eficacia y, probablemente, ha sido uno de los proyectos de las tecnologías de la información y comunicaciones mejor pensado. El objetivo de este modelo fue la búsqueda de la integración/ desagregación natural de los componentes de un sistema según su funcionalidad para conseguir. La formalización de un modelo de interconexión corresponde a un amplio catálogo de normalización. Tales normas se pueden dividir en dos categorías: • • Las normas de facto (de hecho), Las normas de jure (por ley). Posibilidad de trabajo interactivo entre terminales. Las primeras se establecen sin ningún planteamiento formal; simplemente se imponen por su práctica. Las últimas son formalizadas y adoptadas por un organismo internacional. Independencia Capas, protocolos e interfaces Interoperabilidad Implementación del modelo sobre cualquier arquitectura. La organización de una red de elementos informáticos en niveles funcionalmente independientes, construidos sobre la base Extremos abiertos de sus predecesores y ordenados jerárquicamente, garantiza la Capacidad de comunicación entre terminales que corren reducción de la complejidad, el aumento de la modularidad de distinto software. los diseños, interfaces entre módulos bien especificadas y documentadas, posibilita la estandarización, etc. Interconectividad El diseño de una red, por compleja que sea, se reduce Define las reglas que posibilitan la interconexión física y la a la desagregación en pequeños módulos, montados unos sotransmisión de datos entre terminales diferentes (hardware/ bre otros. La filosofía de este modelo es dividir un problema software). grande en muchos problemas pequeños. Cada capa o nivel 38 38_39_40_Interconnection.indd Linux+ 6/2009 38 2009-04-14, 14:19 software Interconexión de Sistemas Abiertos OSI Protocolo N N 2 2 Interfaz Nivel 1 1 Figura 1. Capas, protocolos e interfaces utiliza la funcionalidad proporcionada por las capas inferiores y crea, a su vez, un nuevo nivel de funcionalidad para las capas superiores (cada eslabón o nivel da solución a un nuevo problema teniendo en cuenta lo que ha solucionado el eslabón anterior). La funcionalidad de cada capa, el número de capas, la comunicación entre capas y el nombre de cada capa varía de una red a otra. Sin embargo, en general para todas las redes el propósito de cada capa es ofrecer ciertos servicios a su nivel superior. La conversación o diálogo entre las estaciones/ puntos terminales se realiza por capas (la capa N de un sistema interactúa con la capa N de los otros) y es controlada por un conjunto de reglas y convenciones de manera tal que no exista ambigüedad o incoherencia en el diálogo. Al conjunto de reglas y procedimientos que rige el diálogo entre dos niveles de igual orden en las estaciones que interactúan se le denomina protocolo y el número de orden de tal protocolo está en correspondencia directa con el nivel para el cual se establece (procedimientos iguales pertenecientes a un mismo nivel de orden N en máquinas diferentes, dialogan o se comunican a través de un protocolo de nivel N). Dentro de la estructura jerárquica de la red los protocolos definen las reglas para la comunicación armónica entre procesos situados en niveles jerárquicos equivalentes. La comunicación establecida entre niveles equivalentes no es física sino virtual. Cada capa pasa la información de datos o control que desea enviar a su nivel equivalente sólo a través de su nivel inmediato inferior que la propaga por cada nivel hasta llegar al más bajo que es, en realidad, quien verdaderamente realiza el enlace o conexión física. Igualmente, los niveles inferiores pasan información de control o respuesta sólo a su nivel inmediato superior hasta que llegue al nivel al cual va dirigida. Las reglas de comunicación entre procesos situados entre niveles jerárquicos diferentes se denominan interfaces. Estos son los servicios que las capas inferiores ofertan a su capa inmediata superior. En la comunicación parece como si una parte del nivel o capa se comunicara directamente con su contraparte a través del protocolo correspondiente; pero, en realidad, los datos pasan a la capa inferior a través de la interfaz. Cada capa obtiene los servicios de la capa inferior a través de la interfaz correspondiente. La comunicación entre los elementos de una capa o nivel en la estructura a través de una interfaz común se denomina comunicación jerárquica. Existen muchas formas de estructurar las capas y definir sus funciones. Uno de los aspectos más importantes para los diseñadores de redes es precisamente decidir la cantidad de niveles y sus funciones; así como las especificaciones acerca de las operaciones a realizar por cada interfaz entre un nivel y otro, de forma tal que minimice el volumen de información a transitar entre niveles a través de su correspondiente interfaz. Al conjunto de niveles con sus respectivos protocolos se le denomina arquitectura de red. Las especificaciones de la arquitectura deben contener información suficiente para la implementación de los protocolos de cada nivel. Los detalles de la implementación y las especificaciones de las interfaces no forman parte de la arquitectura (en todas las estaciones de la red las interfaces entre niveles no tienen porque ser iguales; la correspondencia es necesaria sólo respecto a los protocolos que rigen los diferentes niveles). El modelo de interconexión de sistemas abiertos (OSI, Open System Interconnection) es un modelo de referencia para las comunicaciones entre sistemas abiertos propuesto por la organización internacional de normalización (ISO, International Standard Organization). Este modelo, ISO 7498, define un conjunto de normas y protocolos que permiten la interconexión de diversos sistemas TIC. Niveles funcionales El modelo OSI define una jerarquía de siete capas de protocolos, cada uno de los cuales utiliza a los de nivel inferior para ofrecer un determinado servicio, al mismo tiempo que complementa los servicios proporcionados por los protocolos de nivel superior. Los trabajos sobre la interconexión de sistemas abiertos comenzaron cuando los usuarios comprendieron que no se podrían llevar a la práctica todas las posibilidades potenciales de las redes de datos y de los sistemas públicos de conmutación de paquetes; si cada dispositivo interconectado a la red exigiese el conjunto de protocolos que determinase su fabricante. Tradicionalmente los sistemas informáticos siempre fueron cerrados, es decir, los dispositivos se ajustaban únicamente a las normas de interconexión establecidas por el fabricante o diseñador del sistema. Los protocolos que utilizaban los terminales estaban determinados por las características del ordenador o controlador de comunicaciones. Un terminante para emular el modelo especificado de otro fabricante, e incluso del mismo fabricante pero de otra familia de productos, difícilmente podía conectarse al sistema, sin antes ser modificado convenienteme Esta situación resultó aceptable mientras el número de dispositivos a integrar en un sistema era reducido y bajo el estricto control de un solo Protocolo de Aplicación Aplicación Aplicación Protocolo de Presentación Presentación Protocolo de Sesión Sesión Sesión Protocolo de Transporte Transporte 39 Transporte Red Red Red Red Enlace Enlace Enlace Enlace Físico Físico Físico Físico Medio Físico de Interconexión Protocolo interno de la Subred de Transporte Figura 2. Modelo OSI de la ISO 39 www.lpmagazine.org 38_39_40_Interconnection.indd Presentación 2009-04-14, 14:19 software Interconexión de Sistemas Abiertos ordenador. Sin embargo el avance de las técnicas informáticas, en las técnicas de interconexión a red y la proliferación de ordenadores y equipos relacionados con ordenadores, ha sido de tal magnitud que actualmente es inaceptable el concepto de red cerrada. Por el momento, tanto usuarios como fabricantes, coinciden en el beneficio que reporta establecer una serie de normas o estándares para la interconexión de sistemas abiertos que permita la integración de funciones operacionales de los equipos a todos los niveles. El modelo de referencia de la ISO supone el primer intento serio hacia la consecuencia de ese objetivo. de servicio que imponen las aplicaciones y la calidad de servicio ofrecida por las redes. Sesión Ofrece mecanismos para que la aplicación pueda gestionar su diálogo, sincronizar y re-sincronizar el flujo de datos. Para ello establece y libera conexiones de sesión; establece correspondencia entre direcciones de sesión y transporte; segmenta y concatena; gestiona testigos; sincroniza y re-sincroniza; etc. Es la auténtica interfaz del usuario hacia la red (con procedimientos de identificación de usuario mediante el uso de contraseña). Físico Presentación Proporciona el soporte de transmisión o medio material para que establecer y mantener el flujo de información entre varios terminales remotos y la señalización necesaria para la gestión de errores. Este nivel define y caracteriza las propiedades mecánicas, eléctricas y funcionales de los dispositivos involucrados en el enlace físico. Independiza a la aplicación de los problemas relativos a la presentación de los datos (sintaxis de transferencia). Esta capa negocia y transforma sintaxis de transferencia, traduce alfabetos etc. Define una sintaxis común para la representación de los símbolos (cada terminal o punto deberá establecer una correspondencia entre tal sintaxis y la correspondiente a su arquitectura interna). Enlace Garantiza un servicio de transferencia de datos libre de error (en términos de mínima probabilidad). Esta capa es la responsable de establecer y liberar conexiones de enlace, dividir la información en tramas, delimitar y sincronizar, secuenciar, controlar el flujo de datos, detectar y recuperar errores, controlar el acceso al medio, etc. Red Provee un servicio de conectividad universal independiente de la tecnología (oculta a las capas superiores las diferencias tecnológicas de las subredes) a la vez que ofrece una calidad de servicio. Sus funciones más importantes son el encaminamiento de la información (y almacenamiento y reenvío), la multiplexación, etc. Transporte Proporciona un servicio de transferencia de datos fiable y efectivo en coste a la vez que mantiene la calidad de servicio. Básicamente, realiza tres servicios: • • • establecimiento de conexión, difusión de la información a múltiples destinatarios, posibles transacciones. Para ello debe establecer la correspondencia entre las direcciones de transporte y de red; multiplexar y dividir; establecer y liberar conexiones de transporte; segmentar, agrupar y concatenar; etc. Esta capa independiza las aplicaciones de comunicaciones y media entre los requisitos de calidad 40 38_39_40_Interconnection.indd Aplicación Proporciona los medios para que un proceso de aplicación acceda al entorno OSI. Es el único nivel que conoce la semántica asociada a la transferencia de información. La segmentación funcional de las capas permite el intercambio de ellas sin perjudicar al sistema. Por ejemplo, el RS232 es un protocolo de nivel físico punto a punto, mientras que el RS485 es de tipo bus. La capa física define la topología de la red: árbol, bus, anillo, etc. y la capa de enlace el protocolo de acceso. Sin embargo es posible sustituir un enlace RS232 punto a punto por un enlace inalámbrico multipunto IEEE 802.11g sin que cambie la funcionalidad de los niveles por encima de la subred de transporte. Esta flexibilidad garantiza la actualización/renovación del hardware de comunicación y el desarrollo de las aplicaciones independientemente de la tecnología. Conclusiones El modelo OSI ataca el problema de la compatibilidad entre terminales (procesador, velocidad, almacenamiento, interfaz de comunicación, código de caracteres, sistema operativo, etc.) mediante la formalización de diferentes niveles o capas de interacción. Esta desagregación provee dos beneficios muy importantes: posibilita una mayor comprensión del problema a la vez que permite optimizar la solución de cada problema específico. En esta arquitectura la información que genera/entrega un proceso a la capa de aplicación baja hacia la subred de trans- Sobre el autor Graduado de Ingeniería en Control Automático, Máster en Sistemas y Redes de Comunicaciones y Doctor por la Universidad Politécnica de Madrid. Ha sido profesor en Instituto Superior de Arte, Universidad Pontificia Comillas y la Universidad Meléndez Pelayo. Actualmente Profesor de la Escuela Superior Politécnica de la Universidad Europea de Madrid y Director del Máster Oficial en Acústica Arquitectónica y Medioambiental. Lidera grupo de investigación transdisciplinar en la intersección Arte, Ciencia, Tecnología y Sociedad. Ha recibido becas por la Agencia Española de Cooperación Internacional (AECI), la Fundación para el Desarrollo de la Función Social de las Comunicaciones (FUNDESCO), el Consejo Superior de Investigaciones Científicas (CSIC) y la Universidad Politécnica de Madrid. Además ha formado parte de las bandas Cartón Tabla y Música d’ Repuesto. Discografía: Las palabras vuelven, Se fue, Bags, Flags, Faqs, Fotos d’ parque, These little things that keep inside, Mr. Fro (colaboración con Alejandro Frómeta), El eje del mal, Av abuc, Variaciones en la cuerda VOL. I. Y ha publicado una novela: Islas. [email protected] porte y sube hacia la aplicación destino para su entrega al proceso correspondiente. Cada capa añade información redundante (adicional), para garantizar su servicio, en el proceso de descenso, mientras que la elimina, en el proceso de ascenso. Cada capa realiza tareas únicas y específicas; sólo tiene conocimiento de los niveles adyacentes, utiliza los servicios de la capa inferior y presta servicios a la capa superior. Este modelo (con las definiciones de servicios y protocolos asociados) es muy complejo y extenso y, por supuesto, no es perfecto. Muchas son las críticas que ha recibido durante todos estos años. Sin embargo aporta un método para enfocar la complejidad de un sistema (facilita la comprensión al dividir un problema complejo en partes más simples), normaliza los componentes de red y permite el desarrollo por parte de diferentes fabricantes (los cambios de una capa no afectan las demás capas y éstas pueden evolucionar más rápido), garantiza la comunicación entre procesos libre de error, evita los problemas de incompatibilidad (e indirectamente la obsolescencia), simplifica el aprendizaje, y así, un largo etcétera, que prorroga su caducidad. Linux+ 6/2009 40 2009-04-14, 14:19 41_rekl_chicaslinux.indd 1 2009-04-14, 14:19 soluciones para empresas Máquinas virtuales Maquinas virtuales, parte II Daniel García [email protected] En esta segunda entrega nos adentraremos en los detalles de implementación sobre el entorno de prueba. Se detallará paso a paso una instalación de Debian, para los principiantes, clonación de máquinas virtuales y configuración de diversos servicios red, entre ellos: un firewall perimetral, un proxy cache transparente, un servidor DNS, etcétcera. E xplicados los conceptos, más o menos teóricos, vamos a instalar paso a paso una máquina virtual. Se intentará detallar lo máximo posible este proceso para que pueda ser seguido con la mayor sencillez posible. El sistema que instalaremos será Debian. El motivo es su sencillez, el bajo número de recursos necesarios, el poco espacio que ocupa en disco y el hecho de resolver dudas en cuanto a la instalación, que mucha gente tiene. Creando una nueva máquina virtual Para comenzar pulsaremos el botón Nuevo que se encuentra en la parte izquierda superior de la ventana. Nos aparecerá un asistente que nos dará la bienvenida. Pulsamos sobre Siguiente (o Next, dependiendo del idioma). Se nos pedirá que le demos un nombre a nuestra nueva máquina (Figura 1). El nombre puede ser cualquiera, pero sería conveniente elegir uno descriptivo. En concordancia al sistema que vayamos a instalar. También es una buena práctica no usar espacios para el nombre para evitar posibles problemas posteriores con la codificación de carácteres que podrían tenerse en algunos sistemas. En su lugar podemos sustituir el espacio por la barra baja (_). Nosotros llamaremos a nuestra máquina. Debian_base. 42 42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_Maquinas_virtuales.indd 42 En el desplegable que aparece debajo hemos de indicarle el sistema operativo que vamos a instalar. Seleccionamos Debian. Como curiosidad, se puede observar que, dependiendo del sistema operativo que elijamos, a la derecha aparece su logotipo asociado. Podemos ver en la imagen cómo como nos ha de quedar el cuadro de diálogo y la espiral de Debian. Una vez hecho esto pulsamos el botón de Next. En esta pantalla podemos elegir la cantidad de memoria que queremos asignar a la máquina virtual (Figura 2). Este parámetro depende de varias cosas. La primera es la cantidad de memoria física de la que dispongamos. La segunda es el sistema operativo que vayamos a virtualizar. Por ejemplo, para un Windows XP, la cantidad de memoria no debería de ser menor de 512MB si queremos que su funcionamiento sea aceptable. En nuestro caso, al no instalar un entorno gráfico, y disponer solamente de la funcionalidad básica con 64 MB de RAM sería suficiente. Por lo tanto asignamos esa cantidad. Si nos fijamos bien VirtualBox tiene almacenada la cantidad de requisitos mínimos de memoria necesarios, según el fabricante, para el correcto funcionamiento del sistema operativo y nos sugerirá dicha cantidad de memoria. Presionamos Next para continuar. Aquí nos aparecen los, ya explicados, discos duros virtuales. Nos aparecerá una pantalla Linux+ 6/2009 2009-04-14, 14:20 soluciones para empresas Máquinas virtuales Instalación de Debian Figura 1. Selección del nombre de la máquina y sistema operativo como la de la Figura 3. Puesto que no tenemos ningún disco duro creado con anterioridad, pulsamos el botón de Nuevo. VirtualBox nos mostrará entonces otro asistente que nos permitirá crear un nuevo disco virtual. Al igual que antes nos dará la bienvenida. Pasamos a la siguiente pantalla pulsando Next. En el siguiente cuadro nos parecerá el tipo de disco deseado. Elegimos el tipo de Imagen de expansión dinámica y avanzamos de nuevo. Se nos pedirá un nombre para el nuevo disco y un tamaño máximo. Considero que es una buena costumbre el poner nombres descriptivos. Por eso llamaremos al disco: Debian_base_hd0. Este sufijo indica Hard Disk 0. Esta nomenclatura es idónea si posteriormente quisiéramos añadir nuevos discos. Si lo hiciéramos podríamos llamarlos: Debian_base_hd1, Debian_base_hd2, etcétera. En cuanto al tamaño que nos asigna VirtualBox por defecto es excesivo para el tipo de instalación que pretendemos hacer. Sería una buena idea asignar esa cantidad en un sistema Windows, Ubuntu o cualquier otro en que vayamos a almacenar cierta cantidad de información. En nuestro caso nos bastará con 4GB. Por tanto escribiremos (o moveremos el indicador) hasta 4,00 GB. Hecho esto, en el siguiente paso se nos mostrará un resumen con las características elegidas. Presionamos el botón Finish y nuestro disco estará preparado. Finalizado el asistente de creación de discos volvemos al punto donde nos quedamos. Como podemos observar en la Figura 4, el disco es seleccionado de forma automática como maestro. Esto, al igual que un PC físico, significa que será desde ese disco duro desde donde la máquina virtual arrancará. Si después lo deseamos podemos añadir más discos esclavos. También vemos donde nos ha guardado los archivos que usa para emular el disco duro. Normalmente, a no ser que se le diga lo contrario, lo guardará en la carpeta personal del usuario. En un directorio oculto llamado .VirtualBox/VDI. Con el siguiente paso, en el que se nos muestra un resumen de todo lo elegido, finalizamos la creación de nuestra nueva máquina. Si hemos seguido correctamente los pasos del punto anterior, ahora estamos en disposición de instalar nuestro sistema operativo. Esta instalación nos servirá como sistema base para el resto de pruebas y ejemplos que se hagan. Mucha gente no instala Debian porque, dicen, es muy complicada su instalación. Nada más lejos de la realidad. Por eso se hará una instalación extremadamente detallada para que nadie se pierda durante el proceso. En primer lugar hemos de conseguir el CD de instalación de Debian. Podemos descargar la imagen desde la página oficial o seguir directamente este enlace: http://cdimage.debian.org/ debian-cd/5.0.0/i386/iso-cd/debian-500-i386netinst.iso. VirtualBox nos da la posibilidad de instalar el sistema sin necesidad de copiar la imagen en un cdrom, así que usaremos este método. Abrimos el menú de configuración de la máquina que creamos en el apartado anterior. Seleccionamos el menú, que se encuentra a la izquierda, CD/DVD-ROM. Pulsamos cuadro de chequeo para activar del CDROM y marcamos la opción Archivo de imagen ISO. Pulsamos en el botón derecho para seleccionar la imagen que descargamos. Nos aparecerá una nueva ventana. En ella tan solo tenemos que pulsar en Agregar y seleccionar el archivo que descargamos. Hecho esto pulsamos en seleccionar y se nos cerrará esa ventana. Volvemos a aceptar en el menú de propiedades. Ahora arrancaremos, por primera vez, nuestra máquina virtual. Pulsamos el botón Iniciar. Cada vez que arranquemos una máquina virtual nos aparecerá una ventana que nos informa sobre la captura del teclado para la máquina virtual. Cuando iniciamos un sistema virtualizado es necesario disponer de todos los dispositivos físicos mínimos para funcionar, como es el teclado. El problema es que solo tenemos un teclado y no puede ser usado a la vez en el ordenador físico (u otras máquinas virtuales) y en el virtual. Por lo tanto hay que elegir, o se utiliza en uno o en otro. Por eso, cuando ponemos en funcionamiento el sistema virtual, éste se adueñará del teclado. Para expropiárselo y que el sistema operativo de la máquina física vuelva a recuperarlo han de pulsarse una combinación de teclas. Esto es así para cualquier entorno de virtualización. En VMWare, por ejemplo, es la combinación CTRL + ALT. En VirtualBox es la tecla control de la parte derecha del teclado. La izquierda no liberará el teclado. Volviendo al mensaje, si lo leemos, eso es lo que nos dice. Si no queremos que cada vez que iniciemos una máquina virtual nos aparezca, basta con marcar el botón de chequeo, que se encuentra en la parte inferior de la pantalla. Aceptamos y continuamos con la instalación. La primera pantalla que se nos mostrará es la del gestor de arranque del CD (Figura 5). Salvo que queramos añadir algún tipo de parámetro no escribiremos nada, solamente pulsaremos Intro. Se empezará a cargar el kernel, los módulos necesarios y una serie de servicios. Acabado esto nos aparecerá como primer paso una pantalla en la que deberemos de seleccionar el idioma. Elegiremos Spanish como idioma y pulsamos Intro. En la siguiente pantalla se nos preguntará en qué idioma deseamos configurar el teclado. Por defecto, y si hemos elegido español, nos marcará por defecto castellano. Por tanto solo tenemos que pulsar Intro nuevamente. Entonces Debian empezará un proceso de reconocimiento de todo el hardware de su PC y carga de todos lo módulos necesarios para su correcto funcionamiento. Aunque estamos en un máquina virtual, el sistema de virtualización emula unos drivers y un sistema físico que requieren de su detección Exactamente igual que si estuviéramos en un PC real. Este proceso puede tomar algún tiempo, dependiendo del resto de programas que tenga abiertos ocupando el procesador, o la potencia de éste último. Ahora tendremos que ponerle un nombre a nuestra máquina virtual (Figura 6). Este nombre lo usará el sistema, sobre todo, para servicios de red. Nosotros hemos usado como nombre el de revista, pero sin el signo +, por no ser un carácter permitido como nombre. El lector puede usar el nombre que mejor le parezca. Una vez introducido pulsamos Intro para continuar. En la siguiente pantalla se nos pedirá un nombre de dominio. Este tiene sentido cuando pretendemos instalar un sistema que, junto con el nombre de la máquina, identificará al PC en la red. Puesto que no es nuestro caso, sencillamente lo dejamos en blanco y pulsamos Intro para continuar. En el siguiente paso se nos pedirá que seleccionemos una réplica de red. Las réplicas (o mirrors) son sistemas servidores, todos idénticos entre si, que contienen todos los paquetes existentes, y disponibles, para un sistema Debian. Figura 2. Selección del tamaño de la memoria Figura 3. Nuevo disco duro virtual Figura 4. Resultado añadir nuevo disco virtual 43 www.lpmagazine.org 42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_Maquinas_virtuales.indd 43 2009-04-14, 14:20 soluciones para empresas Máquinas virtuales Listado 1. Eliminación de servicios del arranque del sistema (paramos squid y lo eliminamos del inicio) # /etc/init.d/squid stop # update-rc.d -f squid remove (paramos apache y lo eliminamos del inicio) # /etc/init.d/apache2 stop # update-rc.d -f apache2 remove (paramos el servicidor DHCP y lo eliminamos del inicio) # /etc/init.d/dhcp stop # update-rc.d -f dhcp remove (paramos snort y lo eliminamos del inicio) # /etc/init.d/snort stop # update-rc.d -f snort remove (paramos mysql y lo eliminamos del inicio) # /etc/init.d/mysql stop # update-rc.d -f mysql remove (paramos exim4 y lo eliminamos del inicio) # /etc/init.d/exim4 stop # update-rc.d -f exim4 remove Listado 2. Clonado de todas las máquinas de la infraestructura (Creamos el IDS) # VboxManage clonevdi debian_base.vdi IDS.vdi (Creamos el servidor web) # VboxManage clonevdi debian_base.vdi servidor_web.vdi (Creamos el servidor de base de datos) (Creamos el servidor de control de versiones) # VboxManage clonevdi debian_base.vdi servidor_svn.vdi (Creamos la máquina que hará de firewall y router) # VboxManage clonevdi debian_base.vdi router_firewall.vdi (Creamos el proxy y servidor DHCP) # VboxManage clonevdi debian_base.vdi servidor_proxy_dhcp.vdi (Creamos el cliente uno) # VboxManage clonevdi debian_base.vdi cliente1.vdi (Creamos el cliente dos) # VboxManage clonevdi debian_base.vdi cliente2.vdi Listado 3. Configuración de la tarjeta red de Apache auto eth0 iface eth0 inet static address 10.10.1.10 netmask 255.255.255.0 gateway 10.10.1.1 Cada vez que queramos instalar cualquier software usando el gestor de paquetes de Debian será de ahí de donde lo descargará. Por tanto cuanto más rápida sea la conexión de ese servidor antes bajaremos los paquetes. En internet existen listas con los mejores servidores. Si no sabe cual escoger, elíjalo de forma aleatoria, o el que se corresponda con su país. Atendiendo a este último criterio, habrá seleccionado el servidor de España. Una vez seleccionado nos aparecerá 44 42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_Maquinas_virtuales.indd 44 una lista con los mirrors pertenecientes a ese país. Salvo que sepamos que el rendimiento de alguno de ellos es mejor que el del resto podemos elegirlo al azar. A continuación tendremos que introducir la configuración del proxy (Figura 7). Salvo que salga a internet a través de uno, ha de dejar esta pantalla en blanco. Las siguientes pantallas son las que más cuestan a los usuarios principiantes. Es el mo- mento de preparar los discos duros: particionarlos, seleccionar de forma correcta los puntos de montaje, selección del sistema de archivos y formateado de las particiones. Existen varias formas de hacer esto: manualmente y automáticamente. Con la primera se pueden ajustar todos los parámetros más detalladamente. Este sería el método ideal de instalación si fuéramos a usar el sistema para cualquier otra cosa que requiriera un mínimo de planificación. La segunda es realmente cómoda y para el fin de esta guía será más que suficiente, aunque se explicará qué son cada uno de los ajustes que decide por nosotros el asistente. Para comenzar el particionado debemos de elegir el disco duro. En nuestro caso, al tener solamente uno, no hay lugar a equivocación. Puesto que el disco duro lo está emulando VirtualBox, en el lugar que le correspondería al fabricante aparece VBOX HARDDISK (Figura 8). Por tanto pulsamos, sencillamente, Intro. La nueva pantalla es la que nos dará la posibilidad de elegir el tipo de particionado que queremos. Como dijimos antes seleccionaremos el particionamiento básico. Por tanto elegimos la opción Particionamiento guiado (Figura 9). Este tipo de particionado crea automáticamente todas las particiones necesarias, que serán dos. Una para los archivos del sistema y otra para el espacio de intercambio o swap. Para crearlas ocupa todo el espacio del disco duro virtual. El sistema de fichero usado por defecto es ext3. Un sistema probado a lo largo de los años. Demostrando, una y otra, vez su eficiencia y tolerancia a fallos. Después de seleccionar esta opción se nos mostrará un nuevo menú. En éste elegiremos la opción en la que poner, entre paréntesis, para novatos. Como último paso se nos mostrará un cuadro de confirmación para autorizar la creación de las particiones en el disco. Elegimos Sí. Acto seguido nos aparecerá, de forma fugaz, un diálogo en que se indica que se está configurando la zona horaria y el reloj del sistema. Este proceso es automático porque estos datos son tomados de la BIOS del PC. Posteriormente se nos pedirá la contraseña de superusuario (o administrador o root). Puede elegir la que le parezca conveniente. Nosotros elegiremos una muy usual en entornos de pruebas: holamundo. Este paso tendremos que repetirlo dos veces. Una vez hecho tendremos que agregar un nuevo usuario al sistema. Primero se nos pedirá una descripción para el usuario. Se ha puesto una descripción acorde a este artículo (Figura 11): Creación de un entorno de pruebas con VirtualBox. A continuación de la descripción se nos pedirá el nombre del usuario con el que se accederá al sistema (Figura 12). En este ejemplo: linuxplus. Al igual que para el superusuario ha de introducirse la contraseña para el nuevo usuario. Linux+ 6/2009 2009-04-14, 14:20 soluciones para empresas Máquinas virtuales Figura 7. Selección del disco maestro en la instalación Figura 5. Configuración del nombre del PC Como el objetivo del artículo no es la instalación de un sistema de producción, ni reforzar las medidas de seguridad, usaremos la misma contraseña que para el root. Después de este paso el sistema empezará a instalarse, definitivamente. Este paso puede llevar un poco de tiempo, aunque los paquetes instalados son mínimos: única y exclusivamente los paquetes necesarios para el arranque del sistema, con pocas opciones más. Recordemos que la idea es crear un sistema base para que pueda ser usado como punto de partida para otros sistemas. Por ejemplo: un servidor web. De esta manera solo tendríamos que clonar la máquina (se explica más adelante este proceso) e instalar el software de servidor. Cuando el sistema haya finalizado su instalación nos aparecerá un menú que puede resultar curioso (Figura 13): Encuesta de popularidad de Figura 6. Configuración del proxy de instalación paquetes. Este nos pide autorización para enviar a los desarrolladores de Debian información acerca de qué programas usa habitualmente. No se envía ningún otro tipo de información y la intención no es espiar a nadie. Esta información será usada con fines estadísticos. Con ella se podrán tomar decisiones sobre el software más usado, añadir nuevo, quitar el que no se use, etcétera. La siguiente pantalla nos dará la posibilidad de instalar software adicional (Figura 14). Como ya se ha dicho se pretende crear una instalación lo más liviana posible y por tanto no se instalará nada. De hecho la opción de Sistema base también la desmarcaremos (para hacerlo nos situamos encima y pulsamos la barra espaciadora), porque instala una serie de paquetes que, a nosotros, nos resultan innecesarios y lo único que conseguirán es ocupar espacio en disco. Si se quisiera instalar algún tipo de software para un entorno de escritorio o para servidor podría hacerse en esta pantalla, aunque yo no lo aconsejo, porque realmente no se tiene el control de qué se instala. Si seleccionáramos Base de datos SQL, ¿realmente sabemos qué gestor de bases de datos instalará? Podría ser MySQL, PostgreSQL o las librerías necesarias para usar SQLite. Por este motivo es más conveniente añadir el software que necesitemos a posteriori. Finalizado este paso, el asistente revisará si hemos seleccionado algún tipo de paquetes para su instalación. Dado que no es nuestro caso, este paso será muy rápido. Figura 8. Selección del tipo de particionado 45 www.lpmagazine.org 42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_Maquinas_virtuales.indd 45 2009-04-14, 14:20 soluciones para empresas Máquinas virtuales Listado 4. Código php para página de ejemplo (creamos el archivo con nano) nano -w /var/www/index.php (escribimos el contenido) <? echo "<html>"; echo " <head>"; echo "<title>Pagina de prueba</title>"; echo " echo " </head>"; <body>"; for($i=0; $i<10;$i++){ Figura 9. Descripción de usuario nuevo } echo "<p><b>Hola mundo</b>!</p>"; echo " ?> </body>"; echo "</html>"; Listado 5. Configuración de la tarjeta red de MySQL auto eth0 iface eth0 inet static address 10.10a.1.11 netmask 255.255.255.0 Figura 10. Nombre de nuevo usuario Después de la instalación del software se pedirá confirmación para la instalación del gestor de arranque (Figura 15). Debian instala por defecto Grub. Actualmente, salvo contadas excepciones, debería de ser el gestor usado por la mayor parte de los usuarios ya que incorpora características que otros no hacen. Antiguamente era usado Lilo, pero se encuentra en desuso. El gestor de arranque es imprescindible. De no contar con uno, el PC no sabría dónde encontrar el sistema operativo para arrancarlo. Esto es así porque, entre otras responsabilidades, el gestor de arranque indica al PC en qué partición se encuentra el sistema operativo que se quiere arrancar. Finalmente se nos presentará un último mensaje confirmándonos que la instalación se realizó con éxito y que solo nos queda quitar el CDROM y reiniciar (Figura 16). Puesto que nosotros no pusimos un CDROM, sino una imagen, hemos de ir al menú de configuración de la máquina virtual (cuando esté apagada), a la sección del CD/ DVD. Ahí podemos elegir deshabilitar el lector gateway 10.10.1.1 Listado 6. Añadir un usuario a MySQL (Nos conectamos al servidor MySQL) # mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 55 Server version: 5.0.32-Debian_7etch8-log Debian etch distribution Type 'help;' or 'h' for help. Type 'c' to clear the buffer. (Tecleamos el comando SQL) mysql> CREATE USER 'USUARIO'@'10.10.1.10' IDENTIFIED BY 'PASSWORD' (Damos los permisos adecuados al usuario) mysql> GRANT ALL ON *.* TO 'USUARIO'@'10.10.1.10' IDENTIFIED BY "PASSWORD"; (Aplicamos los cambios) mysql>FLUSH privileges; (Salimos del gestor) mysql>quit Listado 7. Configuración de la tarjeta red de SubVersion auto eth0 iface eth0 inet static address 10.10.1.12 netmask 255.255.255.0 gateway 10.10.1.1 Listado 8. Creación del repositorio SubVersión (Creamos el directorio del trabajo del servidor) # mkdir /var/svn (Creamos el nuevo repositorio, llamado linuxplux) # svnadmin create /var/svn/linuxplus (Arrancamos el servidor) # svnserve -d -r /var/svn/ Figura 11. Encuesta de popularidad de Debian 46 42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_Maquinas_virtuales.indd 46 Linux+ 6/2009 2009-04-14, 14:20 soluciones para empresas Máquinas virtuales sumamente incómodo. Por eso, normalmente, se crea un sistema base, como hicimos nosotros. A partir de éste sacaremos tantas réplicas como necesitemos. De ahí la importancia de la correcta instalación del sistema base. En VirtualBox no existe ningún asistente que nos facilite este proceso, con lo que tendremos que hacerlo de forma manual en un terminal. Otros programas de virtualización, como VMWare, sí que lo llevan integrado. En este sentido VirtualBox ha de mejorar considerablemente. Para crear una copia de la máquina virtual abriremos un terminal. Nos situamos en nuestra carpeta personal y entramos en el directorio oculto .VirtualBox. En él están, por defecto, todos los archivos con nuestra configuración personal y máquinas virtuales. Dentro de este, en el directorio VDI, están nuestros discos duros virtuales, que es lo que buscamos. Entonces tecleamos los siguientes comandos: Listado 9. Configuración del acceso a SubVersión […] anon-access = none auth-access = write password-db = passwd […] Listado 10. Script de inicio para SubVersion auto eth0, eth1 iface eth0 inet static address 10.10.3.2 netmask 255.255.255.0 gateway 10.10.3.1 iface eth1 inet static address 10.10.2.1 netmask 255.255.255.0 Listado 11. Configuración de la tarjeta red del proxy # cd /home/USUARIO/.VirtualBox/VDI/ test -x /usb/bin/svnsrve || exit 0 # vboxmanage clonevdi Debian_base.vdi case "$1" in Debian_maquina1.vdi start) Donde USUARIO es el usuario con el que hemos accedido al sistema. El comando vboxmanage permite numerosas opciones y nos permite gestionar completamente todas nuestras máquinas. Le indicamos que queremos clonar (clonevdi), le decimos la máquina que queremos clonar (Debian_base.vdi) y cómo se llamará la nueva (Debian_maquina1.vdi). Con este sencillo paso ya habremos creado nuestro clon. Para poder usarla habremos de ir a VirtualBox y seleccionar la opción de nueva máquina virtual. Se seguirán los pasos, como ya se explicaron, con la salvedad de que cuando lleguemos a la pantalla de configuración de los discos virtuales elegiremos la opción existente y seleccionaremos el que acabamos de crear. Ahora sí, ya esta lista nuestra nueva máquina. echo "Arrancando servidor de SubVersion" svnserve -d -r /var/svn/ echo "Servidor SubVersion arrancado" ;; stop) echo "Apagando el servidor de SubVersion" killall -9 svnserve echo "Servidor de SubVersion apagado" ;; *) echo "Usar: $0 {start|stop}" exit 1 esac exit 0 Listado 12. Configuración del servidor DHCP option domain-name "linuxplus"; Configuración de una red interna de máquinas virtuales. Conceptos y configuración option domain-name-servers 10.10.2.2; option routers 10.10.2.1; default-lease-time 3600; Anteriormente se hizo un breve comentario sobre este tipo de configuración para las inter- subnet 10.10.2.0 netmask 255.255.255.0 { arrange 10.10.2.3 10.10.2.254; } o elegir la primera opción y vincularlo a la unidad óptica del ordenador físico. Llegados a este punto, ya tenemos nuestro sistema GNU/Linux, con la distribución Debian, lista para ser usada. por televisión u otros medios de comunicación. Y eso es exactamente en lo que consiste: obtener un réplica exacta de algo que ya tenemos. Esto es sumamente útil cuando tratamos con máquinas virtuales. En el punto anterior instalamos un Clonación de máquinas sistema virtualizado. Si no tuviéramos la posibilivirtuales: Conceptos y uso dad de clonar máquinas, cada nuevo sistema que El concepto de clonación es bastante intuitivo. deseásemos deberíamos de crearlo desde cero, Estamos, incluso, acostumbrado a escucharlo repitiendo este proceso una y otra vez, lo que es Figura 12. Selección de programas a instalar 47 www.lpmagazine.org 42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_Maquinas_virtuales.indd 47 2009-04-14, 14:20 soluciones para empresas Máquinas virtuales Listado 13. Configuración del script de inicio del iptables del proxy (Escribimos el contenido del fichero) test -x /sbin/iptables|| exit 0 case "$1" in start) echo "Arrancando iptables" /sbin/iptables -t nat -A PREROUTING -i eth1 -p tcp -s 10.10.2.0/24 –dport 80 -j REDIRECT –-to-ports 3128 echo "Iptables arrancado" ;; stop) echo "Apagando iptables" /sbin/iptables -F /sbin/iptables -Z /sbin/iptables -t nat -F echo "Iptables apagado" *) esac ;; echo "Usar: $0 {start|stop}" exit 1 exit 0 Listado 14. Configuración de la tarjeta red del DNS auto eth0 iface eth0 inet static address 10.10.2.2 netmask 255.255.255.0 gateway 10.10.2.1 Listado 15. Configuración de las zonas de resolución del DNS zone "servidor_web.com" { type master; }; file "/etc/bind/db.servidor_web"; zone "servidor_mysql.com" { type master; }; Definición de una infraestructura de red file "/etc/bind/db.servidor_mysql"; zone "servidor_subversion.com" { type master; }; file "/etc/bind/db.servidor_subversion"; Listado 16. Configuración de la zona servidor_web.com ; Archivo db.servidor_web ; ; BIND data file for local loopback interface ; $TTL @ IN 604800 SOA servidor_web.com. root.servidor_web.com. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; @ @ 604800 ) IN IN NS A ; Expire ; Negative Cache TTL servidor_web.com 10.10.1.10 48 42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_Maquinas_virtuales.indd 48 faces de red. A pesar de no ser muy popular, puede resultar extremadamente útil si se desea montar un entorno de laboratorio o de pruebas. El concepto es bastante simple. Se creará una red virtual, sin salida al exterior, en la que todas las máquinas cuya interfaz de red esté añadida a dicha red, tendrán visibilidad entre ellas. Como puede comprobar, esto es lo que nosotros estamos buscando para montar nuestro propio entorno de pruebas. La configuración de las interfaces es realmente simple en VirtualBox (Figura 17). Seleccionamos la máquina virtual que queramos añadir a la red privada. Abrimos su menú de configuración y nos dirigimos a la pestaña de red. Seleccionamos un adaptador de red que no tengamos en uso. En el segundo cuadro desplegable, con nombre Attached to o Añadido a, seleccionamos Red Interna (recuadro rojo en la figura). Hemos de darle un nombre a nuestra red. En nuestro caso se ha llamado red_pruebas (recuadro azul en la figura). Ahora solo nos queda guardar los cambios. Cualquier nueva máquina que queramos que pertenezca a esta red, tan solo habríamos de seguir los mismos pasos. Cabe señalar que cuando seleccionamos tipo de configuración para la red, no dispondremos de ningún servidor que nos asigne la IP de forma automática. Por lo que tendremos que ponerla de forma manual. Este proceso se verá con detalle en el ejemplo de arquitectura que se muestra más adelante. Como última puntualización, decir que podemos crear tantas redes virtuales como queramos. El único requisito es que, obviamente, tengan nombres diferentes. En estos momentos estamos en disposición de crear cualquier tipo de máquina virtual y obtener de ella tantos clones como gustemos. El objetivo de este artículo no es solamente la explicación del proceso de creación de una máquina virtual o la instalación de Debian. Se pretende llegar más allá. Por eso se simulará una red completa. Esta arquitectura será implementada con VirtualBox más adelante. La definición que se ha seguido para el diseño de la infraestructura es el que se puede encontrar de forma más típica en cualquier intranet de una empresa media-grande. La Figura 18 expone esta arquitectura. Para cada figura del diagrama se indica su funcionalidad y su IP dentro de la intranet. Para aquellos que no estén familiarizados con los esquemas de red, el elemento azul circular es un router y los otros dos elementos del mismo color son switches. Explicando brevemente el Linux+ 6/2009 2009-04-14, 14:20 soluciones para empresas Máquinas virtuales Listado 17. Configuración de la zona servidor_mysql.com ; Archivo db.servidor_mysql ; ; BIND data file for local loopback interface ; $TTL 604800 @ SOA servidor_mysql.com. root.servidor_mysql.com. ( IN 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS servidor_web.com @ IN A 10.10.1.11 Listado 18. Configuración de la zona servidor_subversion.com ; Archivo db.servidor_subversion ; BIND data file for local loopback interface ; $TTL 604800 @ SOA servidor_subversion.com. root.servidor.subversion.com. ( IN 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS servidor_web.com @ IN A 10.10.1.12 Un ejemplo práctico: Montaje y configuración de una red completa Listado 19. Configuración de las tarjetas de red del router/firewall auto eth0, eth1, eth2 iface eth1 inet static address 10.10.1.1 netmask 255.255.255.0 iface eth2 inet static address 10.10.3.1 netmask 255.255.255.0 (Si se tiene IP estática para acceder a internet) iface eth0 inet static address IP_OPERADOR netmask MASK_OPERADOR gateway GW_OPERADOR (Si ha configurado en modo NAT o se tiene IP dinámica) iface eth0 inet dhcp diagrama, de derecha a izquierda. En primer lugar nos encontramos los servidores corporativos (suponemos siempre una intranet corporativa): servidor web (Apache, IIS...), un sistema gestor de bases de datos (Oracle, SQLServer, DB2, MySQL, PostgreSQL...), un sistema de control de versiones (CVS,SubVersion...). Del switch también cuelga Snort. Snort es un IDS (Sistema de Detección de Intrusos). Este será ría todo el tráfico, con el fin de analizarlo. A la izquierda del switch no encontramos una línea que desemboca en un router. Todas las salidas y entradas desde, y hacia, internet están controladas por un firewall (pared de ladrillo en dibujo). Estos dos elementos de la red serán simulados por una sola máquina, que tendrá funciones de routing y de cortafuegos, mediante Netfilter. De la segunda línea o interfaz del router cuelga el proxy, intermediario entre los clientes y el resto de la intranet e internet. El cometido de éste es, sobre todo, acelerar las cargas de los contenidos que solicitan los clientes. Para ello almacena una caché interna, o espacio temporal, del contenido de los lugares visitados anteriormente por los usuarios. Cuando un usuario solicita una página web, por ejemplo, el proxy comprueba si esa página ya ha sido visitada por otro usuario. De ser así servirá la petición con la copia de la página que tiene guardada en su caché interna. En caso contrario obtendrá la web y la almacenará para futuras peticiones de otros usuarios. Este proceso acelera considerablemente la navegación por parte de los clientes, ya que para contenido que desean consultar no han de acceder directamente a internet, con el tiempo que ello conlleva. Ya que siempre será más lento el acceso a internet que a la red local, que interconecta al cliente con el proxy. Después de la explicación del funcionamiento del proxy tiene sentido el que los clientes cuelguen de él, pasando a través suyo. el encargado de detectar comportamientos sospechosos en la red y guardar las alertas de todas las incidencias que puedieran ocurrir. Esta información puede ser usada para mejorar el firewall, hacer seguimientos de ataques que se hayan recibido o, simplemente, para fines estadísticos. En la práctica toda la información que pasará por el switch sería replicada al puerto en que estuviera conectado. De esta manera recibi- Según el esquema planteado anteriormente, se explicará cómo montar cada máquina paso a paso, instalando y configurando cada servicio de forma adecuada para crear un ejemplo práctico que pueda servir como sistema de aprendizaje. Aunque probablemente después deba ajustarlo a sus necesidades. Debido a la cantidad de máquinas necesarias para montar la infraestructura completa, es aconsejable que se centre en la parte que pueda interesarle. Si necesita hacer pruebas para un perfil de desarrollador, tal vez necesite solamente el segmento en el que se encuentran los servidores. Si lo que quiere es hacer pruebas con entornos de redes podría decantarse por implementar la parte en la que se encuentran los clientes, proxy, firewall y cortafuegos. Finalmente, si desea hacer pruebas de seguridad en un entorno lo más realista posible, lo ideal sería que implementase la infraestructura completada. Aprovechando el ejemplo ya explicado en el que se detallaba una instalación de Debian 49 www.lpmagazine.org 42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_Maquinas_virtuales.indd 49 2009-04-14, 14:20 soluciones para empresas Máquinas virtuales Figura 13. Instalación del gestor de arranque: GRUB para una máquina virtual, se va a tomar como punto de partida dicha instalación. Dependiendo del uso final de la maqueta podríamos instalar el entorno de dos formas: Usar esta primera máquina virtual e instalar todos los servicios que se van a usar en el entorno (apache, mysql, …) y a partir de esta máquina crear clones y, dependiendo de la posición dentro la maqueta, activar unos servicios u otros. Esto, que a priori, puede resultar un método poco adecuado es sumamente cómodo. Tan solo instalaremos todo el software necesario una vez, y a partir de ahí configuraremos individualmente cada máquina. El otro método es instalar y configurar cada máquina de forma independiente. Si se desea un entorno realista, tal vez, debería decantarse por esta posibilidad que, aunque de instalación más lenta, será más óptima. Por comodidad se usará el primer caso, haciéndose clones a partir de esta máquina. Como primer paso instalaremos todo el software necesario para nuestra red. Para ello seleccionaremos nuestra máquina virtual base. Configuraremos la tarjeta de red en modo nat y acto seguido la arrancamos. Es importante señalar que la conexión a internet es imprescindible. Una vez arrancada nuestra máquina accederemos con nuestro usuario (linuxplus) y contraseña (holamundo). Lo primero que debemos de hacer es habilitar el uso de la red, por eso lo primero es demandar un IP al servicio de nat de VirtualBox. Para ello escribiremos en la consola: # dhclient eth0 Donde eth0 es la interfaz de red. Si no tenemos configurada ninguna tarjeta más, esta será la que nos aparezca por defecto. Una vez hecho esto se nos asignará una IP con la que tendremos acceso a la red. Figura 14. Tarjetas de red en modo Red Interna 50 42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_Maquinas_virtuales.indd 50 El siguiente paso es instalar todo el software anteriormente mencionado. Para eso hemos de usar el gestor de paquetes avanzado de Debian: aptitude. Aptitude tiene la misma funcionalidad que apt (y mucha más) pero tiene un mayor soporte a la hora de resolver dependencias, lo que nos evitará más de un dolor de cabeza. El software que se instalará es: squid (proxy), apache (servidor web), mysql (gestor de bases de datos), subversion (sistema de control de versiones, para desarrolladores), php y módulos php para apache (lenguaje de scripting ampliamente usado para desarrollo web), dhcp (servidor de DHCP), snort (IDS, sistema de detección de intrusos). Para instalarlo ejecutaremos el siguiente comando. Si le aparecen ventanas para introducir información aceptaremos sin más. Modificaremos las configuraciones más adelante: mos el fichero: /etc/network/interfaces. Y pondremos el texto del Listado 3. El siguiente paso será añadir el servidor Apache al inicio del sistema. Teclearemos el siguiente comando para ello: # update-rd.d apache2 defaults Deberemos de cambiar los permisos del directorio en el que se servirán las páginas web. Antes de probar nuestra conectividad habremos de asegurarnos que, en la interfaz de red, hemos seleccionado la opción Red Interna y pusimos el nombre de una red común, compartida por el resto de servicios. Nosotros elegiremos la red llamada red_servidores. /var/www. Todo lo que se encuentre incluido en él será interpretado por Apache y servido a los clientes. # aptitude install squid apache2 php5 Como página de prueba, crearemos una libapache2-mod-php5 mysqlsencilla página en php. Esta tan solo nos devolserver-5.0 verá un famoso hola mundo. dhcp3-server subversion snort Creamos un archivo llamado index.php en bind9 /var/www (Listado 4). Con este ejemplo tan simple y tonto ya Cuando se hayan instalado estos paquetes, por tendremos nuestra pagina en "php" lista para defecto, todos estos servicios nuevos serán servirse. puestos en funcionamiento y arrancarán de forma automática en cada inicio del sistema. Co- Configuración de MySQL mo no en todas las máquinas necesitamos tener En nuestro caso de pruebas, el servidor de todos los servicios, ya que sería un consumo de Apache que montó en el punto anterior, hará recursos innecesario, los pararemos todos y se uso de un gestor de bases de datos. El gestor irán arrancando en aquellas que sea necesario. usado, en nuestro caso, será MySQL. Habremos de seguir el mismo procedimiento que Para esto tecleamos el texto del Listado 1. Parados los servicios innecesarios, y lista para Apache y asignarle una dirección IP de nuestra máquina maestra, clonaremos todas las forma estática, según el diagrama de red su Ip máquinas necesarias. Antes de ejecutar los co- será: 10.10.1.11. Pondremos la interfaz de red mandos, asegúrese de que tiene suficiente espa- en modo Red Interna, con el nombre de la red cio en el disco duro, una única máquina ocupará será red_servidores, y editaremos el fichero sobre 1,5 GigaBytes. Si tiene en cuenta que se de configuración: /etc/network/interfaces, que crearán ocho clones, el tamaño total alcanzará deberá de quedar como se presenta en el Listasobre 8 GigaBytes. Para hacer el clonado escri- do 5. El siguiente paso será añadir el servidor biremos los comandos del Listado 2. Ya tenemos preparadas todas nuestras má- MySQL al inicio del sistema: quinas. Ahora tan solo queda interconectarlas. Comenzaremos por la parte de servicios. Este # update-rd.d mysql defaults no pretende ser un artículo en el que se expliquen todos los entresijos de los servicios que Para poder trabajar con MySQL debemos de instalarán a continuación. Por ello se explicará, agregar un usuario con permisos para manejar a modo de ejemplo, como configurar de manera las bases de datos. Para conseguir esto tendrebásica todos ellos y tan solo aquello que sea mos que acceder, en modo consola, a la configuración del gestor, pero primero tendremos necesario. que arrancarlo (puesto que estaba apagado). Configuración de apache Arrancamos el gestor: Clonada nuestra máquina, que hará las veces de servidor web, tendremos que configurarla. En # /etc/init.d/mysql start primer lugar debemos de asignarle una dirección IP de forma estática, según el diagrama de Hecho esto es el momento de añadir nuestro red explicado anteriormente. Para ello editare- usuario. Para eso accederemos a la gestión de Linux+ 6/2009 2009-04-14, 14:20 soluciones para empresas Máquinas virtuales Listado 20a. Creación del firewall y script su script de inicio (Escribimos el contenido del fichero) test -x /sbin/iptables|| exit 0 # Definimos la configuración de las interfaces de red que disponemos. Serán usadas en el resto # del script. Si varían nuestras interfaces de red tan solo tendremos que modificar estos valores. IN_IFACE=eth0 SERVER_IFACE=eth1 CLIENTS_IFACE=eth2 function aplicar_reglas(){ # # Activarmos, en el KERNEL, una serie de medidas de seguridad # # Rechazamos los mensajes ICMP echo-request enviados a direcciones broadcast o multicast echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts # Rechazamos los paquetes a los que se les ha modificado el recorrido de enrutado en la cabecera IP echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route # Nos protegemos frente al ataque SYN flood echo 1 > /proc/sys/net/ipv4/tcp_syncookies # Evitamos la redicceción de routas y puertas por defecto con mensajes ICMP. Tanto de envío como # de recepción echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects # Habilitamos la protección contra spoofing en las irecciones IP origen echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter # Guardamos un registro con las IP de origen no válidas echo 1 > /proc/sys/net/ipv4/conf/all/log_martians # # Establecemos las políticas por defecto para el filtrado. Se denegará todo el tráfico no autorizado # expresamente. # iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # Eliminamos todas la reglas anteriores que puedieran existir iptables -F INPUT iptables -F FORWARD iptables -F OUTPUT iptables -F -t nat # Permitimos el acceso a la interfaz de red local iptables -A OUTPUT -o lo -j ACCEPT # # Creamos una serie de reglas genéricas para poder ser usadas en todas las interfaces # # Filtrado del flood iptables -N flood iptables -F flood iptables -A flood -m limit --limit 30/second --limit-burst 60 -j RETURN iptables -A flood -m limit --limit 30/second --limit-burst 60 -j LOG --log-prefix "flood: " iptables -A flood -j REJECT # Filtrado ICMP iptables -N ICMP_NON iptables -F ICMP_NON iptables -A ICMP_NON -p icmp --icmp-type redirect -j REJECT iptables -A ICMP_NON -p icmp --icmp-type router-advertisement -j REJECT iptables -A ICMP_NON -p icmp --icmp-type router-solicitation -j REJECT iptables -A ICMP_NON -p icmp --icmp-type address-mask-request -j REJECT 51 www.lpmagazine.org 42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_Maquinas_virtuales.indd 51 2009-04-14, 14:20 soluciones para empresas Máquinas virtuales Listado 20b. Creación del firewall y script su script de inicio iptables -A ICMP_NON -p icmp --icmp-type address-mask-reply -j REJECT # Filtramos los paquetes inválidos y mal formados iptables -N PKT_FAKE iptables -F PKT_FAKE iptables -A PKT_FAKE -m state --state INVALID -j REJECT iptables -A PKT_FAKE -p tcp ! --syn -m state --state NEW -j REJECT iptables -A PKT_FAKE -f -j REJECT # Filtramos los paquetes TCP con combinaciones de flags no permitidas, usadas normalmente # cuando se realizan escaneos iptables -N FLAG_SCAN iptables -F FLAG_SCAN iptables -A FLAG_SCAN -p tcp --tcp-flags SYN,FIN SYN,FIN -j REJECT iptables -A FLAG_SCAN -p tcp --tcp-flags SYN,RST SYN,RST -j REJECT iptables -A FLAG_SCAN -p tcp --tcp-flags ALL FIN -j REJECT iptables -A FLAG_SCAN -p tcp --tcp-flags SYN,FIN,PSH SYN,FIN,PSH -j REJECT iptables -A FLAG_SCAN -p tcp --tcp-flags SYN,FIN,RST SYN,FIN,RST -j REJECT iptables -A FLAG_SCAN -p tcp --tcp-flags SYN,FIN,RST,PSH SYN,FIN,RST,PSH -j REJECT iptables -A FLAG_SCAN -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j REJECT iptables -A FLAG_SCAN -p tcp --tcp-flags ALL NONE -j REJECT iptables -A FLAG_SCAN -p tcp --tcp-flags ALL ALL -j REJECT iptables -A FLAG_SCAN -p tcp --tcp-flags ALL FIN,URG,PSH -j REJECT iptables -A FLAG_SCAN -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j REJECT # # Filtros para la interfaz eth0, de entrada de internet a la red # # Filtrado de direcciones privadas iptables -t nat -A PREROUTING -i $IN_IFACE -s 10.0.0.0/8 iptables -t nat -A PREROUTING -i $IN_IFACE -s 172.16.0.0/12 -j DROP -j DROP # Si se conecta la interfaz en modo gridge, descomente estas líneas # iptables -t nat -A PREROUTING -i $IN_IFACE -s 192.168.0.0/24 -j DROP # iptables -t nat -A PREROUTING -i $IN_IFACE -s 192.168.0.0/16 -j DROP iptables -t nat -A PREROUTING -i $IN_IFACE -s 127.0.0.0/8 -j DROP # Filtrado de direcciones en la que no se ha iniciado la conexión desde dentro de la subred iptables -A INPUT -i $IN_IFACE -p tcp ! --syn -m state --state NEW -j DROP # Pasamos los fitros definidos anteriormente iptables -A INPUT -i $IN_IFACE -p tcp -j iptables -A INPUT -i $IN_IFACE -p tcp -j flood ICMP_NON iptables -A INPUT -i $IN_IFACE -p tcp -j PKT_FAKE iptables -A INPUT -i $IN_IFACE -p tcp -j FLAG_SCAN iptables -A INPUT -i $IN_IFACE -p tcp -j FLAG_SCAN # Denegamos el udp y icmp iptables -A INPUT -i $IN_IFACE -p udp -j iptables -A INPUT -i $IN_IFACE -p icmp -j DROP DROP # # Filtros para la interfaz eth1, de acceso a los servidores # # Pasamos los fitros definidos anteriormente a todo el tráfico que se dirija a los servidores iptables -A OUTPUT -i $SERVER_IFACE-p tcp -j flood iptables -A OUTPUT -i $SERVER_IFACE -p tcp -j ICMP_NON iptables -A OUTPUT -i $SERVER_IFACE -p tcp -j PKT_FAKE iptables -A OUTPUT -i $SERVER_IFACE -p tcp -j FLAG_SCAN iptables -A OUTPUT -i $SERVER_IFACE -p tcp -j FLAG_SCAN # Denegamos el udp y icmp a todo el tráfico que se dirija a los servidores iptables -A OUTPUT -i $SERVER_IFACE- -p icmp -j DROP # Aceptamos solamente el tráfico que venga de nuestra red iptables -A INPUT -i $CLIENTS_IFACE -s 10.10.1.0/24 -p tcp -j ACCEPT 52 42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_Maquinas_virtuales.indd 52 Linux+ 6/2009 2009-04-14, 14:20 soluciones para empresas Máquinas virtuales Listado 20c. Creación del firewall y script su script de inicio # # Filtros para la interfaz eth2, de acceso a los clientes # # Pasamos los fitros definidos anteriormente a todo el tráfico que se dirija a los clientes o venga de # ellos iptables -A OUTPUT -i $CLIENTS_IFACE-p tcp -j flood iptables -A OUTPUT -i $CLIENTS_IFACE -p tcp -j ICMP_NON iptables -A OUTPUT -i $CLIENTS_IFACE -p tcp -j PKT_FAKE iptables -A OUTPUT -i $CLIENTS_IFACE -p tcp -j FLAG_SCAN iptables -A OUTPUT -i $CLIENTS_IFACE -p tcp -j FLAG_SCAN iptables -A INPUT -i $CLIENTS_IFACE-p tcp -j flood iptables -A INPUT -i $CLIENTS_IFACE -p tcp -j ICMP_NON iptables -A INPUT -i $CLIENTS_IFACE -p tcp -j PKT_FAKE iptables -A INPUT -i $CLIENTS_IFACE -p tcp -j FLAG_SCAN iptables -A INPUT -i $CLIENTS_IFACE -p tcp -j FLAG_SCAN # Aceptamos solamente el tráfico que venga de la ip del proxy iptables -A INPUT -i $CLIENTS_IFACE -s 10.10.3.2/32 -p tcp -j ACCEPT # Denegamos el udp y icmp a todo el tráfico que se dirija a los clientes o venga de ellos iptables -A OUTPUT -i $CLIENTS_IFACE -p udp -j DROP iptables -A OUTPUT -i $CLIENTS_IFACE -p icmp -j iptables -A INPUT -i $CLIENTS_IFACE -p udp -j DROP DROP iptables -A INPUT -i $CLIENTS_IFACE -p icmp -j DROP } case "$1" in start) echo "Arrancando iptables" aplicar_reglas echo "Iptables arrancado" ;; stop) echo "Apagando iptables" /sbin/iptables -F /sbin/iptables -X /sbin/iptables -Z /sbin/iptables -t nat -F echo "Iptables apagado" ;; *) echo "Usar: $0 {start|stop}" exit 1 esac exit 0 mysql y crearemos el usuario en su propio lenguaje (SQL), según el Listado 6. Solamente resta cambiar USUARIO y PASSWORD por los que elijamos. Entonces, para acceder a la base de datos, tan solo tendremos que conectarnos a la IP 10.10.1.10, con nuestro usuario y contraseña, al puerto 3306. Configuración de SubVersion La configuración para el servidor de control de versiones es prácticamente idéntica al de los otros dos servidores. Tan solo tendremos que poner la interfaz de red en modo Red Interna con el valor red_servidores, como hicimos an- teriormente, y cambiar su IP, modificando el fichero: /etc/network/interfaces. Pondremos el texto del Listado 7. Ahora tendremos que crear un repositorio para nuestros proyectos. En él iría su código fuente. Para hacerlo primero creamos el directorio donde queremos alojar estos fuentes y después dicho repositorio. Acto seguido arrancaremos el servidor, indicándole donde se encuentra el directorio raíz a partir del cual tendrá que trabajar. Escribimos el contenido del Listado 8. Si queremos añadir un mínimo de seguridad a nuestro servicio deberíamos de editar un par de ficheros de configuración. En ellos modificaremos los derechos de acceso, exigiendo la autenticación para acceder y deshabilitando el acceso anónimo. Para cambiarlo, editamos el archivo: /var/svn/linuxplus/ conf/svnserve.conf. Habremos de asegurarnos que las siguientes líneas se encuentran descimentadas y con los siguientes valores. Es muy importante no dejar ningún espacio entre cada parámetro y el principio de la línea, según se muestra en el Listado 9. Ahora añadiremos un usuario, con su contraseña, al que daremos acceso al repositorio que acabamos de crear. Para esto editamos 53 www.lpmagazine.org 42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_Maquinas_virtuales.indd 53 2009-04-14, 14:20 soluciones para empresas Máquinas virtuales (o creamos) el fichero: /var/svn/linuxplus/conf/ passwd. Añadimos la siguiente línea: Listado 21. Añadidos para las funciones de routing […] function aplicar_routing(){ usuario_pruebas = holamundo # […] # Mandamos las peticiones de los clientes a los servidores internos # Donde usuario_pruebas es el nombre de usuario que hemos elegido, podría ser cualquiera. Y holamundo es la contraseña para dicho usuario. Este fichero tiene que tener tanta líneas, idénticas a esta, como usuarios queramos permitir el acceso al repositorio. Para probar nuestro nuevo servidor, importaremos el repositorio y añadiremos un comentario. Suponiendo que los códigos fuente que queremos importar están en el directorio: /home/linuxplus/prueba, ejecutaremos: # Enviamos el tráfico al servidor web iptables -A POSTROUTING -t nat -s 10.10.3.0/24 -o eth1 -d 10.10.1.10 –dport 80 -j SNAT --to-source x 10.10.1.1 # Enviamos el tráfico al servidor MySQL iptables -A POSTROUTING -t nat -s 10.10.3.0/24 -o eth1 -d 10.10.1.11 –dport 3306 -j SNAT --to-source x 10.10.1.1 # Enviamos el tráfico al servidor SubVersion iptables -A POSTROUTING -t nat -s 10.10.3.0/24 -o eth1 -d 10.10.1.12 –dport 3690 -j SNAT --to-source x 10.10.1.1 # # Habilitamos el acceso a internet para el proxy # iptables -A POSTROUTING -t nat -s 10.10.3.0/24 -o eth1 -j MASQUERADE svn import /home/linuxplus/prueba svn: //servidor/linuxplus -m "Primer primer import" -username usuario_pruebas Si quisiéramos tener una copia local, con el usuario usuario_pruebas, del repositorio creado anteriormente, necesitamos hacer un checkout. Para ello nos situamos en el directorio donde tenemos los fuentes y ejecutamos: } […] start) echo "Arrancando iptables" aplicar_reglas aplicar_routing echo "Iptables arrancado" ;; svn checkout /home/linuxplus/prueba svn://servidor/linuxplux -username Listado 22. Script de autoarranque de la infraestructura usuario_pruebas #!/bin/bash Con Apache y MySQL hemos añadido el servicio al arranque del sistema con los scripts preconfigurados que nos trae la distribución para esto. En el caso de SubVersion no se nos presenta esta posibilidad de forma automática. Por lo tanto nos haremos nosotros nuestro propio script de arranque. Para esto copiaremos el siguiente código en un archivo al que llamaremos subversion enas, del repositorio creado anteriormente, necesitamos hacer un checkout. Para ello nos situamos en el directorio donde tenemos los fuentes y ejecutamos: el directorio: /etc/init.d/. Esto es necesario hacerlo como root. Con el editor nano, o el que prefiramos, escribimos: (Creamos el fichero con nano) # nano -w /etc/init.d/subversion Escribimos el contenido en el fichero (Listado 10). En el script comprobamos, con test, si existe el ejecutable para evitar errores posteriores. Después se implementan la opción de iniciar, start, y parar, stop, el servicio. También se contempla la posibilidad de que no se pasen parámetros al programa. Tan solo nos falta añadirlo al inicio. El sistema reconocerá el patrón usado 54 42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_Maquinas_virtuales.indd 54 VboxManage startvm servidor_web & VboxManage startvm servidor_mysql & VboxManage startvm servidor_svn & VboxManage startvm router_firewall & VboxManage startvm servidor_proxy & VboxManage startvm cliente1 & y llamará automáticamente al programa con el Interna. La única diferencia será la red a la que parámetro start. Para añadirlo hacemos, al igual la añadiremos. Para este ejemplo el nombre que con Apache y MySQL: elegido ha sido: red_proxy. En la segunda interfaz diferenciamos, de# update-rd.d subversion defaults pendiendo del tipo de cliente que queramos conectar. Si queremos conectar clientes virtuales, Configuración del proxy añadiremos una nueva interfaz con la misma y servidor DHCP configuración de red que la anterior, pero que Situado en este punto empezamos a definir la pertenezca a la red red_clientes. Si queremos red desde el otro punto, la parte de los clientes. clientes reales tendremos que habilitar una seLas diferencias que encontraremos aquí serán, gunda interfaz y crear un bridge (como se explientre otra las direcciones IP usadas y la red a la có en un apartado anterior) con una de las interque tendremos que añadir las máquinas. faces reales del PC. La interfaz real tendría que ir En este punto tendremos una de las op- conectada a un switch real, en que se conectarían ciones más interesantes de esta arquitectura. todos los PC de los clientes que se deseasen. Podremos configurar esta máquina virtual para Cuando se haya decidido cuál es la confiLa primera interfaz de red (eth0) tiene la guración deseada, la configuración es exactamisma configuración que los otros servidores mente la misma para ambos casos, ya que para que hemos montado hasta ahora, es decir, Red la máquina virtual esas configuraciones son Linux+ 6/2009 2009-04-14, 14:20 soluciones para empresas Máquinas virtuales totalmente transparentes. Como se ha hecho anteriormente, configuraremos las interfaces de red. Se debe de tener cuidado a la hora de activarlas en el entorno de configuración de VirtualBox. La primera interfaz es la que debe de pertenecer a la red red_proxy y la segunda, dependiendo de su elección, es la que debería de estar bridgeada o pertenecer a la red red_ clientes. De no ser así la configuración que aquí se expone no coincidirá con la que usted tiene y no funcionaría. Editamos el fichero: /etc/network/interfaces, modificándolo hasta que sea como en el Listado 11. Configuramos Squid editando el fichero: /etc/squid/squid.conf. La configuración aquí mostrada es muy básica. Tan solo se crearán una serie de filtros de acceso, se aumentará el tamaño de la caché y poco más. Puesto que el fichero de configuración es inmensamente largo se especificará, por comodidad, el número de linea en que se encuentra el parámetro (aunque podría variar). Aquí están los parámetros con una pequeña explicación. Para comentar una línea tan solo hay que poner el carácter almohadilla (#). Para descomentar se hará a la inversa, cuidando de no dejar ningún espacio entre el parámetro descomentado y el principio de la línea: • • • • Lineas 608-609: acl localnet src 172. 16.0.0/12 y acl localnet src 192.168. 0.0/16. Comentamos estas dos líneas y con esto estamos indicando que no permitimos el acceso a esas dos redes, ya que no pertenecen a nuestra red. Línea 607: acl localnet src 10.0.0.0/8, la cambiamos por acl localnet 10.10. 2.0/24. Añadimos otra línea, igual que la recién añadida, con el texto acl localnet 10.10.1.0/24. Línea 1110: http_port 3128, la cambiamos por http_port 3128 transparent. Con esto añadiremos la funcionalidad de proxy transparente (explicada más adelante). Línea 1694: hierarchy_stoplist cgibin ?, esto lo cambiamos por hierarchy_ stoplist cgi-bin jsp do cfm asp aspx ?. Con esto evitamos que Squid guarde en su caché las páginas con contenido dinámico. Línea 1732: "cache_mem 8 MB". Descomentamos esta línea y cambiamos el valor 8 por 24. El valor ideal es un tercio de la memoria RAM. Línea 4627: "ipcache_size 1024", la descomentamos y cambiamos el valor 1024 por 2048. Este valor indica el tamaño que reserva Squid para las direcciones IP almacenadas en su caché. php php4 php5 • • Una vez modificados estos parámetros básicos, Configuración de los clientes tendremos nuestro Squid listo para funcionar. Hayamos escogido el tipo de clientes que Tan solo nos queda añadirlo al arranque del deseemos, virtuales o reales, la configuración sistema. Ejecutaremos: # update-rd.d squid para todos ellos tiene que tener, al menos, un defaults. punto en común. Este punto escriba en la confiAhora configuraremos un servidor DHCP. guración de la IP que el PC tendrá para acceder Para evitar que cada cliente tenga que asignarse a la red. En ambos casos tendremos que usar manualmente una IP, montaremos este servicio. un cliente DHCP. Esto es indistinto del tipo de Según se definió en la infraestructura, se asig- sistema que se encuentre instalado en los sisnarán IPs del rango: 10.10.2.3-10.10.2.254. Pa- temas de usuario. Tanto Windows, Linux, Mac ra establecer esta configuración modificaremos OS, FreeBSD, etcétera, disponen de un cliente el fichero que define al servidor: /etc/dhcp3/ DHCP. Windows o Mac traen de manera predhcpd.conf. Escribiremos el texto presentado determinada este tipo de configuración, al igual en el Listado 12. que algunas distribuciones de Linux, como Hecho esto, ya tenemos nuestro servidor Ubuntu. Por lo que no tendrá que tocar nada en preparado. Lo añadimos al arranque: los equipos de cliente de su red. Si quiere configurar alguna de las máqui# update-rd.d dhcp3-server defaults. nas que se clonaron anteriormente como cliente y activarle el DHCP, tan solo ha de configurar la Puesto que se pretende hacer un proxy traspa- tarjeta de red en modo Red Interna y establecer rente, en el que no es necesario que el usuario el nombre de la red en red_clientes. Después añada ningún tipo de configuración en su nave- tendrá que modificar la máquina virtual y camgador para que pueda salir a través de él, habre- biar el archivo de configuración: /etc/network/ mos de incluir unas cuantas reglas de iptables. interfaces, y ha de poner lo siguiente: Iptables nos permite filtrar el tráfico de la red e incluso hacer tareas de enrutamiento. Lo que auto eth0 le indicaremos será que todo el tráfico que entre iface eth0 inet dhcp por la interfaz eth1, en la que están conectados los clientes, sea redirigido de forma automática Con esa sencilla configuración, cada vez que a Squid. Para el usuario será un proceso trans- arranque el sistema, el equipo pedirá IP al serparente. Para hacer esto habremos de añadir lo vidor DHCP que instalamos anteriormente. Por que llamamos reglas. Estas son las que le indi- su puesto éste ha de estar encendido. can a iptables qué ha de hacer con el tráfico que Configuración del servidor DNS recibe el sistema. Escribiremos en la consola: Toda intranet que se precie, y más teniendo en (redireccionamos para cuenta que existen equipos con IPs fijas, debería la transparencia del proxy) disponer de un servidor DNS. Es sumamente incó# iptables -t nat -A PREROUTING -i modo el recordar estas IP aunque tan solo sean 3. eth1 -p tcp -s 10.10.2.0/24 –dport 80 Por eso les asignaremos unos nombres que nos -j REDIRECT –-to-ports 3128 encargaremos de traducir estas IP con el servicio. Como primer paso, configuraremos la inComo queremos que este comando se ejecute terfaz de red, como hemos hecho hasta ahora. automáticamente al inicio de cara arranque Pondremos la interfaz en modo Red Interna del sistema, tendremos que fabricarnos, igual y introduciremos como nombre de red la red_ que hicimos con SubVersion, un script que se clientes. Editamos el archivo de configuración encargue de ello. Para hacerlo crearemos el para asignarle una IP: /etc/network/interfaces fichero: /etc/init.d/iptables. Y escribiremos lo (Listado 14). siguiente: El servidor que usaremos es el archiconocido Bind9. Solámente se hará una configuración (Creamos el fichero con nano. CTRL+X básica, que nos servirá para nuestra red de para salvar) pruebas. # nano -w /etc/init.d/iptables Los nombres que les asignaremos a los servidores serán los siguientes: al servidor web Añadimos el código, que podemos encontrar en servidor_web.com, al servidor mysql servidor_ el Listado 13. mysql.com y al servidor SubVersion servidor_ Para finalizar solo hay que añadir iptables subversion.com. Con estas premisas, y coal inicio del sistema: nocidas sus IP, configuraremos Bind9. Editamos el fichero de configuración: /etc/ # update-rd.d iptables defaults bind/named.conf.local. En él añadiremos los 55 www.lpmagazine.org 42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_Maquinas_virtuales.indd 55 2009-04-14, 14:20 soluciones para empresas Máquinas virtuales tres servidores con sus resoluciones. Añadiremos estas líneas al fichero (Listado 15). Creamos los ficheros de configuración a partir de uno que ya existe, y que viene con la instalación del paquete: db.local. Creamos las tres copias: # cp db.local db.servidor_web # cp db.local db.servidor_mysql # cp db.local db.servidor_subverion Editamos, uno a uno, estos archivos de configuración. Quedándonos como sigue en los listados: Listado 16, Listado 17, Listado 18. Con esos archivos le hemos indicado a Bind9 como ha de resolver los nombres de dominio. Ahora, cualquier usuario podrá introducir en su navegador la URL www.servidor_web.com y la ip que buscará para obtener la página será la del servidor de la red interna. Ahora tendremos que añadir el servidor DNS al inicio del sistema: # update-rd.d bind9 defaults Configuración del firewall y router no necesita permitir el acceso desde él, bastará con configurar la tarjeta en modo NAT. De querer que esta infraestructura pueda servir como ejemplo real, y ofrecer una serie de servicios al exterior, deberá de configurarla en modo bridge y disponer de una segunda interfaz física en el PC. Si desea hacer pruebas reales desde la red externa, como puede ser el caso de una PYME, probablemente tenga una IP estática, para acceder a internet, que le haya asignado su operador. En este caso deberá de ser configurada tal y como se ha venido haciendo hasta ahora. En el caso del la configuración NAT la IP será asignada automáticamente por DHCP. Vamos a configurar nuestras tarjetas de red. Como ya se ha dicho la única configuración que varía es la de la tarjeta eth0, que también se contemplará. Editamos, como siempre, el fichero: /etc/network/interfaces. Y escribimos el contenido del Listado 19. Donde IP_OPERADOR es la IP que nos ha asignado el perador, MASK_OPERADOR la máscara de red y GW_OPERADOR la puerta de enlace. Hecho esto es el momento de implementar el filtrado y las funciones de routing. En primer lugar añadiremos las funciones de firewall. Para esto crearemos un script de arranque automático del sistema, como ya se ha hecho en otros ejemplos. Cogeremos el código que se usó para las reglas de redireccionamiento en el proxy transparente y le añadiremos las reglas adecuadas. Creamos por tanto el fichero iptables en el directorio /etc/init.d/ y añadimos las siguientes reglas (se comentará la funcionalidad una a uno): A pesar de que pueda parecer muy extenso, quedarían por implementar varias cosas, dado que el objetivo del artículo es la creación de firewalls, con este ejemplo será mas que suficiente. Ahora tan solo nos quedan las funciones de routing. Para implementarlas solo tendremos que añadir una función a nuestro script anterior. No se escribirá todo el código, solamente la función y cómo quedaría en el nuevo caso de arranque del script (Listado 21). Tan solo nos queda anadir el script al inicio, como hemos venido haciendo hasta ahora: # update-rd.d iptables defaults. Configuración de Snort Como último punto para nuestra red de ejemplo hemos dejado a Snort. Este, como ya se comentó, es un complejo sistema de detección de intrusos. Consta de infinidad de filtros y multitud de opciones. Para modificar los parámetros de configuración editaríamos el fichero:/etc/snort/ snort.conf. En nuestro caso, al ser un entorno de maqueta, nos valdrá tal y como está. Existen alguna opciones que merece la pena comentar, entre ellas las variables de entorno que se pueden asignar en Snort. Ejemplos de las mismas son: HOME_NET, DNS_SERVERS, SMTP_SERVERS... éstas le indicarán al IDS las redes que tiene que monotorizar. En Snort existen unas cosas llamadas preprocesadores. Estos permiten extender su funcionalidad. De esta manera que el usuario pueda acceder a los paquetes capturados antes de que lo haga motor de Snort. Existen, también, los llamados plugins de salida. Configurándolos de manera adecuada le (Creamos el fichero con nano. CTRL+X ponemos cómo queremos que se nos muestre para salvar) la información obtenida del análisis del tráfico. # nano -w /etc/init.d/iptables Los más comunes suelen ser la salida al fichero de log /var/log/snort/alert, donde podríamos Añadimos el código, que se encuentra en el consultar las alertas, y la posibilidad de guardar Listado 20. toda la información en una base de datos. Esta Todo el entramado de máquinas virtuales e interconexiones entre ellas no serviría de nada si no tuviéramos un router que fuera capaz de hacer fluir el tráfico con el camino adecuado. Sin él, las peticiones de los clientes al servidor web no sabrían cómo llegar si no hubiera nadie que los dirigiera. Por esto nos hace falta un router. Si bien es cierto que podríamos haber conectado todo con una topología de BUS y ahorrarnos tanta complicación, esta estructura es muy poco escalable, eficiente, segura y, en general, una muy mala decisión. El proceso de routing se hará con iptables que, como se dijo anteriormente, tiene soporte para ello. En la misma máquina virtual se incluirá el firewall perimetral. Este será el encargado de decidir qué entra y sale a la intranet. En toda red corporativa es imprescindible. El filtrado también está soportado por iptables, y éste será en el que confiaremos la seguridad de la barrera de entrada de internet. Esta es la máquina virtual en la que más se complicará la configuración de las interfaces de red. Si contamos en el diagrama que se presentó, necesitaremos tres. Una que conecte a la red de los servidores (eth1), otra a la de los clientes (eth2) y una tercera que será por la que se saldrá a internet (eth0). Esta última dependerá mucho de cómo desee hacer el acceso a la red externa. Si no desea este acceso puede incluso deshabilitarla. Si quiere que haya salida al exterior, pero Figura 15. Diagrama de la infraestructura de red a crear 56 42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_Maquinas_virtuales.indd 56 Linux+ 6/2009 2009-04-14, 14:20 soluciones para empresas Máquinas virtuales última puede permitir analizar la información recogida por un software que se encargue de mostrarnos un resumen. Un ejemplo de esto es el ACID. Esta es una interfaz, en formato web, que muestra la información ordenada (entre otras posibilidades). Ya que el fin del artículo no es explicar la configuración de Snort, y puesto que no es necesario para el correcto funcionamiento de nuestra infraestructura, lo dejaremos con la configuración por defecto. Deberemos de poner su interfaz de red en modo Red Interna, añadiéndolo a la red red_servidores. La interfaz será configurada, por Snort, en modo promiscuo. Por tanto no es necesario asignarle ninguna IP. Tan solo nos queda añadir el servicio de snort al arranque del sistema: # update-rd.d snort defaults. Miscelanea: Conversión de máquinas virtuales VMWare a máquinas de VirtualBox Escribimos los siguientes comandos: # VBoxManage covnvertdd NUEVA_ IMAGEN.bin IMAGEN_VIRTUALBOX.vdi # VBoxManage modifyvdi IMAGEN_VIRTUALBOX.vdi compact. Usando como referencia el nombre del fichero de salida obtenido con Qemu, han de pasarse los parámetros tal y como se muestran. IMAGEN_VIRTUALBOX.vdi es la imagen final que contendrá la conversión de la máquina virtual. Conversión de máquinas virtuales VirtualBox a máquinas de VMWare Al igual que a veces es necesario migrar máquinas de VirtualBox a VMWare, otras podríamos encontrarnos en la situación de necesitar realizar el proceso inverso. Antes de hacer la conversión hay que llevar a cabo una serie de pasos para preparar los discos para el formato adecuado necesario para VMWare. Aunque el proceso de conversión se puede hacer de diferentes maneras, existen problemas asociados a la compatibilidas si no se hace con procedimiento adecuado, siguiendo unos pasos rigurosos. Como primer paso tendremos que hacer un proceso de conversión del disco duro virtual, obteniendo un sistema archivo de tip raw. En el siguiente paso se aplicará el formato adecuado para VMWare. Para esto haremos uso de la herramienta de administración de VirtualBox, VboxManage, y qemu. Los comandos necesarios son: Muchas veces, si ya se es usuario habitual de otro tipo de software de virtualización, nos resistimos a migrar a cualquier otro. El problema es que, seguramente, tengamos todas nuestras máquinas virtuales configuradas y adaptadas para ese entorno. Por ello se va a explicar el proceso, mediante el cual, se puede convertir una imagen de VMWare en una de VirtualBox. Antes de comenzar necesitamos instalar software adicional. Bien con el gestor de paquetes Synaptics, apt o emerge, debemos de instalar Qemu. Qemu tiene una serie de características que, para nuestro caso, nos resultarán (Conversión al formato raw) muy útiles. Para instalarlo tecleamos: • • En Debian/Ubuntu: # apt-get install Qemu En Gentoo: # emerge qemu # VboxManage internalcommands (Conversión a formato VMWare) # qemu-img convert -0 vmdk DESTINO.raw MAQUINA_VMWARE.vmdk Donde ORIGEN.raw es el disco duro virtual que queremos convertir. DESTINIO.raw es la imagen, tipo raw, que se crea como paso intermedio y MAQUINA_VMWARE.vmdk es la que tendremos que abrir como nueva máquina virtual en VMWare. # qemu-img convert IMAGEN_VMWARE.vmdk Arrancando toda la infraestructura con un solo comando Donde IMAGEN_VMWARE.vmdk es la máquina que queremos convertir. Todas las imágenes de VMWare tienen la misma extensión, siendo fácilmente reconocibles. Y NUEVA_IMAGEN.bin es la imagen en crudo, anteriormente explicada. Ahora haremos uso de la herramienta de administración de VirtualBox para acabar la conversión. Daniel García es Diplomado en Ingeniería Técnica Informática por la Escuela Politécnica Superior de Informática de Albacete. Especializado en seguridad informática, trabaja actualmente como auditor de seguridad para Arcitel Ibérica S.A., en división de seguridad de Telefónica I+D. Puede localizarse en la web en la que colabora, o en el correo electrónico: Web: www.iniqua.com E-mail: [email protected] E-mail: [email protected] levantar todas las máquinas virtuales que desee. En el Listado 22 se presenta el código. script presentado arriba, se encarga de arrancar todas las máquinas que se han creado durante el artículo. Tan solo habría que guardarlo y darle permisos de ejecución. Esto se puede hacer así: # nano -w arrancar_maquinas.sh […] (damos permisos de ejecución) # chmod 744 arrancar_maquinas.sh En general, si queremos añadir una nueva máquina que hayamos creado, tan solo hemos de añadirla al script según el formato: VbovManage startvm MAQUINA &. Tendrá que cambiar la palabra MAQUINA por el nombre de la suya. El ampersand (&) es utilizado para que cada máquina no tenga que esperar a la anterior hasta que se acabe el proceso y puedan arrancar todas a la vez. converttoraw ORIGEN.vdi DESTINO.raw Una vez instalado Qemu, haremos uso de él para convertir la máquina de VMWare a un formato binario. Este tipo de formatos, cuya característica principal es, precisamente la ausencia de formato, se les llama formato en crudo o raw. Realizaremos la conversión tecleando: NUEVA_IMAGEN.bin Sobre el autor Si ha seguido el artículo paso ha paso, y ha creado todas las máquinas virtuales que se indican en el ejemplo, se habrá dado cuenta que cada vez que necesita arrancar todas ellas tiene que iniciarlas una a una desde el gestor gráfico. Debido a esta incomodidad se propone a continuación un pequeño script que hará esta tarea por usted. Con solo ejecutarlo, se encargará de En la red • • • • • VirtualBox: http://www.virtualbox.org/ MySQL: http://doc.ubuntu-es.org/MySQL, http://www.desarrolloweb.com/ manuales/41/ Subversion: http://www.abbeyworkshop.com/howto/ misc/svn01/ Ejemplo firewall: http://www.kalamazoolinux.org/ presentations/20010417/ jamesiptables.html Ejemplo avanzado de firewall: http://www.hacktimes.com/?q=node/49 Snort: http://www.linuca.org/ body.phtml?nIdNoticia=13 57 www.lpmagazine.org 42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_Maquinas_virtuales.indd 57 2009-04-14, 14:20 seguridad Seguridad de datos Su información, ¿a salvo? David Puente Castro (blackngel) [email protected] ¿De qué serviría un ordenador si no pudiésemos almacenar información en él? Absurda máquina si esto ocurriese. Pero aun no siendo así, de nada sirve si no podemos mantener esta información lejos de curiosos atacantes. El problema es claro. ¿Hasta qué punto la privacidad de nuestros datos está garantizada? A lo largo de este artículo podrá ver cómo los datos que usted toma como definitivamente eliminados, no son tal. Cómo estos pueden ser recuperados y cómo esto afecta a su seguridad. Pero para ello haremos un breve viaje a través de los medios de almacenamiento, el concepto de informática forense y los fallos más comunes de los sistemas operativos en materia de administración de ficheros. Daremos también un paseo por el software de borrado seguro y sus enemigas las herramientas de análisis forense. Cómo no, haremos nuestra propia implementación de borrado seguro y para concluir realizaremos unas pruebas sencillas acerca de cómo recuperar un documento borrado en un medio de almacenamiento común haciendo uso de las aplicaciones anteriormente mencionadas. Durante el transcurso del artículo se hablará tanto sobre Linux y entornos Unix, como de Windows, haciendo las pruebas más importantes sobre el primero de ellos, como era de suponer. Pero entonces, ¿para qué tratar el segundo? Cuando descubra sus fallos, podrá tomárselo como un consejo para cambiar definitivamente de sistema operativo. Si estaba indeciso, dejará de estarlo. 58 58_59_60_61_62_63_64_65_Seguridad_de_datos.indd Pero todo esto no son más que palabras. Pasemos a la acción... Informática forense Podemos definir la informática forense como la ciencia de manipular, en cualquier sentido de la palabra, los datos que han sido procesados electrónicamente y que se encuentran almacenados en un medio computacional. Muchas veces, debido a las connotaciones, uno relaciona este término con el F.B.I. y esto no está totalmente equivocado, ya que ellos son uno de los primeros cuerpos en desarrollar software para la recolección de evidencia. Cabe decir que desarrollan mucho más software de tipo catalogado y para fines desconocidos. Con la informática forense se logran 3 objetivos principales: • • • Compensación de daños. Persecución y procesamiento judicial de los criminales. Creación y aplicación de medidas preventivas. Los analistas forenses utilizan muchas herramientas para hacer más fácil su labor a la hora de presentar puntos de evidencia. Linux+ 6/2009 58 2009-04-14, 14:21 seguridad Seguridad de datos Para detalles de la construcción física y composición interna de un disco duro puede echar un vistazo a la Figura número 1. ¿Cómo se escriben los datos? Platos Cabeza lectora Motor Figura 1. Composición interna de un Disco Duro Uno de los programas más conocidos para estas labores es EnCase hecho por Guindace Software Inc. Puede encontrar más información en la siguiente dirección: http://www.guidancesoftware. com. La desventaja más desagradable es que su precio no está al alcance de un usuario que solo desea hacer pruebas personales. The Coroner Toolkit. Esta herramienta fue utilizada por Wietse Venema y Dan Farmer (dos conocidos expertos en seguridad informática) en una demostración de Unix Forensics, en la que dieron conocimiento de sus grandes posibilidades en la extracción de información tanto del sistema de ficheros como de la red. Aquellos que se pasen por la página: http:// www.porcupine.org/forensics, podrán encontrar, además del código fuente de esta herramienta y muchos de sus diferentes parches, un libro que han escrito los dos autores titulado Forensic Discovery y que puede ser leído online. La premisa del libro, como en el mismo se indica es que: La información forense puede ser encontrada en cualquier sitio que uno mire. Entre las herramientas forenses podemos clasificar las de monitorización, logueo, marcado de documentos e incluso herramientas de hardware para el análisis exhaustivo. Decir que los estudios que se hacen mediante dispositivos hardware son más conocidos como análisis de laboratorio. Cabe decir que, los peores inconvenientes para un analista forense, pueden tratarse sobre todo de temas judiciales. No es tan sencillo como parece presentar evidencias y cargos contra alguien en una corte. Aunque sea poco lo que le dificultemos nosotros (o un anti-forense) la tarea, mucho más difícil será para ellos demostrar que Los ordenadores almacenan datos en un disco magnético, al que conocemos como Disco Duro, en un sistema de numeración binario, es decir, una secuencia consecutiva de unos y ceros. Los bits se transforman en una onda de corriente eléctrica que es transmitida por medio de cables al rollo de la cabeza de escritura. Un bit 1 se corresponde a un cambio en la polaridad de la corriente, mientras que un bit 0 corresponde a una ausencia de este cambio en la polaridad de la corriente de escritura. Los unos almacenados aparecen donde se produce una inversión en la dirección magnética en el disco, y los ceros residen entre los unos. ¿Cómo se leen los datos? Para realizar la lectura de los datos previamente almacenados se hace uso de una técnica llamada efecto GMR que es utilizado por la cabeza de lectura. Al pasar una corriente por el elemento GMR, unos y ceros según convenga. Existe un problema bastante desagradable, y es que, como todo componente eléctrico, las fuentes magnéticas generan ruido y esto puede ser mal interpretado por una cabeza de lectura, Almacenamiento de datos con sus consecuentes errores que a veces se Aquí mencionamos los cuatro fenómenos uti- vuelven irreversibles. lizados para el almacenamiento de datos en un Zonas sensibles medio magnético: Estudiaremos ahora las zonas débiles que imple• Una corriente eléctrica produce un campo mentan los Sistemas Operativos en los conocidos sistemas de ficheros. Estas zonas son controladas magnético. • Algunos materiales se magnetizan con faci- por el Sistema Operativo pero también es sabido lidad cuando son expuestos a un campo ma- que pueden ser manejadas por software especialgnético débil. Cuando el campo se apaga, el mente diseñado para tal objetivo. Pueden ser utilizadas para la recolección material se desmagnetiza rápidamente. Se conocen como Materiales Magnéticos de rica y variada información, por este motivo, debemos ser conocedores de las mismas y aseSuaves. • En algunos materiales magnéticos suaves, la gurarnos de que no ofrezcan datos sensibles. resistencia eléctrica cambia cuando el material es magnetizado. La resistencia regresa File slack a su valor original cuando el campo magne- Para entender este concepto, es requisito comtizante es apagado. Esto se llama Magneto- prender mínimamente la estructura de un sisteResistencia, o efecto MR. La Magneto-Re- ma de archivos y cómo estos son almacenados sistencia Gigante, o efecto GMR, es mucho en nuestro disco duro. Todas las diferentes versiones de Windows mayor que el efecto MR y se encuentra en sistemas específicos de materiales de pelícu- dividen el disco duro en pequeños bloques denominados clusters, su tamaño es específico las delgadas. • Otros materiales se magnetizan con dificul- dependiendo del tamaño del disco y del sistema tad (es decir, requieren de un campo mag- de archivos. Por ejemplo, para NTFS se decide nético fuerte), pero una vez se magnetizan, del modo que puede ver en la Tabla número 1. Para ser más estrictos, debemos decir que mantienen su magnetización cuando el campo desaparece. Se conocen como per- la unidad más pequeña de información que contiene un disco duro se conoce como Sector, manentes. la evidencia recolectada tiene un carácter realmente fiable. No dejaremos esta sección sin mencionar el famoso principio de Locard, por el cual se rige toda la técnica de la informática forense. Dice que: Todo contacto deja un rastro. Y esto es ineludiblemente cierto. 59 www.lpmagazine.org 58_59_60_61_62_63_64_65_Seguridad_de_datos.indd 59 2009-04-14, 14:21 seguridad Seguridad de datos Puede ver un ejemplo de configuración en la Figura 2 de este artículo. Estos son los archivos de almacenamiento: • • Windows 9x/Me – win386.swp pagefile.sys Si bien es posible deshabilitar el uso de la memoria virtual o modificar su tamaño, ello no es nada conveniente, ya que provoca problemas frecuentes en el sistema y, por otro lado, hay gran cantidad de software que hace uso de estos archivos. En vez de esto, la mejor opción sería cifrar su contenido; ello, por ejemplo, es una gran posibilidad que nos ofrece la fantástica herramienta BCWipe. Linux: Linux utiliza un área de tamaño definido por el usuario en la instalación del sistema en el que se almacenan también datos de la memoria principal. Normalmente este área es una partición que se crea junto la partición raíz de Linux y que no debería de sobrepasar el mismo tamaño de nuestra memoria RAM o el doble. Por otro lado, Linux hace uso de un dispositivo de caracteres, que se encuentra en /dev/ kmem. Es una imagen de la memoria principal del ordenador. Ambos medios son un buen lugar de comienzo para un investigador interesado en nuestras propiedades. Unallocated file space Figura 2. Configuración de la Memoria Virtual pero los sistemas de archivo agrupan varios de estos en un cluster a efectos de administración y mejora de rendimiento. Actualmente lo más normal es encontrarnos con un tamaño de clúster igual que el de una página de memoria, es decir, 4 kilobytes. Para comprender el almacenamiento en una distribución Linux recomiendo una atenta lectura a los fuentes del sistema de archivos EXT2 (recientemente nos encontramos con EXT3, con journaling). En el archivo de cabecera linux/ ext2_fs.h pueden encontrarse las siguientes estructuras: bir a un fichero. Veamos un ejemplo. Suponiendo que queremos guardar un archivo que ocupa unos 2 kilobytes y el tamaño del cluster definido por el sistema es de 4 kilobytes, estaremos desperdiciando otros 2. Este espacio sobrante, entre el final del archivo y el final del cluster real, es al que llamamos file slack. Este espacio es sin duda una gran y valiosa fuente de información porque los sistemas operativos de Microsoft lo utilizan para almacenar datos que se encuentran en la memoria principal. Cuando los usuarios de Windows confían en el simple borrado que realiza el sistema, están cometiendo realmente dos errores, el primero de ellos es que este no es seguro. El segundo, y más peligroso, es que estos no son realmente borrados. Lo que ocurre en realidad con los ficheros es que son removidos a un área de espacio noasignado, de tal forma que los datos siguen existiendo pero se encuentran ocultos a los ojos Área de SWAP – Formato del Debemos de diferenciar el sentido de este Superbloque. concepto para cada sistema operativo. Windo• struct ext2_group_desc – Formato del ws: Este utiliza un archivo que hace las veces de descriptor de grupo. repuesto para la memoria principal del sistema • struct ext2_dir_entry – Formato de las (la RAM) y almacena información de acceso entradas de directorio. aleatorio en el mismo. El usuario no es conocedor • struct ext2_inode – Formato de un inodo. de este suceso y por tanto se da una considerable vulnerabilidad. El tamaño de este archivo no es La última que hemos mostrado sea quizás la fijo y puede ser modificado. En WinXP puede enmás relevante, ya que un inodo es el bloque de contrarse en: Panel de control –>Sistema–>Op. construcción básico del sistema de archivos. Y Avanzadas–>Configuración(Rendimiento)–> Figura 3. Bobina Tesla destruyendo un CD contiene toda la información que puede descri- Op.Avanzadas–>Cambiar(M. Virtual). • struct ext2_super_block 60 58_59_60_61_62_63_64_65_Seguridad_de_datos.indd Linux+ 6/2009 60 2009-04-14, 14:21 seguridad Seguridad de datos Figura 4. Logo Oficial de Helix3 de los usuarios (que no a software especialmente diseñado para leer este espacio). En los sistemas Windows 9x/Me, cuando un archivo es borrado, la FAT (Tabla de Asignación de Ficheros) marca el espacio de este archivo como libre para así poder ser sobrescrito con nuevos datos, pero mientras esto no ocurre, la información se mantiene intacta con los consiguientes problemas de seguridad que ello conlleva. Archivo de hibernación El archivo de hibernación, como muchos saben, es un archivo de sistema que utilizan los sistemas de Microsoft antes y después del estado de hibernación (o estado S4). Es una imagen del sistema que se escribe al disco antes de entrar en dicho estado y, cuando el usuario reinicia su sesión, este fichero se carga y todo vuelve a la normalidad (al estado anterior). Piensen fríamente ahora. ¿Qué mejor ocasión para un atacante, que tener toda la configuración del sistema en un solo archivo? La herramienta BCWipe tiene una opción que se encarga de este archivo y es conveniente hacerlo con regularidad, más fácil si lo activamos como tarea programada. Borrado en Linux Aquí la otra cara de la moneda. Lo que Linux hace para borrar un archivo de nuestro sistema, es modificar el contador de enlaces del inodo correspondiente al fichero a borrar a 0, eliminando a su vez el nombre del mismo de las entradas de directorio. No vamos a mostrar aquí la estructura definida por EXT2 para un inodo, ya que esta es bastante amplia dado que contiene información administrativa como el UID del propietario, el tamaño del fichero, las fechas de acceso y modificación, el numero de bloques, sus direcciones y mucho más. Lo que sí mostramos es el elemento al que hacemos referencia como contador de enlaces: __u16 i_links_count; /* Links count */. Una vez este llegue a ser cero, el espacio se Eliminación de CD's queda en un estado disponible para otros archi- Daremos ahora un rápido vistazo a las opciones vos, pero ahora se plantean nuevos problemas: de que disponemos para la eliminación de los datos en soporte CD. Claro es de suponer que cual• ¿Qué ocurre mientras este espacio no es quiera de ellas provocara la inutilización total del mismo, pero ese es el principal objetivo. utilizado? • ¿Se podría acceder a este espacio? • Retirar la lámina reflectante con algún elemento cortante. Pueden seguir manteDesgraciadamente el inodo sigue manteniendo niéndose datos en el policarbonato. información sobre el archivo al que hace referencia; esto significa que aunque se han modi- • Introducir el CD en un microondas. Esto trae consigo ciertos inconvenientes, puede ficado los meta-datos o en este caso el inodo causarse un cortocircuito debido al contea efectos de link con el valor de 0, y seguir el nido de metales en el CD. puntero de bloques hasta llegar exactamente al contenido del fichero. Al igual que cualquier • Rayar la parte superior del CD que es la que contiene los datos. persona se preocupa de lo que sucede en su casa, su coche, y el resto de sus pertenencias, también • Cortar el CD en la mayor cantidad de trozos posibles asegurándose de que la lámina redebería preocuparse de lo que ocurre con su flectante queda destruida. información y de lo que alguien podría llegar a • Utilización de productos químicos sobre el hacer con ella. No sean conformistas. soporte. Será suficiente con cualquier tipo Eliminación de disquetes de ácido corrosivo. Desde aquí no nos haceNostalgia me produce el hablar de los tan conomos responsables de las ideas que tengas en cidos “disquetes”, pero sin duda alguna muchos mente. seguimos aún utilizándolos para pequeños tra- • Incineración del CD, la mas efectiva. Reibajos y también para algunas preciadas miniteramos nuevamente la problemática amdistribuciones de Linux biental. Por sí solos son medios bastante frágiles, • Si nuestro CD es regrabable, podemos hacer pero siguen siendo fuentes significativas de uso de la reescritura, pero aun después de información y aquí expondremos diferentes varias pasadas, podría llega a sacarse inmodos para conseguir la destrucción completa formación. Aunque este es un proceso muy de los mismos o, en su defecto, un borrado de complejo y costoso. datos seguro. • Y por último, para los más atrevidos y/o con medios disponibles a tal efecto, pueden • Pasar un imán sobre la superficie electroprobar a destruir un CD mediante descargas magnética del disquete hará que los datos eléctricas producidas con el uso de bobinas se pierdan irremediablemente ya que estos Tesla (vean la Figura 3 para más detalles). son almacenados mediante pulsos electromagnéticos y cualquier fuerza proveniente Aplicaciones de una de estas fuentes provoca su cambio de borrado seguro Las siguientes herramientas aquí presentadas, o pérdida. • Incineración. No requiere de más explica- han sido analizadas y descritas bajo el punto de ción. El único inconveniente es la conta- vista del autor de este artículo. Para un mejor minación ambiental. El que se tome esto a conocimiento de cada una de estas utilidades, broma, le recomiendo se lea el How-To en deben ser utilizadas con detenimiento. español de Ecología y Linux. • Vertido de alguna substancia corrosiva MS-DoS & Windows sobre la superficie magnética del disquete. BCWipe: Estupendo producto de la casa Jetico. • Cortar en trozos el disquete asegurando que Su mayor defecto es que no es gratuito, fuera de el disco interior queda convenientemente esto, sus caraterísticas son ampliamente destadestruido. Se pueden recuperar datos de cables. Una de sus facetas más interesantes es la de Cifrado de la Swap; con ello elevaremos de cada uno de los trozos. • Sobrescritura del contenido del disquete. forma considerable nuestro grado de seguridad. No es el método más bueno pero si el mas Los algoritmos de cifrado disponibles son: sencillo y práctico. Cuantas más veces se reescriba el mismo, más complicada será la • Rijndael – 256-bit recuperación de datos. Es más eficiente uti- • Blowfish – 448-bit lizar un programa que realice las iteraciones • GOST 28147-89 – 256-bit • Twofish – 256-bit de sobrescritura de forma automática. 61 www.lpmagazine.org 58_59_60_61_62_63_64_65_Seguridad_de_datos.indd 61 2009-04-14, 14:21 seguridad Seguridad de datos Este software dispone de diversas opciones que duro, desde los sistemas operativos hasta la pueden ser modificadas a gusto del usuario. Los tabla de particiones. Usa el método del US métodos de borrado seguro son: DoD de 7 pasadas. Evidentemente, eficaz si su sistema pasara por las manos de algún in• Método Gutmann de 35 pasadas. vestigador forense. Esto se lo pondría difí• El recomendado en el manual NISPOM cil. del US DoD, 7 pasadas. Y continuamos. BCWipe Task Manager. Con • Una pasada aleatoria. esta aplicación podemos programar las tareas que queremos realizar cada cierto tiempo con Esta fantástica herramienta trae consigo una BCWipe. Su uso es extremadamente sencillo, utilidad llamada BCWipePD.exe, su objetivo por ello no me detendré aquí y seguiremos con es el de borrar todo el contenido de un disco mas descripciones generales. Norton Utilities: Este gran kit de herramientas trae consigo al omnipresente Wipe. Puede encontrarlo en Inicio–>Programas–> N. Utilities –>Wipe Info. Una vez abierto, nos da la posibilidad de borrar archivos, carpetas y el espacio libre del disco duro. Los métodos de borrado que nos ofrece son los siguientes: • • Listado 1. Script bsecdat.pl #!/usr/bin/perl ##################################### # Nombre: Bsecdat V. 1.0 Antes de culminar con el proceso de borrado, esta aplicación mostrará un resumen con todas las opciones que hemos elegido, así podrá asegurarse de que todo está en el orden correcto. PGP: Su gran amigo Pretty Good Privacy dispone de dos utilidades de cierta importancia: # # By: blackngel # ##################################### print "\n\n"; print " @@@@@@@@@@@@@@@@@@@@@@@@ \n"; print " @ Bsecdat by blackngel @ \n"; print " @@@@@@@@@@@@@@@@@@@@@@@@ \n"; print "\n\n"; print "Que archivo desea eliminar?: "; • chop $archi; • $archi=<STDIN>; print "\nNumero de sobrescrituras?: "; $num=<STDIN>; chop $num; open (ARCH,"+<$archi") or die "El documento no se ha abierto o no existe."; # Extraemos la información del archivo para obtener su tamaño -> $tam ($dev, $ino, $info, $links, $IDuser, $IDgrp, $IDdev, $tam, $uacc, $umod, sobreescribir(); # Sobrescribe el archivo 'num' veces utime(0, 0, $archi); # Cambia la fecha de última modificación close(ARCH); # Trunca el tamaño del archivo a 0 UNIX & LINUX # Nota: El archivo es renombrado y eliminado después de ser cerrado renombrar(); # Renombra el archivo sub sobreescribir # Función o algoritmo de sobrescritura { unlink($archi); THC-Secure Deletion: Esta herramienta, desarrollada por THC (The Hacker´s Choice) es un conjunto de utilidades que mantienen la seguridad de los datos que no podemos controlar en nuestro sistema o los cuales deseamos eliminar. Este paquete incluye: # Elimina el archivo for($i=0; $i < $num; $i++){ seek(ARCH, 0, 0); for($j=0; $j < $tam; $j++){ $car = rand(255); } } } • • printf ARCH "%c", $car; sub renombrar • • # Función que genera un nombre aleatorio { $n = rand(255); $nom = sprintf("%f", $n); } print " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"; print " @@@@@ print " @@@@@ Bsecdat V. 1.0 by blackngel print " 62 58_59_60_61_62_63_64_65_Seguridad_de_datos.indd black @ set-ezine.org @@@@@\n"; @@@@@\n"; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"; print "\n"; srm – Borrado seguro de ficheros. sfill – Borrado seguro del espacio libre de un disco. sswap – Borrado seguro del area de swap. smem – Borrado seguro de datos en la RAM. El proceso utilizado por srm se basa 5 pasos básicos: rename($archi, $nom); print "\n\n"; Wipe – Se encarga de la eliminación segura de ficheros de nuestro sistema. FreeSpace Wipe – Se encarga de el borrado del espacio libre disponible en el medio de almacenamiento. Solo debemos de elegir la unidad deseada y el número de pasadas que nos parezcan. La segunda herramienta tiene la bondad de indicar el tiempo aproximado que tardará en realizar la operación. $uino, $tambloqIO, $IO) = stat (ARCH); truncate(ARCH, 0); Fast Wipe – 1 pasada, sobrescribe con ceros pero el valor puede ser cambiado (0 a 255), 246 recomendado gubernamentalmente. Government Wipe – Sigue las indicaciones del manual NIPSON, 7 pasadas, sobrescritura de ceros y unos alternada, tiene varios parámetros modificables. • • • • • Sobrescribe 38 veces. Flush de la cache de disco entre cada pasada. Truncamiento del fichero. Renombramiento del fichero. Llamada a unlink( ). Linux+ 6/2009 62 2009-04-14, 14:21 seguridad Seguridad de datos The Defiler's Toolkit: Formada por dos herramientas complementarias, esta herramienta es conocida como una utilidad “anti-forensics”. Las dos utilidades que incluye son: “necrofile” y “klismafile”. En un sistema de archivos Unix/ Linux cualquiera de las siguientes partes contendrá evidencia de la existencia de archivos: • • • I-nodes (inodos) Directory Entries (entradas de directorios) Data Blocks (bloques de datos) Entre necrofile y klismafile, se aseguran de eliminar cualquier rastro de información en las estructuras anteriormente mencionadas. • • Necrofile – Se encarga de la implementación de borrado seguro en los i-nodos y de eliminar cualquier contenido de los bloques de datos. Klismafile – Su objetivo es sobrescribir las entradas de directorio que han sido eliminadas. La sobrescritura se realiza con ceros. Puedes encontrar este set de herramientas en formato uuencode en el interior del fabuloso artículo creado por grugq, Defeating Forensics Analysis on Unix, publicado en el número 59 de la revista Phrack (Vea referencias para más detalles). OTROS PM WIPE: Este herramienta es para el sistema OS/2, sólo tiene que elegir los archivos a eliminar y listo. Tiene una interfaz bastante amigable. OS/2 también hace uso de un archivo de swap para el almacenamiento de datos en memoria. Existen otras herramientas que solo borran directorios y otras de pago. Como siempre, Google puede echarle una mano con sus necesidades. Herramientas forenses Nos centraremos únicamente en las características principales de cada utilidad. Para una información más detallada puede consultar las páginas man e info disponibles en cada una de ellas. TCT Veamos el objetivo de cada una de las utilidades que conforma este fantástico kit y también las del paquete TCT Utils que lo complementa: • • • • • file – Busca archivos. Icat – Contenido de un inodo. Ils – Información de un inodo. lastcomm – Últimos comandos ejecutados. lazarus – Recupera datos de un dispositivo. DBAN: Es un disco de arranque que borra de un modo seguro cualquier disco duro que pueda detectar en un ordenador. Tal y como nos indica la propia página oficial, es la herramienta perfecta para un borrado automático de emergencia (Vaya directamente a las referencias para • más información). • Helix3: Se trata de una distribución Li• nux basada en la ya ampliamente conocida Ubuntu, desarrollada por la empresa e-fense, • que está dedicada de una forma específica al campo del análisis forense y la respuesta ante • incidentes. Se proporciona como Live-CD, de modo que pueda ser ejecutada sobre el orCuando hablo de imagen hago referencia a una denador que está siendo objetivo del análisis imagen creada con la aplicación dd (disponible o estudio, y su estructura está especialmente diseñada con el fin principal de no alterar en en cualquier Linux) de un dispositivo. modo alguno a éste, y no comprometer así Manipulate_data cualquier evidencia que haya podido ser enconPaquete con tres herramientas simples pero trada. bastante eficientes, su código fuente es fácil de comprender y se centra estrictamente en su ob- Prueba de concepto Estamos a punto de realizar una prueba simjetivo. Las tres utilidades son las siguientes: ple pero de la cual aprenderemos bastante. • search_data – Busca una cadena en el dis- Trataremos de recuperar un archivo previapositivo de bloques y muestra el número mente borrado de un disquete. Lo haremos en este medio por la simple razón de que sería un correspondiente donde se encuentra. • read_data – Lee tantos bytes como el poco angustioso que cada uno tuviera que anusuario especifique a partir del número de dar jugando con su disco duro, de esta forma nos evitamos todos problemas y el autor no se bloque dado. • write_data – Sirve para escribir en el dis- hace responsable. De todas formas, en cualquiera de los casos positivo. bastaría con cambiar las referencias a /dev/fd0 Para encontrar esta herramienta, puede buscar por /dev/hdx donde la x será variable para cada en este estupendo repositorio: http://fux0r.pha sistema. Primero crearemos un archivo de texto thookups.com/tools. dentro del disquete, esto seria algo así: • • • • unrm – Recupera datos de un dispositivo. grave-robber – Información del sistema. mactime – Fechas de acceso y modificación. bcat – Contenido de un dispositivo de bloques. blockcalc – Crea un mapa de bloques. fls – Lista entradas de directorio. find_file – Dado un inodo e imagen determina el archivo. find_inode – Dado un bloque e imagen determina el inodo. istat – Información de un inodo dado inodo e imagen. HEXDUMP Esta fantástica utilidad viene incluida prácticamente en cualquier distribución Linux estándar. Realiza un volcado en hexadecimal. Para nosotros es muy útil porque conseguimos pasar toda la información de un dispositivo a un fichero con el cual podremos trabajar después. La ventaja está en que mediante sus argumentos podremos especificar el formato de salida. El que más nos interesa en este caso es el de ASCII, así encontraremos de una forma más cómoda cualquier texto plano. $ cd /media/floppy #Aquí debería de estar montado el disquete $ echo 'Tenemos 5 misiles' > pruebas.txt Como es de suponer, ahora solo queda borrarlo: $ rm pruebas.txt Utilizaremos el kit Manipulate Data para nuestro objetivo. Tan solo harán falta las utilidades Otros search_data y read_data. Con la primera Algunos otros nombres para los que deseen buscaremos una cadena de la que nos acordebuscar más información: mos, daré por supuesto que esta palabra es “misiles”. El comando se ejecutaría de esta forma: • Partition recovery $ search_data -i /dev/fd0 "misiles" • Data Recovery Software • Magic Undelete La opción -i hará que no se distingan mayúscu• RIP las de minúsculas. La salida del programa será • LDE (Linux Disk Editor). 63 www.lpmagazine.org 58_59_60_61_62_63_64_65_Seguridad_de_datos.indd 63 2009-04-14, 14:21 seguridad Seguridad de datos un número de bloque que nos indicará dónde se Tabla 1. Tamaños específicos de cluster encuentra la cadena deseada, algo así: Tamaño del HD found at 17418: misiles Tamaño del cluster 512 MB o menos 512 bytes 513 MB - 1024 MB 1 KByte 1025 MB - 2048 MB 2 KByte Ahora solo nos queda valernos de read_data para encontrar el resto del archivo. Como el 2049 MB o más texto completo que buscamos esta más atrás que misiles, tendremos que utilizar un núme- $ lazarus -hB -D blocks -H html -w ro de bloque inferior y buscar más cantidad de html /dev/fd0 bytes para alcanzar el final. Esto lo lograríamos • -h – Salida en formato HTML. con el comando: • -B – No escribe bloques de binarios. $ read_data /dev/fd0 17408 30 • -D – Directorio donde se guardarán los archivos con el contenido de los bloques. La salida nos ofrecerá lo que buscamos y, ade- • -H – Igual que el anterior pero aquí se más, unos bytes de sobra que pueden o no tener guardan los archivos con extensión .html. información. Lo encontraremos en un archivo • -w – Igual que el anterior (que alguien me lo explique). con el nombre 17408.30 en el directorio actual: Tenemos 5 misiles_____________ #El subrayado representa datos desconocidos Método 2 Mediante el uso de hexdump volcaremos el contenido del disquete a un archivo estático para después examinarlo con calma. El comando que podemos utilizar es: $ hexdump -c /dev/fd0 > datos.txt La opción -c provocará que la salida sea en formato hexadecimal y ASCII al mismo tiempo. Como bien puede comprobar, redireccionamos la salida hacia un fichero que analizaremos seguidamente en busca de la cadena deseada. $ grep -i 'misil' datos.txt La salida sera algo parecido a esto: 00004400 54 65 6e 65 6d 6f 73 20 20 6d 69 73 69 6c 65 35 |Tenemos 5 misile| Ahora solo tendríamos que buscar en el archivo, a partir de ese desplazamiento (00004400), el resto de la información. En este último caso utilizaremos las herramientas que nos proporciona TCT, estas suelen acompañar con frecuencia a cualquier forense de entornos Unix. Con la ayuda de lazarus conseguiremos recuperar los datos del disquete, expuesta por bloques. Presento aquí el comando y paso a explicar cada uno de sus argumentos: 64 58_59_60_61_62_63_64_65_Seguridad_de_datos.indd Otro método que también es efectivo, es utilizar en conjunto las dos herramientas de recuperación: lazarus y unrm. Por ejemplo: $ ./unrm /dev/fd0 > salida $ ./lazarus -h salida Los siguientes pasos son idénticos a los explicados anteriormente. En el primer comando, el fichero salida tiene que estar en un dispositivo diferente al examinado. También cabe decir que cada una de estas tareas lleva cierto tiempo Ahora buscamos entre los archivos del directo- según el sistema. rio blocks, cual de ellos contiene el texto que a nosotros nos interesa. Puede utilizar un coman- Script de borrado seguro Presento aquí una vaga implementación de un do como el siguiente: programa de borrado seguro. Como podrán $ strings -af *.txt | grep -i 'misil' comprobar, utiliza las funciones principales 18.t.txt: Tenemos 5 misiles pero, sin duda alguna, está dispuesto a sutiles mejoras, tanto de rendimiento como de Según la documentacion de lazarus tambien seguridad. podría usar algo parecido a esto: ¿Por qué utilizamos el lenguaje perl? Fácil respuesta. Por su gran potencial, rapidez $ egrep -l 'misil' blocks/*.txt > teniendo en cuenta que es un lenguaje interallfiles pretado y lo compacto que resulta resolver cualquier problema. Debido a la portabilidad Y buscar entre los archivos listados en allfi- de este lenguaje, no debería de tener ningún les. Para las imágenes bastaría con ejecutar problema a la hora de ejecutar este programa lo siguiente: $ xv blocks/*.gif blocks/ tanto en plataformas Linux como en Win*.jpg. dows. Los ficheros del directorio anterior terminaExcluyendo los logotipos que le dan algo rán con diferentes extensiones según lazarus de vida al script, este ha sido escrito de forma interprete el contenido de los mismos. Puede que sea altamente legible. Usted mismo puede observar un listado de las posibles extensiones realizar diversos cambios en el código y adapen la Tabla número 2. tarlo a sus necesidades específicas. Con un poco de suerte, en nuestro caso, Posibles mejoras: y sabiendo que el archivo se trataba de un txt, podríamos reducir las posibilidades y el tiempo • Entrada de datos como argumentos. de localización de esta forma: $ strings -af • Operación sobre múltiples ficheros. *.t.txt | grep -i misil. • Flush de la cache de disco. Tabla 2. Extensiones de archivo de TCT Extensión Método 3 4 KBytes Formato Extensión Formato Extensión Formato A Archivo C Codigo C M Mail U UUencoded O Null W Contraseñas E ELF P Programa X EXE F Sniffer Q Mailq Z Comprimido H HTML R Eliminado . Binario I Imagen S Lisp ! Sonido L Log T Texto Linux+ 6/2009 64 2009-04-14, 14:21 seguridad Seguridad de datos • • Algoritmos más complejos (y más lentos). Otros... Algunos consejos Antes de terminar, me ofreceré a compartir algunos consejos que quizás sean de utilidad al lector más concienciado. Son gratuitos y, por lo tanto, libres de ser tenidos en cuenta: • • • • • Ante todo, mantenga siempre cifrada la información que permanezca estática en su ordenador (no nombraré las herramientas de cifrado como siempre, esto quedará a elección propia). Si una herramienta le permite elegir entre varios métodos de cifrado, a no ser que sea necesario, trate de elegir una de las opciones que no estén por defecto, ya que este método sería el primero en ser atacado por alguien con malvadas intenciones. Utiliza siempre herramientas de borrado seguro, al fin de todo siempre merece la pena. Hoy por hoy podemos encontrar multitud de utilidades GUI amigables para el usuario, adaptadas a diferentes entornos y Sistemas Operativos. Mantenga una buena programación del horario de administración. Procure que • • este horario sea aleatorio pero con sentido común, ya que de esta forma, por ejemplo, si realizáramos el borrado todos los martes de cada semana, un atacante se encargaría de sacarnos la información los lunes; de otra forma, manteniendo una buena aleatoriedad, tendrían que tener suerte para encontrar algo entre nuestra basura. Utilice un sistema de archivos que no este al alcance de una herramienta de análisis forense, como ocurre con Ext2, UFS, etc... No olvide nunca los métodos de destrucción de medios portátiles. Estos pueden dar sorpresas el día menos esperado. Hay que ser responsable y saber qué es lo que se guarda y dónde. A ser posible, utilice un sistema de archivos cifrado o, para más seguridad, uno Conclusión Con lo visto hasta ahora, es posible que se encuentre todavía más concienciado de que la información es un bien que debe ser protegido. Cierto, todo lo que hemos proporcionado puede ser interpretado tanto desde el lado del usuario doméstico que intenta protegerse como desde el lado de un atacante que busca nuevas formas de burlar la seguridad de los anteriores. Pero la única verdad es que esta seguridad es una “lucha”, y sabiendo que la información es poder, nosotros solo ponemos las armas en manos de aquellos que deseen empuñarlas. Al final de este artículo, lo único que su autor desea, es que el lector se haya quedado con algo más que la idea de introducir un CD-ROM en su microondas. En la red • • • • • • The Coroner Toolkit en: http://www.porcupine.org/ forensics Ecología y Linux HowTo en: http://docs.linux-es.org/ HOWTO/translations/es/ Ecologia-y-LinuxCOMO BCWipe en: http://www.jetico.com Norton Utilities en: http://www.norton-online.com/es Pretty Good Privacy en: http://www.pgp.com The Hackers Choice en: http://freeworld.thc.org/welcome PUBLICIDAD 65 www.lpmagazine.org 58_59_60_61_62_63_64_65_Seguridad_de_datos.indd 65 2009-04-14, 14:21 programación Curso de Programación en Gambas Gestión Potente de Procesos: Creación de FrontEnds en Gambas Jorge Emanuel Capurro [email protected] GNU/Linux posee infinitas alternativas a distintos programas de aplicación. Muchas de estas son de interfaz de modo texto, lo que lleva al usuario principiante/intermedio a una difícil interacción con el programa. Gambas pensó en este problema, por lo que como era de esperar, nos trae una solución: La creación de FrontEnds. S in duda esta característica de Gambas, como muchas otras, son las que lo convierten en un lenguaje de programación único bajo GNU/Linux. Muchos de los programas utilizados por los usuarios son en realidad, FrontEnds de aplicaciones en modo texto. Como ejemplo, podemos mencionar al legendario grabador de cd's K3B, que en realidad es la cara visible de aplicaciones en modo texto como cdrecord o mkisofs. Pero la principal pregunta radica en... ¿Qué es un FrontEnd? La respuesta es simple. Un programa del tipo FrontEnd es aquel que se encarga de mostrar y/o generar la interfaz gráfica de un programa que no la tiene. Como contraejemplo, podemos citar el termino BackEnd, el cual hace referencia a la inteligencia o lógica del programa en sí, sin hacer hincapié en las características de interfaz de usuario gráficas que este requiere (si es necesario). En el mundo del diseño web, las definiciones FrontEnd y BackEnd hacen referencia a la visualización del usuario navegante por un lado (front-end), y del administrador del sitio con sus respectivos sistemas por el otro (back-end). Igualmente, la idea es la misma. Pero.. ¿Por qué separar una aplicación en FrontEnd y BackEnd? La idea fundamental radica en que el FrontEnd se encargue de recolectar los datos del usuario para que luego, 66 66_67_68_69_70_71_72_73_74_75_76_77_78_79_Gambas.indd 66 mediante el BackEnd, estos se procesen y arrojen un resultado. Otra de las ventajas radica en que, si el programador no desea o no le es necesario que su programa tenga una interfaz gráfica para el usuario común, puede sólo desarrollar el BackEnd y hacerlo completamente funcional, y si en un futuro lo requiere, podrá desarrollar el FrontEnd sin problema alguno. En la Figura 1, podemos observar a modo conceptual, como sería la interacción entre el FrontEnd y el BackEnd. En esta entrega, veremos cómo desarrollar un frontend para una aplicación en particular. También, veremos cómo desarrollar nuestro BackEnd y enlazarlo con nuestro FrontEnd. Dejemos para más adelante estos temas tan interesantes y empecemos con otras características de Gambas que nos van a ser de suma utilidad y necesitaremos de ellas: Los Arrays y el Control de Excepciones. Arrays Un Array ( también conocido como arreglo, vector o matrices) es un tipo de variable especial que puede agrupar muchos valores del mismo tipo de datos, en el cual estos valores son accedidos mediante un índice que representa su ubicación dentro del mismo. Los Arrays son muy utilizados en programación cuando se Linux+ 6/2009 2009-04-14, 14:52 programación Curso de Programación en Gambas requiere almacenar muchos valores y no se desea manejar una variable por cada valor a manipular, lo cual facilita mucho la tarea del programador y hace a los programas más legibles y eficientes. Por ejemplo, pensemos en un programa que requiera que se generen 1000 números aleatorios para luego ordenarlos de mayor a menor, y que cualquiera de estos números pueda ser accedido en forma individual cuando se requiera. Con los conceptos vistos hasta el momento, solamente podríamos declarar 1000 variables (¡Una verdadera Locura!) y generar un numero aleatorio en cada una de ellas. Con el concepto de Array, es posible generar un Array que contenga 1000 posiciones, en el cual se generen los números aleatorios automáticamente y luego accedamos a un valor en particular mediante su índice. En la Figura 2, veremos la estructura de un Array. Las letras corresponden a los elementos del Array, es decir, a los valores “útiles”, mientras que los números son el índice, el cual utilizaremos para hacer referencia a un valor en particular. Existen diferentes tipos de Arrays: Los unidimensionales y los multidimensionales. La única diferencia entre ellos es la cantidad de índices que cada uno maneja. Por ejemplo, los Arrays de tipo unidimensional manejan un solo índice, mientras que los multidimensionales pueden manejar 2 o más índices. Cuanto más índices tenga el Array, más complejo se hace manipularlo de manera óptima. Debido a que el uso del Array más común se da con los unidimensionales, simplemente nos remitiremos a ellos. Listado 1. Ejemplo de Utilización de Arrays Para explicar la utilización de Arrays, nos valdremos de otra de las grandes características que posee Gambas: La posibilidad de utilizarlo como lenguaje de programación del tipo Script. Un lenguaje de programación del tipo Script, es aquel que no requiere ser compilado, es decir, solamente basta con tener un archivo de texto con código compatible para que este pueda ser ejecutado. Los lenguajes Script son también conocidos como “Lenguajes Interpretados”. Los ejemplos más populares de este tipo de lenguajes son Bash y PHP, Python, LISP, entre otros. Esto en Gambas se hace posible gracias a un pequeño ejecutable que permite ejecutar código Gambas desde cualquier archivo de texto: el gbs2 (Gambas Scripter 2). Para poder crear un programa de Gambas Script, solamente nos hace falta tener un editor de texto cualesquiera, ya que como se mencionó, no hace falta un compilador para poder crear el archivo ejecutable. Los Comandos PS y TOP La consola de GNU/Linux nos provee de dos comandos de suma utilidad a la hora de evaluar el estado de un proceso, ver la cantidad de recursos que consume, consultar su PID, etc. Estos comandos son ps y top. El primero de ellos, nos provee información estática acerca de los procesos que se están ejecutando en ese momento dado. Es información estática puesto que “saca una foto” de las propiedades de los procesos en el momento en que se ha invocado el comando. Por el contrario, top nos provee información dinámica. La información se va actualizando constantemente con el transcurso del tiempo. Vale aclarar que ambos comandos tienen muchas opciones disponibles, las cuales pueden consultarse en las páginas del manual. Utilización Básica de Arrays Empecemos con la declaración de Arrays. La que tener en cuenta que la primera posición del Array es la numero cero. Por ejemplo, si se quiere Sintaxis es la Siguiente: declarar un Array que contenga 10 números, este DIM NombreDelArray [CantElementos] se tendrá que declarar con 9 elementos (0-9). AS Tipo Tipo: Cualquier tipo de dato manejado por Gambas. Por ejemplo, así se declararía un Array NombreDelArray: Es el identificador del Array. que pudiese albergar 1000 números enteros: DIM Tiene las mismas características que el nombre Numeros[999] AS Integer. Para poder referenciar a un elemento en de una variable normal. CantElementos: Es la cantidad de posicio- particular del Array, se debe hacer mediante el nes y valores que podrá almacenar el Array. Tiene índice. Por ejemplo, la siguiente sentencia se encarga de recuperar en una variable del tipo Integer llamada Valor, el contenido de la posición 285 del Array. #!/usr/bin/env gbs2 DIM Numero[1000] AS Integer Dim Valor AS Intenger DIM SumaArray AS Integer Valor = Numeros[285] DIM i AS Integer PRINT "Uso asmo de Arrays \n" 'Asignacion de un Valor en la Posicion 285 del Array Numero[285] = 10 PRINT "Valor de Posicion 285 del Array: " & Numero[285] 'Genero Numeros Aleatorios Array RANDOMIZE FOR i = 0 TO 999 Para poder verificar estos conceptos, nada mejor que con un ejemplo. Este ejemplo lo haremos mediante Script, para que el lector pueda apreciar una característica más de las que brinda Gambas. Vale la pena aclarar que la utilización de Arrays no sólo se limita al lenguaje Script de Gambas, sino que se puede aplicar sin ninguna modificación Numero[i] = Rnd(0, 10) NEXT IDEas C 'Array en Pantalla FOR i = 0 TO 999 PRINT "\n Posicion [" & i & "] - Valor: " & Numero[i] NEXT 'Suma de Todos los Elementos del Array FOR i = 0 TO 999 SumaArray = SumaArray + Numero[i] NEXT 'Suma de Array en _Pantalla IDEas C es el primer FrontEnd desarrollado bajo Gambas para el excelente compilador gcc, el cual es de mi autoría. Posee resaltado de sintaxis y compilación automática, entre otras características interesantes. Se centra principalmente en el lenguaje de Programación C. Para más información visite http://ideasc.sourceforge.net. 67 www.lpmagazine.org 66_67_68_69_70_71_72_73_74_75_76_77_78_79_Gambas.indd 67 2009-04-14, 14:52 programación Curso de Programación en Gambas Ordenando de mil y una formas En la actualidad existen libros enteros y personas que han dedicado toda su vida al estudio de la Algoritmia. Es por ello, que no sólo existe un método para poder llevar a cabo la tarea de ordenar un algoritmo. Muchos métodos son igualmente (o más) eficientes que el Método de Burbujeo Optimizado, obviamente todo esto dependiendo de la circunstancia y entorno donde se aplique. Algunos constan de varias ventajas, otros no. En definitiva, existen infinidad de métodos con sus características que los destacan a cada uno en particular. Entre los más conocidos o clásicos métodos se encuentran el ordenamiento por inserción (Insertion sort), ordenamiento por selección (Selection sort), ordenamiento por árbol binario (Binary tree sort), ordenamiento rápido (Quicksort), etc. a los programas realizados con interfaz gráfica. Empecemos abriendo nuestro editor de texto favorito, como puede ser el gedit, nano, emacs, o vi. Una vez allí, ingresamos lo que se muestra en el Listado 1. Este programa se encarga de declarar un Array o Vector de números enteros, y mostrar los contenidos vistos hasta el momento. Luego de escribir el programa, abrimos un terminal, nos posicionamos sobre el directorio donde guardamos el archivo de texto y ejecutamos el siguiente comando que se encarga de pasarle como parámetro nuestro programa al Scripter de Gambas (puede ser que se necesite permisos de administrador, para ello anteponer el comando sudo): gbs2 ./NombreDelArchivoNumero. En la Figura 3, se muestra una parte de la posible salida del programa. Algoritmos Específicos aplicados a Arrays Existen diversos algoritmos que son ampliamente utilizados en el mundo de la programación, en este caso nos acotaremos a los específicos y más comúnmente vistos que se aplican a los Arrays. Estos algoritmos son los de ordenamien- • to y búsqueda de elementos en un vector. En las secciones siguientes analizaremos los algoritmos • que se mencionan a continuación: FrontEnds para ffplayer Sí, lamentablemente no podremos hacernos ricos con nuestro desarrollo. Existen varios FrontEnds muy buenos desarrollados para ffmpeg que tienen cientos de características que nos serán de utilidad. Entre los más conocidos podemos mencionar a WinFF, Hyper Video Converter, y Movic entre otros. Para más información, visite su sitio web oficial. Búsqueda: Algoritmo de Búsqueda Secuencial. Algoritmo de Búsqueda Binaria, Ordenamiento: método del Burbujeo Optimizado, Listado 2. Implementación del Algoritmo de Búsqueda Secuencial #!/usr/bin/env gbs2 DIM Numeros[9] AS Integer DIM ValorBuscado AS Integer DIM Encontro AS Boolean DIM Posicion AS Integer 'Inicializo Variable Encontro = FALSE 'Inicializo Array como en la Figura 4 Numeros[0] = -6 Numeros[1] = 1 Numeros[2] = 16 Numeros[3] = 20 Numeros[4] = 21 Numeros[5] = 35 Numeros[6] = 37 ¿Qué es un Algoritmo? Podemos definir un algoritmo como “una sucesión finita de pasos bien específicos, no ambiguos y que están relacionados entre sí de una manera sumamente lógica”. Dicho de otra forma, un algoritmo nos indica los pasos que tenemos que seguir para llegar a una determinada meta. Por ejemplo, si nosotros queremos ir de compras al mercado, nuestros pasos serán más o menos así: Primero nos despertamos luego de descansar un largo rato. Segundo, vamos al baño para luego tomar un desayuno. Tercero, terminamos de desayunar y nos vestimos. Cuarto, cogemos dinero y nos dirigimos hacia la cochera. Quinto, encendemos el motor del auto y nos dirigimos hacia el mercado. Como vemos en este ejemplo absurdo, nuestro algoritmo nos indica los pasos a seguir de manera lógica para poder realizar una determinada acción. Este concepto se aplica, en mayor o menor medida, igual en los algoritmos computacionales. 68 66_67_68_69_70_71_72_73_74_75_76_77_78_79_Gambas.indd 68 Numeros[7] = 42 Numeros[8] = 80 PRINT "\n Ingrese el Valor a Buscar: " INPUT ValorBuscado PRINT "\n\n Buscando el Numero " & ValorBuscado & "... \n" 'Empieza el Algoritmo de Busqueda Secuencial WHILE (Posicion < 8 AND Encontro = FALSE) INC Posicion IF Posicion < 8 THEN IF Numeros[Posicion] = ValorBuscado THEN '¡Eureka, hemos hallado el Numero! Encontro = TRUE ENDIF ELSE Encontro = FALSE ENDIF WEND 'Termina el Algoritmo de Busqueda Secuencial 'Verificamos si el valor se encontro IF Encontro = TRUE THEN PRINT "El Valor se encuentra en la Posicion " & Posicion & " del Array" ELSE PRINT "El valor no se encuentra" END IF Linux+ 6/2009 2009-04-14, 14:52 programación Curso de Programación en Gambas Definición de Proceso Básicamente, podemos conocer a un proceso como un sinónimo de programa. Esto no es del todo cierto. Considerando la definición de programa, podemos decir que este es una entidad pasiva, mientras que un proceso es una entidad activa. Cuando un programa pasa de estar pasivo en el código fuente a estar ejecutándose en el CPU, ocupando recursos de este, se lo pasa a denominar proceso. En definitiva y muy burdamente, podemos considerar a un proceso como un programa en ejecución, cuya entidad pasa a ser activa en el momento de su carga en memoria. Por cuestiones de simplicidad, la comprobación práctica de ellos la realizaremos igual que en el modo anterior; es decir, mediante programación de Script Gambas. Búsqueda de Elementos en un Array: Método Secuencial Este método, también conocido como Búsqueda Lineal, consiste en recorrer el Array empezando desde la primera posición, comparando el valor a buscar con el elemento del Array actual, de forma secuencial; es decir, avanzando de a un elemento hasta que el Array se termine. Este método es muy eficiente si el elemento a buscar se encuentra en las primeras posiciones del Array, pero pierde mucha eficiencia y tarda mucho más que la búsqueda binaria, si el elemento se encuentra cerca de la última posición del Array. La búsqueda termina con éxito si el elemento a buscar es encontrado, de lo contrario se debe informar de que el elemento no existe. Como ventaja, no es condición necesaria que el Array se encuentre ordenado para poder realizar la búsqueda, y su implementación y compresión es muy sencilla. Supongamos que tenemos un Array de números enteros de 9 posiciones y deseamos buscar el elemento 46. Este escenario puede apreciarse en la Figura 4. Como vemos, la búsqueda secuencial debe realizar 8 comparaciones hasta llegar al elemento buscado, de un total de 9 comparaciones si se hubiese recorrido todo el Array. ¡Ojo! Si el numero 46 hubiese estado en la segunda posición, la situación sería completamente diferente. Este es un claro ejemplo de la pobre performance que puede llegar a tener este algoritmo. Este mismo escenario puede implementarse en Gambas, tal cual lo muestra el Listado 2. El funcionamiento de este código es muy sencillo. Primero, inicializamos un Array como lo ilustra la Figura 4. Luego, almacenamos en una variable el valor que el usuario quiere buscar. Acto Figura 1. El FrontEnd y el BackEnd trabajando en conjunto seguido, implementamos el método de Búsqueda bucle, se van comparando los valores actuales Secuencial, que simplemente se recorre el Array con el valor a buscar. ¿Sencillo, no? mediante el bucle WHILE hasta que se encuentre Antes de pasar al método de ordenamiento el elemento o se haya llegado al final. Dentro del de Búsqueda Binaria, aprenderemos cómo ordeListado 3. Implementación del Algoritmo de Ordenamiento Burbujeo Optimizado #!/usr/bin/env gbs2 DIM Numeros[4] AS Integer DIM N AS Integer DIM ORD AS Boolean DIM AUX AS Integer DIM I AS Integer 'Inicializo Array como en la Figura 5 Numeros[1] = 1 Numeros[2] = 3 Numeros[3] = 2 PRINT "\n Orden Actual del Array \n" FOR I=0 TO 3 PRINT " [" & Numeros[I] & "] " NEXT 'N es igual al Tamaño del Array N = 4 'Al comenzar, se asume que el Array esta desordenado ORD = FALSE WHILE (ORD = FALSE) ORD=TRUE N = N – 1 FOR I=0 TO N -1 IF (Numeros[I] > Numeros[I+1]) THEN 'Swapping AUX = Numeros[i] Numeros[I] = Numeros[I+1] Numeros[I+1] = AUX ORD=FALSE ENDIF NEXT WEND PRINT "\n\n Orden del Array luego del Metodo de Burbejeo Optimizado \n" FOR I=0 TO 3 PRINT " [" & Numeros[I] & "]" NEXT 69 www.lpmagazine.org 66_67_68_69_70_71_72_73_74_75_76_77_78_79_Gambas.indd 69 2009-04-14, 14:52 programación Curso de Programación en Gambas Listado 4. Implementación Completa del Algoritmo de Búsqueda Binaria " & IndiceCentral & ". \n Salimos de la ' Gambas class file (Seccion de Declaracion) funcion busquedaBinaria...") RETURN TRUE PRIVATE Numeros[9] AS Integer ENDIF PUBLIC SUB verArray() 'Si el Valor Buscado es menor que el DIM I AS Integer elemento central, establece un nuevo valor de Alto 'Cada ves que se llama a esta funcion, se limpia el 'que sera el nuevo SubArray ListView IF (ValorBuscado < Numeros[IndiceCentral]) THEN lstArray.Clear IndiceMayor = IndiceCentral – 1 FOR I = 0 TO 8 ELSE 'Agregamos el valor en el ListView en la Posicion IndiceMenor = IndiceCentral + 1 I. La funcion CStr convierte un Integer en un String 'que es el tipo de dato que pide el primer ENDIF WEND parametro del metodo Add. 'Si nunca se encontro y salimos del While, lstArray.Add(CStr(I), Numeros[I]) retornamos FALSE NEXT RETURN FALSE END PUBLIC SUB ordenarArray() END PUBLIC SUB Form_Open() ' Metodo del Burbujeo Optimizado 'Hasta que no se ordene el Array, no lo habilitamos DIM N AS Integer btnBinaria.Enabled = FALSE DIM ORD AS Boolean 'Inicializo Array DIM AUX AS Integer Numeros[0] = 42 DIM I AS Integer Numeros[1] = 1 'N es igual al Tamaño del Array Numeros[2] = 21 N = 9 'Al comenzar, se asume que el Array esta desordenado Numeros[3] = 20 WHILE (ORD = FALSE) Numeros[5] = 80 ORD = TRUE Numeros[4] = 16 Numeros[7] = -6 N = N – 1 Numeros[8] = 35 FOR I = 0 TO N – 1 verArray() IF (Numeros[I] > Numeros[I + 1]) THEN END 'Swapping PUBLIC SUB btnOrdenar_Click() AUX = Numeros[i] btnOrdenar.Enabled = FALSE Numeros[I] = Numeros[I + 1] 'Mostramos el Array en el ListView, Numeros[I + 1] = AUX ORD = FALSE lo ordenamos y lo volvemos a mostrar ENDIF verArray() NEXT ordenarArray() WEND verArray() END btnBinaria.Enabled = TRUE PUBLIC FUNCTION busquedaBinaria END PUBLIC SUB btnBinaria_Click() (ValorBuscado AS Integer) AS Boolean 'Mantiene el Elemento Central del Array 'Buscamos explicitamente el Numero 42 DIM IndiceCentral AS Integer IF busquedaBinaria(42) = TRUE THEN 'Mantiene el "tope" de los SubArray Message.Info("La busqueda binaria DIM IndiceMenor AS Byte encontro el valor") DIM IndiceMayor AS Byte ELSE IndiceMenor = 0 Message.Error("La busqueda binaria NO IndiceMayor = 8 encontro el valor") WHILE (IndiceMenor <= IndiceMayor) ENDIF 'Determina el Inidice Central (Ver Paso A) 'Finalizamos el Programa IndiceCentral = (IndiceMayor + IndiceMenor) / 2 QUIT 'Si el Valor Central coincide con el Buscado, END retornamos TRUE IF ValorBuscado = Numeros[IndiceCentral] THEN Message.Info("Valor Encontrado en la Posicion 70 66_67_68_69_70_71_72_73_74_75_76_77_78_79_Gambas.indd 70 Linux+ 6/2009 2009-04-14, 14:52 programación Curso de Programación en Gambas nar un Arreglo mediante el Método del Burbujeo Optimizado, ya que esto es condición necesaria para poder implementar la Búsqueda Binaria. Listado 5. Claro ejemplo de Error Lógico IF Numero > 1 THEN Ordenamiento de un Array: Método del Burbujeo Optimizado Message.Info("El Numero es Positivo") ELSE Message.Info("El Numero es Negativo") ENDIF Listado 6. Ejemplo de Error Sintáctico No se utiliza END WHILE, se utiliza WEND WHILE (Paises > 1) INC Contador IF contador < 100 THEN Paises = Paises + 10 EDN IF END WHILE Listado 7. Ejemplo de Error en Tiempo de Ejecución. El programa se interrumpe en el transcurso de su ejecución DIM Arreglo[100] AS Integer DIM I AS Integer FOR I = 0 TO 100 Arreglo[I] = InputBox("Ingrese un Valor: ") Cuando se aprende un lenguaje de programación y se está enseñando los Arrays, el algoritmo preferido para el ordenamiento de un vector es el de “Método de Burbujeo”. En este caso, haremos caso omiso a dicho algoritmo, ya que existe una variable que conserva mucha más performance a la hora de actuar y que puede llegar a consumir muchos menos recursos. Nuestro algoritmo será una extensión del clásico “Método del Burbujeo” al que llamaremos “Método del Burbujeo Optimizado”. Este método, como cualquier otro, permite ordenar un Array de N elementos en orden creciente o decreciente. Su implementación es sencilla, pero requiere de cierto detalle par su compresión. Para ello, examinaremos la Figura 5, en la cual se muestra una representación gráfica de cómo actúa dicho algoritmo. El algoritmo realiza los siguiente pasos: • NEXT • Listado 8. Código que no valida la entrada de datos, propenso a generar una excepción • PUBLIC SUB btnDividir_Click() IF txtNumero1.Text <> "" AND txtNumero2.Text <> "" THEN 'Codigo sin Manejo de Excepciones, propenso a errores Resultado = CFloat(txtNumero1.Text) / Cfloat(txtNumero2.Text) Message.Info("Resultado de la Division: " & Resultado) ENDIF END Listado 9. Uso de CATCH para el Manejo de Excepciones PUBLIC SUB btnDividir_Click() DIM Resultado AS Float IF txtNumero1.Text <> "" AND txtNumero2.Text <> "" THEN Resultado = CFloat(txtNumero1.Text) / Cfloat(txtNumero2.Text) Message.Info("Resultado de la Division: " & Resultado) CATCH 'Si se produce un error, ejecutamos las sentencias que se encuentran en CATCH Message.Error("Error: No es posible dividir por cero") 'Tambien podemos utilizar la Clase Estatica ERROR para describir el Error. Message.Error("Codigo: " & Error.Code & "\n Descripcion: " & Error.Text) ENDIF END • Se empieza a recorrer el Array desde el principio. Compara el elemento N del Array con el siguiente, es decir N + 1. Si el elemento N es mayor que el elemento N + 1, deberán de intercambiar la posición, es decir N = N + 1 y N+1 = N. Se sigue recorriendo el Array hasta que este esté totalmente ordenado. Observemos la Figura 5 y empecemos a analizarla. En un principio se muestra el Array desordenado, con los elementos en el orden de 4 – 1 – 3 – 2 (Ver Figura 5 (A) ). Luego, se realiza la primera comparación, es decir, se compara el elemento 0 con el elemento 1 (Ver Punto 1). Lógicamente, en realidad se comparan los valores 4 con 1. Si el valor 4 es mayor que el valor 1, entonces se deben intercambiar, que es lo que sucede a la izquierda de la Figura 5 (A) (Ver Punto 2). Seguidamente, se procede a comparar los valores de los siguientes elementos del Array. Esto ucede en la Figura 5 (B). Observamos cómo ahora el Algoritmo compara los valores siguientes, empezando no desde el primer elemento, sino desde el último valor que comparó. El Array resultante se puede contemplar en la Figura 5 (B) del lado izquierdo. Estos pasos se realizan hasta llegar al final del Array. Una vez finalizada la primera iteración, podemos observar cómo el Valor 4 del Array se encontraba, en un principio, en 71 www.lpmagazine.org 66_67_68_69_70_71_72_73_74_75_76_77_78_79_Gambas.indd 71 2009-04-14, 14:52 programación Curso de Programación en Gambas la posición 0 del Array, y terminó estando en el último lugar. Este desplazamiento de los valores sobre el Array es el que hace honor al nombre del Algoritmo. Los valores se desplazan hasta llegar a la posición que les corresponde dentro del Array. Si el valor a comparar es cada vez más grande, en posiciones más altas del Array se ubicará. Similar es el desplazamiento de una burbuja dentro de un vaso de gaseosa. El Listado 3 muestra su implementación en Gambas. Primero, inicializamos un Array igual al que se muestra en la gráfica de la Figura 5. Luego, lo mostramos por pantalla. Una vez realizado esto, inicializamos las variables N y ORD. La variable N se encargará de llevar la cuenta de hasta qué posición del Array hay que comparar. Primero, se deberá comparar desde el 0 hasta N – 1, luego desde 0 hasta N – 2, y así sucesivamente. El recorrido de las posiciones del Array se va recortando ya que, como mencioné anteriormente, el valor más alto se va desplazando hasta el final del Array. Una vez que tengamos el valor más grande del Array en la última posición, ya no es necesario hacer comparaciones contra él, pues se sabe que es el elemento más grande. La variable ORD (¿Ordenado?) es una variable del tipo Boolean que actúa como Flag, indicando si el Array sigue desordenado o no. Listado 10. Uso de TRY/ERROR/FINALLY para el Manejo de Excepciones PUBLIC SUB btnDividir_Click() DIM Resultado AS Float IF txtNumero1.Text <> "" AND txtNumero2.Text <> "" THEN 'Ajuntamos junto a TRY la sentencia propensa a errores TRY Resultado = CFloat(txtNumero1.Text) / Cfloat(txtNumero2.Text) 'Verificamos mediante ERROR si TRY capturo un error IF ERROR = TRUE THEN Message.Info("Error: Error: No es posible dividir por cero") ELSE Message.Info("Resultado de la Division: " & Resultado) ENDIF 'Se halla o no producido error, FINALLY siempre se ejecuta FINALLY Message.Info("Fin del Programa") ENDIF END Listado 11. Procedimiento videoToGif, una de los más importantes de nuestro FrontEnd PRIVATE SUB videoToGif() DIM Extension AS String DIM Proceso AS Process Extension = Right$(txtArchivoSalida1.Text, 3) Extension = Lower$(Extension) IF Extension = "gif" THEN IF txtArchivoEntrada1.Text <> "" AND txtArchivoSalida1.Text <> "" THEN Proceso = EXEC ["ffmpeg", "-i", txtArchivoEntrada1.Text, "-pix_fmt", "rgb24", txtArchivoSalida1.Text] Message.Info("Fin del Proceso " & Proceso.Id) txtArchivoEntrada1.Clear txtArchivoSalida1.Clear ENDIF ELSE Message.Error("El Archivo de Salida NO tiene extension GIF") txtArchivoSalida1.Clear END 66_67_68_69_70_71_72_73_74_75_76_77_78_79_Gambas.indd 72 Esta variable es la que marca la gran diferencia con el Método del Burbujeo normal, permitiéndonos así optimizar de manera notable el algoritmo. Se asume que el algoritmoestá desordenado, por lo que se inicializa en FALSE. Luego, nos introducimos en un bucle WHILE, pudiendo salir de él solamente cuando el Array esté ordenado (es decir, cuando ORD = TRUE). Aquí dentro, nos encargamos de recorrer el Array desde la posición 0 hasta la N – 1, esto lo hacemos mediante un bucle FOR... NEXT. Allí, comparamos el valor actual del Array (Numeros[i]) con su siguiente (Numeros[i+1]). Si la condición es verdadera, realizamos lo que se conoce como swapping, que no es más que intercambiar los valores de una posición con la otra y viceversa. Pero ahora bien, aquí nos surge un problema. Para poder intercambiar los valores de una posición con otra, tengo que poder almacenar alguno de estos valores en una variable auxiliar (AUX, en este caso); de lo contrario, cuando asigne Numeros[i] a Numeros[i + 1] no podre asignar Numeros[i+1] a Numeros[i], puesto que estos valores serían iguales, porque se habrían superpuesto. Para ello, utilizamos la variable AUX que hace de contenedor temporal del valor para poder intercambiar los valores. Seguidamente, indicamos al flag ORD que el vector todavía no está ordenado, por lo cual provoca que no salga del bucle WHILE y genere así otro nuevo ciclo de ordenamiento. Esto se repite las veces que sea necesario hasta que el Array esté completamente ordenado. Se recomienda al lector repasar este método y comparar el Código Fuente 3 con la Figura 5, tratando de comprender bien su accionar. Es de mucha utilidad utilizar un lápiz y un papel para intentar recorrer el algoritmo de forma manual. Esto se utiliza mucho en programación, y es lo que se conoce como la Prueba de Escritorio. Búsqueda de Elementos en un Array: Método Binario Ahora bien, ya sabemos cómo ordenar un Array podremos aplicar el Algoritmo de Búsqueda utilizando el Método Binario. Su funcionamiento es básicamente el siguiente: txtArchivoSalida1.SetFocus ENDIF 72 Figura 2. Estructura de un Array Unidimensional Linux+ 6/2009 2009-04-14, 14:52 programación Curso de Programación en Gambas En primera instancia, se compara el dato • buscado con el elemento en el centro del vector: • • Si coinciden, hemos encontrado el dato buscado. Si el dato es mayor que el elemento central del vector, tenemos que buscar el dato en la segunda mitad del vector. Si el dato es menor que el elemento central del vector, tenemos que buscar el dato en la primera mitad del vector. Listado 12. Procedimiento esperandoFinProceso(), que es llamado por videoToGif (Procesos Anidados) PRIVATE SUB esperandoFinProceso(Proceso AS Process) lblEsperando.Visible = TRUE lblTitulo.Text = "Trabajando..." DO WHILE Proceso.State = Process.Running SELECT CASE lblEsperando.Text CASE String$(100, "|") lblEsperando.Text = String$(100, "/") CASE String$(100, "/") lblEsperando.Text = String$(100, "-") CASE String$(100, "-") lblEsperando.Text = String$(100, "\\") CASE String$(100, "\\") lblEsperando.Text = String$(100, "|") CASE ELSE lblEsperando.Text = String$(100, "|") END SELECT WAIT 0.1 LOOP lblTitulo.Text = "FfrontMpeg" lblEsperando.Visible = FALSE END Listado 13. Los dos primeros eventos hacen uso de Dialog PUBLIC SUB txtArchivoEntrada1_DblClick() Dialog.Title = "Abrir Archivo MPEG" Dialog.OpenFile txtArchivoEntrada1.Text = Dialog.Path txtArchivoSalida1.SetFocus END PUBLIC SUB txtArchivoSalida1_DblClick() Como podemos deducir, mediante el paso B y C si el elemento a buscar no se encuentra, los elementos que hay que verificar para ver si son el dato a buscar se reducen a la mitad, ya que solo se verifica una mitad de Array. Es por esta razón que el Método Binario requiere que el Array esté ordenado. Pasemos a observar la Figura 6 para entender este método mejor. En esta gráfica, nos propondremos a buscar el elemento cuyo valor es 42 dentro del Array. Como vemos, de antemano el Array se encuentra ordenado, por ejemplo mediante el Método del Burbujeo Optimizado. Para comenzar a realizar la Búsqueda Binaria, nos posicionamos en el elemento Central del Array, en este caso es el Índice 4, cuyo valor es 21. Luego, verificamos si el elemento central es igual al elemento buscado (Ver Paso A). Si es así, el Algoritmo termina con éxito, de lo contrario, preguntamos si el elemento actual es mayor al elemento buscado. Esta condición se verifica para poder lograr lo que se indica en el Paso B y/o C. Esto provoca el poder descartar una mitad del Array, bajo la lógica de que al estar el Array ordenado, no se encontrara el valor buscado en esa mitad. Paso siguiente, se vuelve a repetir el proceso hasta encontrar el valor buscado (si existe). Pasemos a ver cómo implementar este Algoritmo en Gambas. Al ser condición estar ordenado el Array, primero tendremos que aplicarle el Método del Burbujeo Optimizado y luego implementar el cuerpo de la Búsqueda Binaria propiamente dicha. En este ejemplo, mostraremos el uso de Arrays mediante un programa con interfaz gráfica. Creamos un nuevo proyecto llamado “Binaria”, en el cual colocaremos los siguientes controles: • • • Dialog.Title = "Guardar Archivo GIF" Dialog.SaveFile txtArchivoSalida1.Text = Dialog.Path IF Exist(txtArchivoSalida1.Text) THEN Message.Error("No se puede sobrescribir el Archivo") txtArchivoSalida1.Clear ENDIF Button: Name: btnOrdenar Button: Name: btnBinaria ListView: Name: lstArray El programa completo se muestra en el Listado 4. Dentro de este programa, podemos remarcar estos puntos importantes y de interés: PUBLIC SUB btnGenerar_Click() SELECT CASE TabStrip1.Index CASE 0 videoToGif() CASE 1 secuenciaVideo() CASE 2 convertirWavMP3() END SELECT Figura 3. Posible salida del programa de ejemplo de uso de Arrays END 73 www.lpmagazine.org 66_67_68_69_70_71_72_73_74_75_76_77_78_79_Gambas.indd 73 2009-04-14, 14:52 programación Curso de Programación en Gambas Inicio -6 1 16 20 21 35 37 42 con un numero positivo o negativo. Este, es un claro ejemplo de error lógico de programación. Como podemos observar, el programador está evaluando si la variable es MAYOR que 1, es decir, EXCLUYE al numero 1 de los positivos (evaluara desde el numero 2 en adelante). Esto es un error muy grave de lógica de programación También, podemos observar que si el valor de la variable Numero es CERO, lo toma como negativo, y como todos sabemos esto no es cierto. Estos errores suelen provocarse por un mal diseño de la lógica e inteligencia del sistema y son uno de los errores más difíciles de depurar. Sintácticos: Los errores sintácticos son productos del mal tecleo por parte del programador. Estos errores impiden la compilación del programa y en consecuencia, su ejecución. Comúnmente, el compilador señalará el número de línea donde se encuentra el error. Por esta razón, son fáciles de detectar y corregir. Un ejemplo de ello se encuentra en el Listado 6, donde para terminar una estructura WHILE, se utiliza (mal) END WHILE, en vez de WEND. Otro error es el mal tecleo de la instrucción END IF. Ejecución: La última clase de errores es la de los errores en Tiempo de Ejecución. Estos errores producen un bloqueo o cuelgue del programa, terminando su ejecución de manera inmediata. A estos errores también 80 Fin Figura 4. Búsqueda del numero 46 mediante el Algoritmo de Búsqueda Secuencial • • Podemos observar que se repite muchas veces, pero en módulos distintos, la declaración de la variable I. Esto se puede hacer, gracias a que cuando se utiliza esta variable en, por ejemplo, una función, y se declara dentro de ella, una vez finalizada la función la variable muere y puede ser utilizado el mismo nombre (puesto que no es la misma variable). Todo esto tiene una explicación técnica mucho más compleja, que sobrepasa el alcance de este Curso. También podemos observar el comportamiento del Control ListView. En su método Add, que nos sirve para agregar un elemento al ListView nos pide como primer argumento el Índice en el cual queremos agregar un Valor. Se puede deducir que el Control ListView es un Array Gráfico, que posee propiedades y métodos en particular. Como ejemplo, posee la opción de poder ordenar automáticamente el ListView a medida que se agregan los valores en él (Ver Barra de Propiedades, la propiedad Sort). El Algoritmo de Búsqueda Binaria es sumamente simple. Se van realizando los Pasos descritos anteriormente, y se va ajustando el Array para poder descartar parte de este donde es seguro que no estará el valor a buscar. Este ajuste se logra limitando los extremos del Array (Ver variables InidiceMenor e InidiceMayor) dependiendo de si el valor a buscar es mayor o menor del elemento central. El Resultado de le ejecución del Programa se muestra en la Figura 7. Se recomienda al lector repasar este algoritmo junto a la explicación gráfica. También se sugiere modificar el código fuente para alterar su comportamiento y poder así entender mejor el porqué de el porqué de su funcionamiento. Control de Excepciones utilizar excepciones — desde serios problemas de hardware, como la avería de un disco duro, a los simples errores de programación, como tratar de acceder a un elemento de un Array fuera de sus límites. Comúnmente, los errores • que pueden captar las excepciones no son todas las clases de errores (Por ejemplo, si el cabezal del disco duro se daña, un simple manejo de excepciones con Gambas no podrá hacer nada al respecto). En materia de programación, los errores se dividen en tres clases fundamentales: • Lógicos: Los errores lógicos son los que aparecen en la aplicación, una vez que está funcionando. Estos errores no permiten que el programa no se ejecute, pero sí provocan que lo hagan de una manera • en la cual arrojen resultados inesperados. Por ejemplo, consideremos el Listado 5. Aquí, se está evaluando el valor de la variable Numero para ver si esta corresponde Primera Iteracion A 4 1 3 2 1 4 3 2 B 1 4 3 2 1 3 4 2 C 1 3 4 2 1 3 2 4 3 2 4 Segunda Iteracion D 1 3 2 4 1 En este apartado, abordaremos el manejo y control de Excepciones, pero para empezar definiE 1 3 2 4 1 2 3 remos qué es una excepción. Una excepción es un evento que ocurre durante la ejecución del programa que interrumpe el flujo normal de las sentencias. Muchas clases de errores pueden Figura 5. Algoritmo de Ordenamiento: “Método del Burbujeo Optimizado” 74 66_67_68_69_70_71_72_73_74_75_76_77_78_79_Gambas.indd 74 n-1=3 Linux+ 6/2009 2009-04-14, 14:52 n-1=2 4 programación Curso de Programación en Gambas se los conoce como Errores Fatales, ya que una vez que se producen, no se puede hacer nada para recuperar la instancia del programa. Un ejemplo de ellos puede ser que se quiera acceder a un índice más alto del que posee un Array. Esto se ilustra en el Listado 7, donde queremos acceder al Índice 100 del Arreglo, siendo que este tiene desde 0 a 99 posiciones. TRY.. CATCH.. FINNALY. Veamos el uso de mos un programa que tenga que dividir númecada una de estas sentencias: ros, es imprescindible colocarle una rutina de control de errores. Consideremos el programa • TRY: Se utiliza para proteger al código que que se muestra en la Figura 8 cuya codificación sea susceptible de error. se encuentra en se encuentra en el Listado 8. • CATCH: Las instrucciones que la prosiguen Este código no verifica el famoso error de solo se ejecutan si se ha producido un División por Cero. Por ejemplo, si como primer error. Si existe una instrucción FINALLY, número ingresamos 10 y como segundo número ha de colocarse delante de CATCH. ingresamos 0, el programa romperáy finalizará • FINNALY: Las instrucciones que la prosi- inmediatamente (error fatal). Para solucionar guen han de ejecutarse siempre, se haya este inconveniente del código que puede llegar producido o no error. a generar una excepción, nos valemos de las sentencias TRY, CATCH, y FINALLY. El Listado Se puede verificar si se ha producido un error 9, muestra la versión del programa que hace consultando el valor de la sentencia ERROR. Pasemos a validar este tema con un ejemplo clásico: El error de la División por Cero. Para el común de la gente (y de las computadoras), la división por cero es un error. Siempre que haga- Como bien mencionamos antes, Gambas no puede manejar todos los tipos de errores, por una cuestión lógica. Para las que sí puede manejarlos y controlarlos son para las excepciones del Tipo en Tiempo de Ejecución, que mediante una simple rutina, protegemos a un bloque de código en que sea factible que se produzca un error. Esta rutina que envolverá a nuestro bloque de código está compuesta por la estructura Busqueda Binaria (Total Comparaciones) Inicio -6 1 16 20 Si 21 35 37 42 80 35 37 42 80 21=42 No Fin -6 1 21>42 16 20 21 Si 21=42 No Fin 21>42 Figura 7. Ejecución del Proyecto “Binaria” 35 37 42 80 Fin Figura 8. Programa de ejemplo para demostrar el Manejo de Excepciones Figura 6. Algoritmo de Ordenamiento: “Método Binario” 75 www.lpmagazine.org 66_67_68_69_70_71_72_73_74_75_76_77_78_79_Gambas.indd 75 2009-04-14, 14:52 programación Curso de Programación en Gambas uso correcto de Manejo de Excepciones. Otra versión del uso de Manejo de Excepciones, puede verse en el Listado 10. Introducción a la creación de FrontEnds Como explicamos al comienzo de esta entrega, los FrontEnd son la cara visible de nuestras aplicaciones. Con Gambas, podemos manipular los procesos correspondientes a los BackEnd para que puedan interactuar de una manera fácil y cómoda con el FrontEnd. En esta sección, abordaremos la creación de un sencillo FrontEnd del famoso programa ffmpeg. El logo que identifica el programa puede verse en la Figura 9. Ffmpeg es una completa herramienta para la manipulación y procesamiento de audio y vídeo. El proyecto originariamente fue desarrollado para GNU/Linux, aunque actualmente puede utilizarse en la mayoría de los Sistemas Operativos, incluso Windows. El Proyecto está compuesto por un amplio abanico de herramientas, donde entre las más importantes se encuentran las siguientes: • • • ffmpeg: es una herramienta de línea de comandos para convertir un vídeo de un formato a otro. También puede capturar y codificar en tiempo real desde una tarjeta de televisión. ffserver: es un servidor de streaming multimedia de emisiones en directo que soporta HTTP (la compatibilidad con RTSP está en desarrollo). Todavía no está en fase estable. ffplay: es un reproductor multimedia basado en SDL y las bibliotecas FFmpeg. Figura 10. Aspecto de nuestro FrontEnd “FFrontMpeg” mente nos dirigimos a nuestra querida consola de GNU/Linux y tecleamos sudo apt-get install ffmpeg ¡Listo! Automáticamente se nos descargará ffmpeg y se configurará para poder empezar a usarlo. La descarga e instalación ocupan aproximadamente 1300Kb. Conociendo ffmpeg Características de FFrontMpeg Creación de Imagen GIF a partir de un vídeo Para poder realizar las características antes mencionadas, nos hace falta conocer la sintaxis con la cual ffmpeg se maneja. A continuación, presentamos los comandos que utilizaremos al interactuar ffmpeg con FfrontMpeg. Antes de implantar nuestro FrontEnd de ffmpeg, al que he bautizado FFrontMpeg, pre- ffmpeg -i video.mpeg -pix_fmt rgb24 sentaremos las características que este sopor- imagen.gif tará: Aquí le indicamos a ffmpeg que tome como en• Creación de Imagen GIF a partir de un trada el parámetro video.mpeg y cree una imavídeo: Útiles para hacer Avatares de Foros gen GIF con ese archivo, llamada imagen.gif. o querer tener un vídeo que ocupe poco Mediante la opcion -pix_fmt rgb24 le indicamos que la imagen resultante tome un formato espacio. • Obtención de Secuencias de Imágenes a de píxeles RGB24. partir de un Vídeo: Útil para poder tener Instalando ffmpeg un preview del vídeo en cuestión, para po- Obtención de Secuencias Para poder crear un FrontEnd de ffmpeg es conder luego, por ejemplo, subirlo a internet. de Imágenes a partir de un Vídeo dición necesaria tenerlo instalado. Si no dispo- • Conversión de WAV a MP3: Útil para tener nemos de ffmpeg en nuestro ordenador, simpleun archivo de audio con menor tamaño, ffmpeg -i video.avi imagenes%d.jpg y poder almacenarlo por ejemplo, en un En este lugar, le indicamos a ffmpeg que tome Reproductor de MP3 o en un Sitio Web. como entrada el parámetro video.avi y que Como vemos, nuestro programa tendrá caracte- genera una salida de imágenes del vídeo, cuya Figura 9. Logo de ffmpeg secuencia será imagenes%d.jpg. El valor de %d rísticas con orientación a la web. En nuestro FrontEnd nos valdremos de la utilización de ffmpeg. Como vemos en su descripción, claramente nos indica que es una utilidad de línea de comandos, por lo cual nosotros seremos los encargados de realizar la interfaz gráfica que interactúe con la aplicación. Por razones de espacio y tiempo, solamente desarrollaremos la GUI para un conjunto limitado de opciones disponibles de ffmpeg, ya que este trae muchas y no podríamos abarcarlas todas en una sola entrega. 76 66_67_68_69_70_71_72_73_74_75_76_77_78_79_Gambas.indd 76 Linux+ 6/2009 2009-04-14, 14:52 programación Curso de Programación en Gambas Tabla 1. Propiedades y Métodos de la clase Dialog Nombre Descripción Tipo Filter Filtrado de Archivos (por ejemplo, solo GIF) Propiedad Font Fuente utilizada en el Cuadro Propiedad OpenFile Llama al Cuadro de Dialogo de Abrir Archivo Metodo SaveFile Llama al Cuadro de Dialogo de Guardar Archivo Metodo SelectColor Llama al Cuadro de Dialogo de Seleccionar Color Metodo SelectDirectory Llama al Cuadro de Dialogo de Seleccionar Directorio Metodo SelectFont Llama al Cuadro de Dialogo de Selecionar Fuente Metodo Title Indica el Titulo contendra el Cuadro de Dialogo Propiedad será reemplazado por el número de secuencia recibe como parámetro un proceso, y devuelve de la imagen. el descriptor de proceso. Este descriptor lo captaremos en un objeto de la Clase Process para Conversión de WAV a MP3 poder ir determinando su comportamiento. A lo largo del desarrollo del programa iremos viendo fmpeg -i original.wav -ab 32 -ar 44100 algunas propiedades de la clase Process. La sinsalida.mp3 taxis de EXEC se muestra a continuación: Aquí, como vemos, especificamos varios parámetros. En primera instancia, el parámetro original.wav es la entrada para la posterior salida del archivo salida.mp3. Dentro de este comando especificamos algunos argumentos. -ab 32 indica que el bitrate del archivo será de 32 kbps. Por último, el argumento -44100 indica que el archivo de salida tendrá una frecuencia de 44100Mhz. Estos parámetros pueden omitirse para que tomen el valor por defecto. Nota: La opción -i que se especifica en todos los comandos, indica cuál será el archivo de entrada (Input). Para todos estos comandos existen varios parámetros. Por ejemplo, a la hora de crear secuencias de imágenes a partir de un vídeo, puede configurarse en tiempo entre cada imagen que va a ser captada. Por cuestiones de simplicidad y objetivos de este artículo, dichas opciones quedan como tarea al lector investigarlas y de querer así, poder implementarlas en el FrontEnd. Una vez conocidos los comandos con que nos vamos a manejar, ya estamos listos para crear la GUI del programa e interactuar con ffmpeg. La Clase Process y el Comando EXEC Para poder manipular procesos, Gambas nos provee una clase llamada Process. Gracias a ella, podemos sincronizar la ejecución de dos programas (el FrontEnd y el BackEnd), comunicarse entre sí leyendo y escribiendo la entrada y salida estándar, conocer el estado de ejecución, y recibir mensajes de error. Esta clase nos provee de varias propiedades y métodos que nos serán de utilidad a la hora de manejar procesos. La clase Process hace de contenedor del proceso, mientras que el encargado real de ejecutar el proceso es la sentencia EXEC. Este comando [ObjetoProcess =] EXEC [Comando] [ParametroN] [WAIT] (FOR (READ | WRITE | READ WRITE ) [TO String] Para que los parámetros sean más legibles, EXEC requiere que estos se pasen como un Array de Strings. Por ejemplo, para ejecutar el comando ls -al, tendríamos que llamar a EXEC de la siguiente manera: EXEC ["ls", "-al"] archivo MP3, ffmpeg nos muestra muchos datos acerca de cómo se está realizando la conversión. Al ejecutar EXEC sin la redirección con TO, estos datos nunca los veríamos, con lo que la salida de ffmpeg se perdería. En nuestro caso, la salida “de texto” de ffmpeg no nos sería de tanto interés, ya que en este ejemplo lo que en realidad buscamos es que nos genere el archivo MP3. A continuación, se muestra un ejemplo del uso de TO: DIM Buffer AS String EXEC ["who", "-r"] TO Buffer message.info("Runlevel del Sistema: " & Buffer) Por último, el uso de READ o WRITE simplemente indican si el proceso será sólo para lectura, sólo para escritura o ambos casos. Su uso no es obligatorio. El Comando SHELL Para la manipulación de Procesos, Gambas nos provee de otro comando de utilidad, con ligeras diferencias con EXEC: El Comando SHELL. Este comando lo que hace es lanzar un Shell o intérpretes de comandos del sistema, comúnmente BASH, y se le pasa el comando en cuestión como una cadena de caracteres continua. Esto permite, por ejemplo, darle instrucciones del tipo cd o export que son parte de BASH y no comandos independientes. También se pueden usar pipes y comandos de redirección del tipo 2>, >, <, tee, etc. La sintaxis de SHEEL es la siguiente: El parámetro Comando es el único que se nece- [ObjetoProcess =] SHELL [Comando] [WAIT] sita como obligatorio. La palabra clave WAIT, se (FOR (READ | WRITE congelará hasta que este termine. Contemple| READ WRITE ) mos el siguiente ejemplo: EXEC ["rm", "-rf", "$HOME"] WAIT message.info("Ha finalizado el Borrado del Directorio Home") Aquí, un directorio como HOME contiene todos los archivos del usuario en cuestión. Si nosotros ejecutamos esta instrucción SIN el uso de WAIT, el comando EXEC empezará a borrar todos los archivos del directorio HOME pero inmediatamente mostrará el mensaje de que ha finalizado el borrado, y esto no es cierto, ya que el comando que se encuentra dentro de EXEC seguirá trabajando hasta que finalice su ejecución. Es por ello que en estos casos, es recomendable el uso de WAIT, siempre y cuando se le informe al usuario de que el comando está realizando su labor. El uso de TO en una sentencia EXEC, lo que hará es redireccionar la salida que produzca el proceso que se está ejecutando. Por ejemplo, a la hora de convertir un archivo WAV en un No abordaremos en particular el uso de SHELL, puesto que es muy similar a EXEC, siendo este último desde mi punto de vista más potente. Diseñando la GUI Bien, ya estamos con todos los conocimientos necesarios para la creación de nuestro primer FrontEnd. A lo largo del diseño, explicaré el concepto y cómo se manipulan los procesos en Gambas. Esto nos servirá para poder controlar el ffmpeg desde nuestro FrontEnd. El diseño de la GUI de FFrontMpeg se muestra en la Figura 10. Es un diseño sencillo, pero que nos será de utilidad y bastará para realizar las tareas que nuestro programa tendrá a cargo. En la imagen se ven tres capturas de pantallas diferentes, pero muy similares. Esto es porque para la creación del FrontEnd, se utiliza el control TabStrip, donde podemos tener una especie de múltiples formularios dentro del 77 www.lpmagazine.org 66_67_68_69_70_71_72_73_74_75_76_77_78_79_Gambas.indd 77 2009-04-14, 14:52 programación Curso de Programación en Gambas mismo, manejados mediante pestañas. Con el control TabStrip podemos generar aplicaciones al mejor estilo Mozilla Firefox. ¡No hay que confundirse, no son tres formularios diferentes, sino que son tres pestañas diferentes! Para este diseño, nos harán falta los siguiente controles: • • • • • • las propiedades se reinician. En realidad lo que sucede es que por cada pestaña, el control toma valores distintos, independientemente de cada pestaña en particular. Así, si queremos ponerle la propiedad Text con el valor Conversión WAV a MP3, primero tenemos que seleccionar la pestaña a la que le queremos aplicar el texto, y luego ingresarlo. Las imágenes que se muestran en el programa son descargadas de Internet. Cada programador es libre de elegir la imagen que desee, o de diseñar su propia GUI para el FrontEnd; pero si quieres que tenga las mismas imágenes que el ejemplo, envíame un email a jorge.capurro@li nuxmail.org. Una vez terminada la Interfaz Gráfica del programa, podemos empezar a programar sus funciones. El funcionamiento genérico de cada una de ellas será el siguiente: Control TabStrip, que se encuentra en la Categoría Container del Cuadro de Controles. La propiedad Count indica la cantidad de pestañas, por lo cual tendremos que asignarle el valor 3. TextBox, que se llamarán txtArchivoEntradaX, donde X es el numero de Pestaña del TabStrip (por ejemplo, el primero se llamaria txtArchivoEntrada1). Controles TextBox, que se llamarán txtArchivoSalida1 (Pestaña 1, Conversión Video a Imagen GIF) y txtArchivoSalida3 (Pestaña 3, Conversión WAV a MP3). • Control Buttom, llamado btnGenerar. Este botón será ÚNICO para todas las conversiones y, dependiendo en qué pestaña esté el usuario, realizará la acción correspondiente. Varios Controles Labels. Uno de los label se llamará lblEsperando, con propidad VISI- • BLE en FALSE, y se encontrará a la izquierda del Botón btnGenerar. Otro se llamará lblTitulo y tendrá el texto FFRontMpeg. Todos los TextBox tienen que tener su • propiedad READONLY en TRUE (Para que el Usuario no ingrese por error rutas de archivo invalidas). El usuario hace doble clic sobre el primer TextBox (Archivo de Entrada). Automáticamente, se aparecerá un Cuadro de Dialogo pidiendo que seleccione un Archivo en particular de audio o vídeo, según sea la ocasión. Luego, el usuario hace doble clic sobre el segundo TextBox e ingresa el nombre de Archivo de Salida (con su correspondiente extensión, por ejemplo foto.gif). Como paso final, el usuario hace click sobre el botón ¡Generar! y espera a que concluya el proceso. Desarrollando la Aplicación Final Podemos notar que en tiempo de diseño, al se- ¡Dejémonos de hablar y comencemos a prograleccionar distintas pestañas del control TabStrip, mar! En este apartado, desarrollaremos TODA Figura 11. Resultado de la llamada a Dialog 78 66_67_68_69_70_71_72_73_74_75_76_77_78_79_Gambas.indd 78 la funcionalidad necesaria para poder convertir un vídeo en un archivo de animación GIF. Con los temas desarrolladores de este articulo, el lector estará lo suficientemente capacitado como para poder desarrollar las otras dos funciones por cuenta propia (La de Conversión de WAV a MP3 y la de Generación de imágenes a partir de un vídeo) y de, si quiere, poder desarrollar FrontEnds de varias aplicaciones GNU/ Linux. Se propone al lector como reto personal agregarle más funcionalidades al FrontEnd. En primera instancia, nos ocuparemos de desarrollar el procedimiento más importante ahora: videoToGif. Esta función, como su nombre claramente indica, se encargará de tomar el archivo que se encuentra en el TextBox txtArchivoEntrada1, convertirlo a imagen GIF, y generar su salida como lo indica el TextBox txtArchivoSalida1. Aquí desarrollaremos la troncal principal de nuestra primera característica del FrontEnd. Todo el desarrollo de esta función se muestra en el Listado 11. Analicemos este Código. En primer lugar, se declara una variable del tipo String llamada Extensión y un objeto del tipo Process llamado Proceso. A partir de allí, mediante la función $RIGHT obtenemos los últimos 3 caracteres que se almacenan en el TextBox txtArchivoSalida1, para almacenarlo en la variable Extensión. Luego, verificamos que estos tres carácteres correspondan con la extensión GIF. Esto lo hacemos para validar que el archivo que se haya seleccionado como Salida sea un archivo GIF; de lo contrario nuestro proceso generará un error al querer convertir el vídeo a dicha extensión de imagen. Una vez validada la entrada del Archivo de Salida y verificado que los TextBox no estén vacíos, es decir, que se hayan seleccionado los archivos, se procede a llamar al proceso mediante la la sentencia EXEC pasándole los parámetros correspondientes (Ver apartado Conociendo ffmpeg y La Clase Process y el Comando EXEC) . Observe como NO se hace uso de WAIT, pese a que este proceso puede tardar. Al contrario, se hace uso de un procedimiento personalizado que llamamos esperandoFinProceso(), el cual recibe un objeto del tipo Process. El desarrollo de esta función lo veremos más adelante, por ahora basta decir que sirve para “entretener” al usuario mientras se realiza el proceso de conversión. Una vez terminada la tarea, se le informa al usuario que el proceso ha finalizado, indicando el número de identificación de este (PID) que se almacena en el campo ID del objeto Proceso (Ver cuadro Los Comandos PS y TOP ). Por último, se vacían los TextBox utilizados. Listo, ya tenemos nuestra primera funcionalidad realizada. Linux+ 6/2009 2009-04-14, 14:52 programación Curso de Programación en Gambas Como vemos, es muy sencilla la manipulación de procesos para la creación de FrontEnds, aunque todavía aprenderemos una característica más de nuestra apreciada Clase Process. Para que este procedimiento quede totalmente terminado, falta describir la codificación del proceso esperandoFinProceso(). Su implementación se muestra en el Listado 12. Aquí, se recibe un objeto del tipo Process para trabajar con el. Luego, modificamos el texto de nuestro lblTitulo para que indique que ahora se está trabajando en la tarea especificada por el usuario. También, hacemos visible al label lblEsperando, para que pueda mostrar lo que incluiremos en él a continuación. Se utiliza un bucle DO... WHILE que verifica que el estado del proceso (Proceso.State) esté en ejecución (Proceso.Running), es decir, que esté trabajando. Mientras que esto sea verdadero, ejecutamos la “pseudoanimacion” que hemos creado dentro del bucle. La función $STRING se encarga de repetir la cadena de texto la cantidad de veces que se le pase como parámetro. Por ejemplo, la instrucción $STRING(5,“Linux+”) generará la cadena Linux+Linux+Linux+Linux +Linux+. Mediante la estructura SELECT CASE, verificamos cuál es el texto que se encuentra actualmente cargado en el txtEsperando. Dependiendo del texto que haya, lo vamos modificando según el tiempo que especifica WAIT, generando así un efecto de animación. Una vez que el proceso haya finalizado y, por ende, se salga del bucle, restauramos los valores de los Labels a su original, y regresamos al procedimiento videoToGif, realizando las tareas que anteriormente describimos. Estos dos procedimientos deben estar en la sección de Declaraciones de nuestro formulario. Si el lector lo desea, puede almacenarlos en un módulo para su mayor compresión. De ser así, recuerde que debe llamarlos desde el FMain mediante NombreDeModulo. Procedimiento Es muy sencillo su uso. En primer lugar, asignamos el título al Cuadro de Dialog. En el primer caso, es “Abrir Archivo GIF”. Luego, llamamos al cuadro de diálogo, que se muestra en la Figura 11. Cuando el usuario selecciona un archivo, la ruta del mismo (PATH) se almacena en txtArchivoEntrada1, que posteriormente será utilizado como parámetro del comando EXEC. Aquí, se podría haber utilizado la propiedad Filter, para que sólo muestre los archivos GIF. No se ha hecho para que el lector vea cómo pueden solucionarse problemas de distintas formas (por ejemplo, con el uso de funciones como $RIGHT). En el Listado 13 se muestra por último el evento Clic del btnGenerar. Este botón, como dijimos anteriormente, realizará la tarea que le corresponda según en qué pestaña se encuentre. Para verificar esto, consultamos el valor de INDEX (de índice) del TabStrip. Las pestañas se numeran desde Cero hasta N, siendo N la cantidad de pestañas que contenga, especificada en la propiedad Count del control. Observe que en este código también se mencionan los procedimientos secuenciaVideo() y convertirWavMP3(). ¡Queda como tarea para el lector terminar la totalidad de las funciones del programa, agregarle más funciones (si lo desea), empaquetarlo, crear el instalador y luego enviármelo a mi dirección de correo! Ejercicios Propuestos Se deja al lector una serie de ejercicios para que pueda practicar los temas vistos en esta entrega. • • Últimos Retoques.. Finalmente, nos queda la tarea de poder introducir los archivos de entrada y salida correspondientes. Para ello, como bien aclaramos antes, haremos uso de los cuadros de dialogo de que nos provee Gambas, valiéndonos de la clase estática Dialog. Esta clase, contiene unas pocas propiedades y métodos que nos serán de muchísima ayuda para conseguir que el usuario seleccione un archivo de manera cómoda. Las propiedades y métodos de ella se listan en la Tabla 1. Esta clase la utilizaremos en los eventos Doble Clic de los TextBox txtArchivoEntrada1 y txtArchivoSalida1, tal y como se muestra en el Listado 13. Este Código, genera lo que se muestra en la Figura 11. • • • • Buscar e Implementar en Gambas algoritmos de Ordenamiento que no se hayan visto aquí. Comprobar la eficiencia de cada uno, ventajas y desventajas. Sacar conclusiones. Crear un programa que se encargue de introducir el Nombre y Teléfono de 1000 personas, y luego ordenarlo mediante Nombre en forma decreciente. Investigar el uso de Arrays o Vectores apareados, para poder tener tipos de datos distintos en correspondencia válida. Pensar, diseñar y programar un FrontEnd para el uso de APT en Ubuntu. Investigar las propiedades y métodos de la clase Dialog. Implementarlas en un ejemplo real. Agregar al Editor de Texto realizado en la Entrega Nº2 del Curso, la posibilidad de Abrir/Guardar un archivo mediante Cuadros de Dialogo. Mediante la función $RIGHT, hemos validado la entrada del txtArchivoSalida1. Puede comprobar el lector que, si en el txtArchivoEntrada1 introduce un archivo que NO es un vídeo, el programa fallará. Se le • • propone al lector validar la entrada de este archivo, de la manera que le sea más conveniente (mediante la propiedad Filter en el Dialog, o haciendo uso de RIGHT para verificar la extencion del Archivo). Intente desarrollar un Algoritmo que se encargue de desordenar un Array especifico. Se recomienda investigar el uso de Vectores Apareados para poder desordenar ordenando. Si conoce el Lenguaje de Programación C, realizar un programa en el que se encargue de, por ejemplo, recibir un número como parámetro y que retorne su factorial. Mediante el uso de EXEC, realizar el FrontEnd del programa en Gambas en el cual llame a su programa de calculo de factorial y lo muestre en pantalla. Se recomienda al lector realizar los ejercicios con el fin de poder fijar y realizar la prácticas de los temas estudiados. Consideraciones Finales En esta entrega del curso hemos desarrollado una cantidad considerable de temas, como lo son los FrontEnds, Arrays, Algoritmos de Ordenamiento, Algoritmos de Busqueda, manipulación de procesos, Cuadros de Diálogos, Scripts, etc. Todos estos conceptos son muchos para captarlos de una sola vez. Es por ello que es recomendable repasarlos sin dejar ningún detalle de imprevisto. Recuerda que siempre puedes consultar tus dudas a [email protected], trataré de responderte lo más claro y rápido posible. Esto es todo por hoy. Nos vemos en la próxima entrega del Curso. ¡Hasta la Vista! Sobre el autor Jorge Emanuel Capurro es estudiante de la Tec. Superior en Programación, carrera dictada en la Universidad Tecnológica Nacional - Facultad Regional Haedo, provincia de Bs As, Argentina. Principalmente, su área de investigación se centra en los Sistemas Operativos de tipo UNIX y de la programación bajo esta plataforma. Es el creador del proyecto IDEas (http://ideasc.sourceforge.net), que es el primer frontend desarrollado bajo Gambas del compilador gcc (http://gcc. gnu.org), que se utiliza con fines didácticos. Actualmente realiza funciones de programador para la empresa IBM Argentina en el departamento de Applications Management Services, participando de diversos proyectos de desarrollo de software de carácter internacional. 79 www.lpmagazine.org 66_67_68_69_70_71_72_73_74_75_76_77_78_79_Gambas.indd 79 2009-04-14, 14:52 programación Programando RIA con Flex y AMFPHP Aplicaciones de Internet Enriquecidas (RIA): Programando RIA con Flex y AMFPHP Matías Barletta [email protected] ¿Qué programador no quisiera darle a sus usuarios la mejor experiencia de uso, una herramienta intuitiva, fácil de usar y que tenga los beneficios de las aplicaciones web? Además, que el desarrollo e implementación sea sencillo y... placentero. A unque muchos de nosotros quisiéramos esto, no todos tenemos la experiencia y el dominio de las herramientas que hacen eso posible. Sin embargo hoy por hoy las Aplicaciones de Internet Enriquecidas (RIA por sus siglas en inglés) y sus herramientas de desarrollo se convirtieron en una muy buena opción para las empresas y desarrolladores que buscan brindar los beneficios de las aplicaciones online sin perder mucho de los privilegios de las aplicaciones de escritorio. Hoy en día podemos desarrollar aplicaciones en línea que tienen muchos de los privilegios que antes estaban reservados a las aplicaciones de escritorio, como cortar, pegar, arrastrar, redimensionar, accesos multimedia, etc. En este artículo exploraremos el desarrollo de una aplicación de Internet enriquecida utilizando una plataforma conocida como Flex. ¿Qué son las RIA? Anteriormente a la aparición de las RIA, las aplicaciones Web cotidianas y que aún se ven por la web en demasía, son aplicaciones que necesitan recargarse constantemente, utilizan sólo HTML/DHTML y un poco de Javascript, y ustedes pueden ver que son menos ágiles o más lentas para el uso. El 80 80_81_82_83_84_85_Flex ver2.indd típico caso son los formularios donde uno escribe el contenido y finalmente hace clic en enviar, donde se vuelve a cargar otra página para así seguir el proceso sucesivamente. Estas aplicaciones típicamente no tienen la capacidad de aprovechar el copy / paste de objetos de la página, tampoco pueden interactuar con la webcam ni el audio del equipo y ni hablar de arrastrar objetos para interactuar con la aplicación. Para ver esto más claro podemos utilizar la opción HTML básico en Gmail, que hará que todas las funcionalidades RIA comunes a Gmail desaparezcan -chat, corrector ortográfico, combinación de teclas, entre otros-. Podrán también apreciar que cada acción tendrá que ser procesada y la página recargada por cada operación. En contraste con esto, las RIA (por lo general) son aplicaciones que se descargan casi completamente al iniciarse. Esto evita la necesidad de que se recargue cuando queremos ejecutar alguna acción. Ahora bien, en este punto ya pueden imaginarse a una gran aplicación RIA como Gmail o Google Docs. En estas aplicaciones ustedes no tienen que esperar la recarga de todo el sitio para desarrollar una acción. Si seguimos con este ejemplo de Gmail, podemos ver que tiene la capacidad de Linux+ 6/2009 80 2009-04-14, 14:53 programación Programando RIA con Flex y AMFPHP arrastrar y soltar los applets de contactos, calendario, documentos, etc. Se pueden mover estos applets dentro de Gmail sin necesidad de que se recargue todo el sitio, ubicarlos en otra parte, interactuar con ellos y/o deshabilitarlos. También pueden ver que esta aplicación recientemente comenzó a interactuar con la cámara web, permitiendo hacer vídeo chat desde el explorador, lo cual es una gran hazaña para una aplicación web (lamentablemente aún no está disponible para nosotros, los usuarios de Linux). En definitiva, tenemos una aplicación muy ágil con acceso a funciones multimedia, que no consume mucho ancho de banda (no recarga todo el sitio -y sus imágenes- varias veces), que es visualmente más atractiva y el usuario se siente más cerca de la funcionalidad de una aplicación de escritorio. Con este ejemplo de Gmail puede verse donde la misma aplicación está desarrollada de manera básica o avanzada (RIA) y podemos sentir la diferencia en prestaciones, comodidad, agilidad y simpleza. La tecnología que usa Google en la mayoría de sus aplicaciones se conoce como AJAX o Javascript Asíncrono y Xml. Google es quizás el que más ha impulsado esta tecnología, han realizado muchas aplicaciones, extensiones y utilidades para facilitar la utilización de esta tecnología AJAX. Por último, vamos a ver un resumen de otras ventajas (Wikipedia): • • • • • • • No necesitan instalación (solamente es necesario mantener actualizado el navegador web). Las actualizaciones hacia nuevas versiones son automáticas. Se pueden utilizar desde cualquier ordenador con una conexión a Internet sin depender del sistema operativo que éste utilice. Generalmente, es menos probable la infección por virus, que utilizando por ejemplo programas ejecutables. Más capacidad de respuesta, ya que el usuario interactúa directamente con el servidor, sin necesidad de recargar la página. Ofrecen aplicaciones interactivas que no se pueden obtener utilizando sólo HTML, incluyendo arrastrar y pegar, cálculos en el lado del cliente sin la necesidad de enviar la información al servidor. Evita la problemática del uso de diferentes navegadores al abstraerse de ellos a través de un framework. Como pueden ver, no son pequeñas las ventajas relacionadas con las RIA contra las aplicaciones de escritorio o aplicaciones web antiguas. El solo hecho de que no necesiten instalación y/o actuali- zación elimina mucho gastos y dolores de cabeza a cualquier administrador de sistemas. En resumen y para terminar la idea, las RIA son la evolución de las aplicaciones de Internet, que intentan asemejarse a las aplicaciones de escritorio al mismo tiempo que mantienen las cualidades de las aplicaciones Web, pueden tener básicamente la misma apariencia pero son más complejas y ofrecen mayor funcionalidad. Tecnologías de RIAs: AJAX y FLEX Ahora que ya sabemos bien qué es una RIA, vamos a hablar sobre la tecnología disponible para realizar estas aplicaciones. Existen 2 grandes corrientes en el desarrollo de RIA, una es mediante AJAX y la otra utilizando tecnología basada en Flash conocida como Adobe Flex. En el caso de AJAX verán que no es algo muy distinto a lo que hacían con HTML y Javascript, mientras que Adobe Flex puede ser para varias personas un cambio radical. ¿Cuál es mejor? Como siempre, depende de qué se quiera hacer y cuál sea el objetivo. Para una aplicación como Gmail es difícil imaginárselo en Flex, pero también Flash es increíblemente poderoso para las cuestiones multimedia y animaciones, incluso la versión 10 del reproductor ya soporta aceleración 3D lo que permitirá expandir las aplicaciones web a un mundo muy interesante. (Ver http://www.papervision3d.org/). La tecnología AJAX es ya bastante conocida aunque no lo sepas, basta con utilizar cualquier aplicación de Google para saber cómo se siente. Está basada en la ejecución asíncrona de código Javascript. Por ejemplo, en Gmail cuando vamos a escribir un mensaje y comenzamos a escribir el nombre del destinatario, Gmail nos muestra un listado de nuestros contactos que coincida con lo que vamos tipeando. En este caso, cada vez que presionamos una tecla, el explorador ejecuta una función javascript que sin necesidad de recargar la página, ejecuta la instrucción al servidor y ahí mismo muestra el resultado. Esto hace que se vea muy ágil el uso de este sistema. Por otra parte tenemos la tecnología de Adobe Flex, la cual se basa en utilizar la tecnología de Flash para realizar nuestra aplicación. Las aplicaciones realizadas en Adobe Flex son una combinación de programación utilizando ActionScript y XML. El código fuente de una aplicación Flex, como veremos más adelante, es prácticamente archivos MXML (Macromedia XML) y Actionscript (parecido a Java) que al compilarse el proyecto el resultado (generalmente) es un archivo swf (por sus siglas ShockWave Flash) que no hace falta más que un reproductor Flash para utilizarlo. Figura 1. Pantalla de creación de nuevo proyecto en Adobe Flex Builder Linux Esta tecnología impulsada por Adobe ha sido muy bien aceptada para la realización de aplicaciones corporativas, basta con echar un vistazo a los proyectos que figuran en Adobe.com para tener una idea. Adobe aprovecha su monopolio en cuanto a su reproductor Flash en un gran porcentaje de ordenadores del mundo. Esto hace posible que las aplicaciones basadas en Flex puedan ser ejecutadas en cualquier navegador y/o equipo que lo soporte. Además, Adobe no debe esperar largos ciclos de mejora a protocolos o estándares, la adopción de Flash es tan alta y los usuarios de Flash actualizan a las últimas versiones tan rápidamente (en menos de 2 meses de liberada la versión 10 de Flash, el 55% de los ordenadores ya habían hecho el upgrade; pocos meses después, la adopción era casi de un 80%) que se puede dar el lujo de agregar y agregar funcionalidades y mejoras continuamente y saber que la gente buscará tener la última versión. En resumen tenemos 2 principales formas de realizar una RIA, utilizando AJAX o Flex. Lo recomendable sería que prueben ambas formas y se decidan por la que más se adecua a sus necesidades. En este caso vamos a trabajar con Adobe Flex y vamos a dar una ayuda en muchos conceptos claves. Estructura de una RIA Al igual que las aplicaciones comunes de Internet, las RIA se basan en una estructura Cliente/ Listado 1. Creando la carpeta prueba1 CREATE TABLE 'prueba'.'contactos' ( 'nombre' varchar(10) NOT NULL, 'borrado' tinyint(1) NOT NULL default '0', 'id' int(11) NOT NULL auto_ increment, PRIMARY KEY ('id') ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 81 www.lpmagazine.org 80_81_82_83_84_85_Flex ver2.indd 81 2009-04-14, 14:53 programación Programando RIA con Flex y AMFPHP Figura 2. Configurando el servidor PHP Servidor, siendo el cliente el explorador (Firefox/ Opera/ Konqueror/ Explorer/ Safari, etc.) y el servidor web (Apache/ Tomcat/ IIS, etc.). En nuestro caso de Flex, tenemos como cliente al conjunto Explorador + Flash. En el caso de AJAX el cliente es solo el Explorador (que soporte Javascript). El cliente está encargado de administrar toda la interacción con el usuario y procesar las respuestas del servidor. El Servidor está encargado de procesar todos los requerimientos que el cliente solicita, como acceso a la base de datos y a otros servicios, para finalmente enviarle el resultado para ser procesado. En definitiva la estructura de una RIA es básicamente la misma que las aplicaciones Web, un cliente y un servidor a excepción que el Cliente está mucho más desarrollado y con muchas más prestaciones, de hecho pueden desarrollar una RIA utilizando su viejo servidor. En definitiva la parte del cliente es la más importante en una RIA dado que es aquí donde se dan las mayores prestaciones para el usuario. Para el desarrollo de toda la interfaz del cliente, se puede utilizar Adobe Flex o Ajax mientras que para el servidor se pueden utilizar diferentes sistemas, por ejemplo, un servidor Apache/ IIS/ ColdFusion, Flex data Services y otros. En el caso de utilizar Flex la elección del servidor es a veces compleja, existen muchas opciones y muchas diferencias que a veces son difíciles de comparar. miento, vamos a desarrollar una pequeña aplicación utilizando Adobe Flex y AMFPHP para poder probar nuestro conocimiento. El único requerimiento para desarrollar este ejemplo es un poco de experiencia con PHP y MySQL en general para poder concentrarnos en el aprendizaje de Flex y AMFPHP. Utilizaremos Adobe Flex para desarrollar el cliente y un programa hecho en PHP en nuestro servidor. AMFPHP es el encargado de realizar la conexión entre PHP y Flex. AMFPHP se encargará de convertir los resultados del script de PHP en un formato AMF que Flex/Flash pueden comprender. AMF por sus siglas en inglés Action Message Format es un protocolo abierto muy eficaz para la transferencia de objetos y datos en general, más eficaz que utilizar XML puesto que utiliza menos recursos de procesamiento y ancho de banda. Primero vamos a configurar nuestro entorno de desarrollo para luego hablar un poco más de las herramientas. La aplicación será una pequeña lista de nombre de contactos que se encuentra en una base de datos, y mediante una interfaz de administración hecha en Flex, realizaremos un manejo muy básico como Agregar/ Borrar/ Listar los datos. Recuerden que nuestro objetivo es ver la interacción entre ambos sistemas y no aprender PHP. En el otro extremo tendremos una aplicación realizada en PHP que estará accesando la base de datos utilizando Adodb el cual hará más fácil el proceso. Si no conocen Adodb no se preocupen, es muy sencillo dado que haremos uso de cuestiones básicas. Software necesario • Asegurarnos que tenemos instalado el Apache HTTPD en Ubuntu y MySQL. (aptget install apache2 libapache2-mod- • php5 php5-mysql mysql-server-5.0). – Crear una base de datos llamada prueba. – Crear una tabla con el siguiente script. Descargar AMFPHP (http://sourceforge.net/ projects/amfphp/) y descargar Adodb para php (http://adodb.sourceforge.net/). – Descomprimir ambos archivos en la raíz de nuestro servidor web que en Ubuntu es /var/www. – Luego vamos a renombrar la carpeta recién extraída de AMFPHP. 'mv amfphp-1.9.beta.20080120/amfphp – /var/www'. Crear una carpeta llamada prueba1 en el directorio /var/www. Con estos pasos ya tenemos lo necesario para realizar aplicaciones utilizando Flex y AMFPHP. En dos primeros pasos descargamos e instalamos Flex. Antes de comenzar a realizar el ejemplo vamos a hablar un poco más acerca de Flex y AMFPHP. La interacción de un cliente en Flex con un servidor se hace por medio de diferentes métodos: • • Primer método: Servicios Web: – Son servicios que se han creado específicamente para comunicación entre máquinas y están definidos por un WSDL. Segundo método: Servicios HTTP: – Son los más comunes para los desarrolladores de sitios web, son llamadas HTTP como POST/GET. Este mecanismo es el menos recomendado pero también es muy sencillo de implementar, dado que podemos adaptar viejos servicios a Flex, exportando los datos a un XML. Tercer método: Objetos Remotos: – Son objetos de Java que se pueden acceder desde el cliente. El ejemplo lo vamos a desarrollar utilizando Adobe Flex Builder y Eclipse. Todo esto utilizando como máquina de desarrollo un Ubuntu/ Kubuntu. Adobe Flex Builder para Linux tiene • aún unas diferencias con su homónima versión de Windows, carece de Vista de Diseño, Vista de Estados y otros: Desarrollando En nuestro caso utilizaremos el tipo 3 que nos una aplicación en Flex • Descargar Eclipse Europa 3.3. Deben ba- permitirá realizar clases de PHP en el servidor, Para darle forma y color a todo este conocijar esta versión y no la 3.4 dado que Flex y acceder a sus métodos desde el cliente. El métoBuilder no es compatible con la versión 3.4. do 2 es utilizado para cuestiones muy sencillas y (http://www.eclipse.org/downloads/packages/ no os recomiendo para cosas complejas. El caso 1 release/europa/winter) es para cuando existen aplicaciones desarrolladas – Descomprimir eclipse. de antemano con esta habilidad para distribuir el • Descargar Adobe Flex Builder para Linux. servicio, pero no os recomiendo debido a que es (http://labs.adobe.com/downloads/flex- más lento (para quien cobre la programación por builder_linux.html). horas esto puede ser bueno) que RemoteObject – Ejecutar en la consola del usuario lo- y verdaderamente más complejo el desarrollo. gueado el instalador y seguir los pasos del instalador. Este instalador nos pedi- Ejemplo desarrollado Figura 3. Archivos generados al crear un proyecto rá el directorio donde descomprimieron Comencemos con el desarrollo del ejemplo. Prien Flex mero vamos a crear los archivos como os exponeclipse. 82 80_81_82_83_84_85_Flex ver2.indd Linux+ 6/2009 82 2009-04-14, 14:53 programación Programando RIA con Flex y AMFPHP Listado 2. Editando el archivo prueba.mxml <?xml version="1.0" encoding="utf-8"?><mx: <mx:method name="agregar" layout="absolute" backgroundGradientAlphas="[1.0, 1.0]" <mx:method name="borrar" Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundGradientColors="[#000000, #1D1D1D]" creationComplete="init()" <mx:Script> > result="addresultHandler(event)"/> result="addresultHandler(event)"/> </mx:RemoteObject> <mx:Panel x="199" y="162" width="526" <![CDATA[ import mx.collections.ArrayCollection; import mx.controls.Alert; import mx.rpc.events.FaultEvent; height="327" layout="absolute" title="Prueba AMFPHP + FLEX" color="#000000" fontSize="12"> <mx:AdvancedDataGrid id="contactos" import mx.rpc.events.ResultEvent; designViewDataType="flat" left="0" top="0" [Bindable] width="100%" height="100%" private var nombres:Array; dataProvider="{nombres}" > private var obj:Object=new Object(); </mx:AdvancedDataGrid> private function resultHandler { } </mx:Panel> (event:ResultEvent):void <mx:ApplicationControlBar x="199" y="497" width="326"> <mx:Button label="Listar" click="init()"/> trace('Procesando resultado'); <mx:Button label="Agregar" click="agregar()"/> nombres = event.result as Array; <mx:TextInput width="83" id="txtName"/> <mx:Button label="Borrar" click="borrar()"/> private function addresultHandler { } </mx:ApplicationControlBar> (event:ResultEvent):void &lt;/mx:Application> Luego debemos crear en el directorio 'src' Alert.show('Exitoso!'); el siguiente archivo llamado 'services-config.xml' amfPrueba.listar(); <?xml version="1.0" encoding="UTF-8"?> <services-config> private function faultHandler { } <services> (event:FaultEvent):void <service id="amfphp-flashremoting-service" Alert.show(event.fault.faultDetail, "Error"); private function init():void{ <channel ref="my-amf"/> </channels> <properties> obj['nombre']=txtName.text; <source>*</source> amfPrueba.agregar(obj); </properties> </destination> private function borrar():void{ obj['id']=contactos.selectedItem.id; ]]> } RemotingMessage"> <channels> amfPrueba.listar(); private function agregar():void{ } messageTypes="flex.messaging.messages. <destination id="taskService"> trace('Iniciando aplicacion'); } class="flex.messaging.services.RemotingService" amfPrueba.borrar(obj); </service> </services> <channels> <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"> </mx:Script> <mx:RemoteObject id="amfPrueba" source="prueba" destination="prueba" fault="faultHandler(event)" > <mx:method name="listar" class="flex.messaging.endpoints.AMFEndpoint"/> </channel-definition> </channels> result="resultHandler(event)"/> go y luego veremos qué hace cada uno. Iniciemos Flex Builder y creemos un nuevo proyecto de Flex. En la primera pantalla (Figura1) le ponemos el nombre prueba como nombre de proyecto, luego elegimos la primera opción en Application Type y, por último, seleccionan PHP en Server Technology. En la próxima pantalla (Figura 2) tendremos que configurar el directorio donde <endpoint uri="\\localhost\amfphp\gateway.php" </services-config> están los documentos de Apache. Para quienes tienen Ubuntu, pueden seguir la imagen presentada en la Figura 2. Los que utilicen otra distribución deberán ajustarlo de manera acorde. Finalizada la creación del proyecto Flex tendrán en la vista de archivos algo como la imagen presentada en l Figura 3. Luego editaremos el archivo llamado prueba. mxml que se encuentra en la carpeta src. (el nombre del programa principal coincide con el nombre del proyecto). Dentro de este archivo vamos a colocar el contenido del Listado 2. Estos pasos han sido para la creación del cliente en Flex. Antes de seguir con la parte del servidor debemos hacer un cambio en la configuración del proyecto (luego veremos de qué se trata). Vamos a hacer click derecho sobre el nombre del proyecto y luego elegimos la última opción lla- 83 www.lpmagazine.org 80_81_82_83_84_85_Flex ver2.indd 83 2009-04-14, 14:53 programación Programando RIA con Flex y AMFPHP mada Properties. Ahí buscaremos la opción denominada Flex Compiler y haremos el cambio tal cual indica la imagen presentada en el Listado 4. Luego debemos crear el siguiente archivo PHP que tiene que estar ubicado en la carpeta amfphp/services/ y se llamará prueba.php (Listado 3). Bien, ahora podemos elegir entre leer la explicación primera o apretar CTRL+F11 para lanzar el programa y verlo funcionando. • • Explicación El primer paso será ver la parte del servidor dado que, como saben, PHP se puede ver de manera sencilla. AMFPHP tiene un directorio llamado services en el cual se aloja nuestro script. Cada archivo debe representar una Clase, y dentro de ese archivo debe estar definida la Clase utilizando el mismo nombre que se usó para crear el archivo. En nuestro caso el archivo se llama prueba.php por lo cual la clase se llamará prueba. Dentro de esta clase estarán todos los métodos que deseemos publicar. En nuestro caso tenemos un constructor que es el encargado de realizar la conexión a la Base de Datos y luego los 3 métodos sencillos para nuestro ejemplo (Agregar/ Borrar/ Listar). En primera instancia definimos en el constructor las variables con respecto a la base de datos. Luego tenemos toda la lista de métodos que toman como variable un Arreglo que será enviada desde Flex. Dentro del arreglo tendremos más variables que podrán ser utilizadas para ejecutar las funciones. En el caso de Agregar vemos que la variable $Objeto['nombre'] tendrá el nombre del contacto y hacemos uso de esta variable para crear la Consulta que agregará el contacto. Seguridad: Si tienen que realizar algún sistema utilizando AMFPHP recuerden que este ejemplo es básico y no implementa ningún mecanismo de autenticación. AMFPHP trae algo que se conoce como Service Browser que permite revisar los servicios expuestos sin necesidad de un cliente. Lo pueden probar en nuestro caso accesando a la URL http://localhost/amfphp/browse. Continuemos ahora con la parte del Clien- Figura 4. Configurando servicios en el Cliente 84 80_81_82_83_84_85_Flex ver2.indd te. Esta parte está dividida en 2 secciones. Primero el archivo services-config.xml que contiene la configuración del servidor. Es un archivo bastante genérico donde los factores más importantes son: Destination: Este nombre se utilizará en el programa para identificar el servicio al cual me quiero conectar. Endpoint: Aquí está la dirección de amfphp. Si se fijan bien, notarán que el Destination tiene una propiedad llamada channels que vincula el Destino con el canal. Si desean volver a usar este ejemplo, solamente deben adaptar Endpoint para que apunte a otro servidor. Por último llegamos al archivo principal prueba.mxml que contiene el código fuente Flex. Como pueden ver es un código muy legible y utiliza prácticamente el formato XML para definir la parte visual y ciertas cosas programáticas. Sin embargo pueden ver que en la parte superior se encuentran la sección de scripts donde están las pequeñas funciones en lenguaje Actionscript. Como pueden ver es muy parecido a ver un archivo HTML+Javascript excepto que se ve más ordenado gracias al XML. En el XML podemos ver la definición de la tabla que contendrá todos los datos y es la siguiente línea: <mx:AdvancedDataGrid id="contactos" designViewDataType="flat" left="0" top="0" width="100%" height="100%" Eso es lo mismo que se hacía en HTML con <table> excepto que mucho más complejo y dinámico. Si ejecutaron el ejemplo pueden ver que es una tabla muy simple, bonita y que tiene incluidos efectos y funciones modernas que no hicieron falta programar. Pueden llenar la lista y verán como aparece una barra lateral, también pueden ver que el mouse por encima de cada fila cambia el color de la fila, si seleccionamos un ítem éste queda iluminado, etc. Todo esto son funciones que trae lo que se conoce como Datagrid. Si seguimos observando vamos a ver el código (Listado 4) que es el encargado de crear el objeto remoto, o sea el enlace entre el cliente y el servidor. Un objeto remoto lo pueden ver como si ustedes hubiesen programado una Clase en el servidor que pueden acceder desde el Cliente. Para poder usar esa clase (que se encuentra en AMFPHP) ustedes deben declararla con esa expresión que vemos arriba donde figuran los métodos a los cuales quiero acceder con su respectivo manejador de resultados ResultHandler, así como el nombre de la clase - source='prueba' y el destino de ese objeto mediante Destination. En resumen, como hemos declarado un objeto remoto amfprueba con sus 3 méto- Figura 5. Aquí se puede ver el resultado del programa en Flex dos Listar/Borrar/Agregar, ahora podremos dentro del cliente realizando por ejemplo amfprueba.listar(), lo que hará que inmediatamente se ejecute el método listar que está en la clase prueba. En la parte del script vamos a ver las funciones que se ejecutan al presionar los botones. Esto no requiere mucha explicación, se van a sentir muy cómodos dado que parece un simple Javascript. Algo que podemos notar en este script es el uso de trace. Cada vez que elijamos hacer un debug de una aplicación en Flex y tengamos Flash Debugger (ver Extras) vamos a poder ver en la consola de Flex Builder los argumentos que pasemos a trace. Es muy parecido al uso de error_log en PHP. Finalmente hablaremos de cómo llegan los datos al Datagrid y por qué no hemos definido columnas. El método Listar en el servidor nos responde con un Arreglo, el cual sin hacer ninguna interacción y/o modificación lo tomamos y enviamos directamente al datagrid. Si, no estás soñando, no hay que iterar mil veces para poder mostrar esa información. La magia reside en que el datagrid es lo suficientemente inteligente para crear las columnas y filas necesarias para mostrar la información que viene en ese arreglo. El datagrid absorbe todos los datos que hay en el parámetro DataProvider que en nuestro caso corresponde a un arreglo llamado nombres y el cual se actualiza con el método listar. Extras Bueno, hemos llegado al final del ejemplo y aún nos queda mucho por aprender, pero os dejo a vosotros para que sigan investigando este sencillo ejemplo. Espero que os haya gustado y lean la sección Extras si desean comenzar la aventura de las RIA. Debugueando Flex Pueden hacer un debug a Flex utilizando Flash Debugger. Con solo instalar esta versión de Flash ustedes podrán hacer uso de la opción Debug de Flex Builder y de esa manera tener un acercamiento al funcionamiento interno de la aplicación. Linux+ 6/2009 84 2009-04-14, 14:53 programación Programando RIA con Flex y AMFPHP $db_name='prueba'; das estas limitaciones se eliminan al realizar aplicaciones AIR puesto que tienen acceso a la PC al igual que cualquier otro software de escritorio. Todo esto sin necesidad de realizar muchos cambios a la aplicación, lo que nos permite desarrollar una aplicación Web con funcionalidades esenciales y luego una versión extendida que funciona en el escritorio y que permitiera muchas más cosas. $this->qdb->Connect($host, $user, $pass, $db_name); Frameworks: Marcos de Desarrollo Listado 3. Creando el archivo prueba.php <?php require_once("../../adodb5/adodb.inc.php"); class prueba{ public function __construct() { $host='localhost'; $user='root'; $pass='CLAVE_ROOT'; $this->qdb = & ADONewConnection('mysql'); $this->dbconn = $this->qdb; $this->qdb->SetFetchMode(ADODB_FETCH_ASSOC); error_log(" ::: DEBUG :: Coneccion usando ado------" . $host . " // " .$user . " // " . $db_name,0); } public function __destruct() { $this->qdb->close(); } function agregar($Objeto){ $insert="insert into contactos (nombre) values ('".$Objeto['nombre']."')"; • • • • $result=$this->qdb->Execute($insert); if($result) return true; else return false; } public function listar() { $query = "SELECT * FROM contactos WHERE borrado=0 "; if($rid=$this->qdb->Execute($query)){ while(!$rid->EOF){ $ret[]=$rid->fields; $rid->movenext(); } return( $ret ); }else return (false); } $query = "UPDATE contactos SET borrado=1 WHERE id='".$Objeto['id']."'"; $this->qdb->Execute($query); }?> return true; Listado 4. Creando el enlace entre el cliente y el servidor <mx:RemoteObject id="amfPrueba" source="prueba" destination="prueba" fault="faultHandler(event)" > <mx:method name="listar" result="resultHandler(event)"/> <mx:method name="agregar" result="addresultHandler(event)"/> <mx:method name="borrar" result="addresultHandler(event)"/> </mx:RemoteObject> Flex al Escritorio: AIR Adobe parece haber pensado en todo, si bien Flex permite realizar RIA basadas en tecnologías Web también ha desarrollado lo que se conoce como AIR (previamente conocido como Apollo) que permite llevar estas aplicaciones Craingorm, Swiz, PureMVC, Mate. Todos ellos merecen un artículo aparte, pero los incluimos aquí para que sepas por donde seguir con el desarrollo de una RIA. Personalmente te sugiero trabajar con Mate, es muy sencillo y claro, una vez que comprendes como funciona te hará la vida muy sencilla, quizás hasta más sencillo que este ejemplo. Quizás el próximo artículo trabajemos directamente con alguno de estos frameworks. Opciones a AMFPHP public function borrar($Objeto){ } Los frameworks son Marcos de desarrollo que implementan facilidades, mejores prácticas y capas de abstracción. En otras palabras simplifican el desarrollo de una aplicación, a la vez que otorgan mejores prácticas y lineamientos para desarrollar una aplicación más segura, escalable y elegante (entre otras). Dentro del desarrollo en Flex existen varios frameworks entre los cuales se destacan: Web al escritorio, expandiendo el potencial de desarrollo. Al desarrollar aplicaciones Flex nos encontramos con ciertas limitantes, por ejemplo acceso a dispositivos y periféricos directamente, acceso al disco (para tener información offline), etc. To- Existen varias opciones a AMFPHP que varían en detalles técnicos, uso y escalabilidad. La opción más completa es Adobe Live Cycle y es el sistema que vende Adobe para realizar todo tipo de RIAs y está netamente integrado con Flex, Flex Builder. Existen muchas opciones para varios lenguajes, pero las más conocidas son BlazeDS (Java), Red5 (Java/Jython/JRuby) y Zend (PHP). Sobre el autor Matías Barletta dió sus primeros pasos como desarrollador de tecnología militar en Argentina para luego convertirse en Linux Admin para empresas radicadas en Argentina, Estados Unidos, Costa Rica e Inglaterra. Actualmente lidera un grupo de desarrolladores en implementaciones y desarrollos de software libre (SugarCRM, Asterisk) para varios países de América Latina. Su email: [email protected] 85 www.lpmagazine.org 80_81_82_83_84_85_Flex ver2.indd 85 2009-04-14, 14:53 opinión Distribuidores polivalentes L os administradores de sistemas de las empresas suelen tener que sufrir una gran dicotomía en su trabajo: ¿Windows o Linux? Es una batalla perdida. Por mucho que nos empeñemos, la inmensa mayoría de usuarios va a rechazar un cambio a Linux en los puestos de trabajo mientras sigan teniendo Windows en casa. Los administradores suelen confiar en Linux para determinadas misiones críticas en un entorno corporativo, como pueden ser los cortafuegos, los servidores web… Pero en la otra punta, tenemos sistemas Windows: administración, comercial… Nos estamos acostumbrando a esta situación, que no suele ser demasiado cómoda. A pesar de que lo ideal sería disponer de un siste- Fernando de la Cuadra, director de Educación de Ontinet.com Distribuidores polivalentes ma unificado, no se llega a ese punto nunca. Y lo peor de todo es que en muchos casos, los administradores se ven obligados a disponer de proveedores distintos en función del área a la que se quiera atacar, Windows o Linux. Un proveedor que se encargue de los sistemas Windows no suele tener el chip adaptado a las soluciones Linux. No hay manera de explicar a esos distribuidores que sí, que el servidor de bases de datos funciona bajo SQL, pero que hemos sido nosotros los que hemos modificado el código para adaptarlo a los caprichos (perdón, quería decir necesidades) de la empresa. El choque es muy fuerte, reconozcámoslo. Como si le dijéramos a un administrador de Linux que debe conectarse a un MS SQL Server sin tocar ni un solo punto del servidor más allá de las Opciones Avanzadas y Aceptar. Entonces, como he comentado, la solución suele ser tener dos proveedores (o más, normalmente) que puedan conocer nuestros problemas y los caprichos (otra vez… perdón, necesidades) de la empresa, cada uno en un área distinta. 86 86_Opinion.indd Y si ya se sufren problemas en otros departamentos (los he conocido de cerca por el mero hecho de tener distintos proveedores de elementos de merchandising), en el de IT, que es crítico para el negocio, esos problemas se pueden multiplicar. La solución pasa por los proveedores integrales de servicios que merezcan ese nombre. No es lo mismo tener tres departamentos que sepan de todo que un departamento que sepa de tres cosas. ¿Cómo vamos a esperar un buen cableado si el departamento que lo monta no es capaz de entender cómo necesitamos la sala de servidores? Luego es posible que la factura llegue bajo un solo CIF, pero no hemos ganado nada en integración. El reto de encontrar un proveedor así no es sencillo, desde luego, pero nos encontramos en un buen momento. La tan manida crisis está haciendo redoblar esfuerzos a muchos integradores, mejorando sus servicios, aumentando la cualificación de sus técnicos y elevando la calidad final del producto. Ya no vale la estrategia del tente mientras cobro que luego el administrador se encarga de sudar por las noches. No, no hace falta. Busquemos a los que nos puedan ayudar a tener una red en condiciones, los sistemas siempre funcionando (Windows, Linux, Mac, Solaris, DOS, CP/M u OS/2, lo que sea) y los usuarios de la red sin problemas. Que nos ofrezcan soluciones de verdad integrales, que aunque haya que recurrir a tres marcas distintas para un elemento, funcionen bien, integradas y sin que las horas extra que se hagan delante de una pantalla sean por culpa de una mala elección. Puede parecer extraño, pero os aseguro que estos distribuidores existen, y no son tan raros. Busquémoslos y una vez comprobado que existen, sometámoslos a los caprichos de la empresa: entonces sí que serán necesidades. Linux+ 6/2009 86 2009-04-14, 14:53 Páginas recomendadas 87_webamigas.indd www.diariolinux.com www.elguille.info www.gatolinux.blogspot.com www.opensourcespot.org www.hispabyte.net www.linuxdata.com.ar www.linuxhispano.net www.pillateunlinux.wordpress.com www.usla.org.ar www.mundopc.net www.picandocodigo.net www.linuxuruguay.org 91 2009-04-14, 14:54 entrevista Entrevista a Ignacio Molina Palacios, AXARnet Comunicaciones Entrevista a Ignacio Molina Palacios, Proyect Manager de AXARnet Comunicaciones LiNUX+: ¿Cómo nació la empresa? Ignacio Molina Palacios: AXARnet nació en 1996. En esa época había muy pocas empresas que ofrecieran este tipo de servicios ante un mercado emergente que requería soluciones y nuevas vías de expansión y a raíz de esto se comenzó con el proyecto. L+: ¿Cómo se desarrolló? I.M.P.: Prácticamente no teníamos nada en propiedad, nuestras instalaciones y máquinas eran alquiladas y dependíamos de terceros para la conectividad, hardware e incluso soporte técnico. Esta dependencia nos generaba inseguridad, además de que nos limitaba muchísimo el tiempo de respuesta ante nuestros clientes. Así comenzó poco a poco un proceso de independencia que supuso grandes inversiones económicas y de esfuerzo, compensados siempre por el apoyo y ánimo de nuestros clientes que siempre se mantuvieron a nuestro lado en esos duros momentos. Hoy en día podemos enorgullecernos de todo lo conseguido, estamos en uno de los mejores Datacenters de Europa, tenemos conexiones BGP-4 multioperador, somos miembros del RIPE con nuestro propio sistema autónomo de direcciones ip, somos agentes registradores de ESNIC, somos partners de las grandes empresas de servidores como Dell y mantenemos acuerdos con HP, somos Platinum Partner de Parallels (empresa desarrolladora de software para soluciones de Hosting y Virtualización) y seguimos trabajando para mantener una infraestructura propia. L+: ¿Nos podéis presentar algunos casos de éxito? I.M.P.: Cada cliente que parte de una idea, la materializa y consigue mantenerse, es para nosotros un caso de éxito, tenemos casos de distribuidores nuestros que han empezado des- 88 88_89_Wywiad.indd de cero y poco a poco se han creado su propio mercado de clientes, tenemos empresas y particulares fieles que llevan con nosotros desde nuestro comienzo, e incluso empresas que a través nuestra han contactado y han realizado colaboraciones conjuntas en sus actividades. Pero por supuesto el mérito es totalmente de ellos, nosotros simplemente les hemos dado las herramientas y en algunos casos ayudado y aconsejado para cumplir sus objetivos. L+: En el mercado español hay unas empresas muy grandes que ofrecen servicios de hosting (muchas veces internacionales) y muchas empresas pequeñas ¿cómo véis la situación de la competencia en vuestro campo, es posible competir con los gigantes internacionales? ¿Las empresas más pequeñas podrán sobrevivir? I.M.P.: Competir directamente con estas grandes empresas es un reto difícil y costoso para las pequeñas y medianas empresas que tienen que recurrir a otras vías que les permitan entrar en este juego de la competitividad. AXARnet siempre se ha caracterizado por una postura más cercana al cliente, basándose fundamentalmente en ofrecer un buen soporte y asesoramiento que refuerce su confianza. El objetivo que pretendemos es, en primer lugar estructurarnos, para potenciar la sensación de confianza frente al cliente que cada vez es más exigente. Esto repercutirá en la imagen futura de la empresa de forma positiva permitiéndole crecer. Pensamos que éstas son la pautas que tenemos que seguir las empresas más pequeñas. L+: En cuanto a Axarnet, ¿cuáles son las ventajas para los clientes de vuestra empresa en comparación con otras empresas? I.M.P.: Fundamentalmente tres: la transparencia, porque siempre asesoramos al cliente sobre qué es lo que necesita; la calidad, ya que trabajamos con las mejores marcas; y el soporte, que siempre está a su disposición para cualquier contratiempo que se les pueda presentar. Gracias a ésto nuestra oferta no está enfocada sólo a clientes nacionales sino que también nuestro mercado se abre hacia empresas europeas y americanas. L+: ¿De qué servicios disponen vuestros clientes? I.M.P.: En AXARnet disponemos de todos las soluciones de alojamiento para así poder cubrir cualquier necesidad, desde la más básica para el usuario doméstico hasta las soluciones más avanzadas para grandes empresas que requieran potencia, confiabilidad y seguridad. Registro de dominios: Es la parte básica para cualquier particular o empresa que quiera tener presencia en internet. Registrar un dominio es obtener su marca registrada en internet. Nos sirve para que nos encuentren, para que nos recuerden y para que puedan contactar con nosotros. En AXARnet ofrecemos una amplia gama de extensiones de nombres de dominios, que cubren por supuesto las más importantes .com, .net, .org y .es. Además, al ser Agentes Registradores Autorizados por ESNIC (que es el departamento de la Entidad Pública Empresarial RED.ES, autoridad competente para la gestión del Registro de nombres de dominio de Internet bajo el código de país .es) tendrá la total garantía de que su dominio es registrado conforme establece la normativa española y sin ningún tipo de intermediarios. Además al registrarlo a través de un Registrador Acreditado obtendrá precios muy competitivos, una rapidez y eficacia en la tramitación y gestión de su dominio impecables. Aún sólo con el registro de dominio, AXARnet ofrece Linux+ 6/2009 88 2009-04-14, 14:55 io entrevista Entrevista a Ignacio Molina Palacios, AXARnet Comunicaciones gratuitamente un completo panel de control para configurar de forma fácil, entre otros, los contactos del dominio, la gestión de DNS y para crear redirecciones web y de correo. En este momento estamos en proceso de conseguir la acreditación de la ICANN como registrador de dominios, con todos los beneficios que esto conlleva para los clientes, como la posibilidad de acceder a cualquier tipo de dominio a precios muy competitivos, gestionar directamente con nosotros cualquier trámite con los dominios e incluso hacerse distribuidores para que así quienes quieran registrar dominios para terceras personas o empresas puedan hacerlo obteniendo interesantes descuentos por volumen. Para aquellos usuarios que requieran de soluciones económicas y sin demasiadas pretensiones en cuanto a requerimientos, características y configuraciones especiales podemos ofrecerles los Planes de Alojamiento Compartido, basados en servidores Windows y Linux, según necesiten. Todos nuestros Planes de alojamiento incluyen las últimas versiones del panel de control Plesk, desde donde podrá gestionar su dominio (correo, ftp, directorios, bases de datos, ...). Como novedad, para clientes que deseen alojar varios dominios en su pack de hosting, hemos creado Planes Resellers, podrá alojar ilimitados dominios desde un solo plan. Desde el panel de control Parallels Plesk, podrá agregar, modificar y eliminar dominios de forma rápida y sencilla así como ofrecer a sus clientes un panel de control donde administrar su dominio, cuentas de correo, etc. Con nuestros Planes Reseller no tendrá que preocuparse de la administración de su servidor, pues es un servicio totalmente administrado, nosotros nos encargamos de todo para que solo tenga que preocuparse de lo realmente importante, dar servicio a sus clientes. Dentro de la gama de servicios avanzados podemos ofrecer los Servidores VPS que se comportan exactamente como un servidor dedicado y dispone de sus propios recursos garantizados, de forma que si un vps excede el uso de ram o cpu asignado, no afecta al funcionamiento de los demás vps alojados en el nodo. Como Platinum Partners de Parallels, desarrolladores de Virtuozzo, en AXARnet podrá encontrar la gama más amplia de servidores privados virtuozzo, tanto en plataforma linux como windows. La tecnología Virtuozzo es increíble, Virtuozzo crea múltiples VPS separados en un mismo equipo físico para compartir hardware, licencias y esfuerzos de administración con la máxima eficiencia. Cada vps funciona de la misma manera que un servidor dedicado normal desde el punto de vista de los usuarios y de las aplicaciones y puede ser reiniciado independientemente al igual que dispone de ac- ceso root, direcciones IP, memoria, procesos, archivos, aplicaciones librerías de sistema y archivos de configuración. Una carga muy baja y un diseño eficiente hacen de Virtuozzo la mejor solución para servidores en producción con contenidos y aplicaciones reales. Cada vps esta completamente aislado de los demás, disponiendo de un uso reservado de capacidad de almacenamiento, teniendo además su propia configuración de sistema, aplicaciones, librerías , panel de control , etc y su funcionamiento no interfiere con los demás servidores privados instalados en el mismo servidor o máquina física en cuestión. Además podrá, siempre que lo desee, generar una copia de seguridad de todo el sistema. Dicha copia se realiza en segundos e incluye no solamente sus datos de usuario sino también todos los programas y servicios. Podrá restaurar dicha copia cuando lo necesite sin necesidad de grandes conocimientos, solamente con un clic. En su VPS también podrá disponer del mejor panel de control del mercado, PLESK, para así poder realizar las tareas más comunes de la forma más fácil y amigable posible. Nuestros Servidores VPS pueden encontrarse tanto con el Sistema Operativo Linux como Windows y se ofrecen con diferentes configuraciones de potencia y recursos según siempre las necesidades que tenga el cliente. Así pues encontramos VPS con paneles de control Plesk y cPanel o sin paneles de control (Root), y DDS que son Servidores Dedicados con la tecnología Virtuozzo inherente. Como producto estrella, tanto por sus características como por su precio, tenemos los Servidores Dedicados, una opción cada día más solicitada por su coste cada vez más reducido y por su potencia. Es la opción elegida por empresas o particulares que quieran ofrecer servicios de hosting a terceros, o para desempeñar tareas específicas, como servicios de VoIP, servidores de licencias, servidores de backups, ftp, streamming, o los que como bien destacáis en vuestro actual número para implementar la tecnología Cloud Computing. Es una máquina totalmente a su disposición, que es entregada con el Sistema Operativo Windows o Linux y con los paneles de control Plesk si se van a utilizar para servicios de hosting. AXARnet garantiza la disponibilidad de red mediante contrato SLA, que se refiere al tiempo en que el servidor tiene disponible la conectividad a Internet en el puerto de red asignado. Para aquellos clientes que lo demanden disponemos de un servicio de administración de servidores para que usted solo tenga que preocuparse de su negocio y no de los problemas que pueda encontrar en su servidor. Este servicio incluye entre otras, tareas de copia de seguridad y restauración, configuración de cortafuegos, monitorización 24/7, actualizaciones de software del servidor, actuación y asesoramiento en caso de ataques, sustitución de hardware o incluso del servidor en caso de dañarse. En AXARnet contamos con un equipo de profesionales capaces de resolver cualquier problema relacionado con su servidor de inmediato. Por supuesto todos nuestros servicios son escalables de forma que si el cliente necesita ampliarlos pueda hacerlo con el menor impacto posible para su funcionamiento. L+: En todos los medios de la comunicación nos hablan de la crisis económica, ¿habéis notado sus efectos en vuestro negocio? En caso afirmativo, ¿cómo os defendéis de ellos? I.M.P.: Es indudable que la crisis está afectando en mayor o menor medida a todos los sectores empresariales, ahora todas las inversiones que las empresas y particulares dedican a las nuevas tecnologías, y fundamentalmente a Internet están miradas con lupa y el cliente quiere cubrir sus necesidades con el coste justo. Nosotros, conscientes de esta situación, ajustamos los precios y mejoramos el servicio. Creemos que es exactamente lo que el cliente necesita. L+: Este número tiene como tema central la tecnología de Cloud Computing, muchas personas creen que es el futuro de la tecnología, sobre todo en la situación de crisis actual, ¿estáis de acuerdo con esta opinión? I.M.P.: Totalmente. La situación actual del mercado requiere nuevas pautas de actuación por parte de las empresas y del usuario final. Estas herramientas permiten un gran ahorro en costes de inversión, por otro lado permite mantener en contacto a los comerciales y distribuidores de diferentes sedes con la estructura central manteniendo siempre la información actualizada y accesible desde cualquier sitio y en cualquier momento, además de romper totalmente con las barreras físicas que impone la distancia. Podríamos decir que centralizamos para ampliar nuestro campo de actuación. Un producto ideal para este tipo de tecnologías son los Servidores Dedicados. L+: ¿Qué planes de desarrollo tenéis para el futuro próximo? I.M.P.: Seguiremos trabajando para ofrecer siempre el mejor servicio a nuestros clientes, para ello plantearemos nuevas estrategias de desarrollo que nos permitan más autonomía, así como la posibilidad de seguir ofreciendo precios cada vez más competitivos sin que ello repercuta en la calidad de los productos. L+: Muchas gracias por esta pequeña entrevista. I.M.P.: Gracias a vosotros por hacernos partícipes. 89 www.lpmagazine.org 88_89_Wywiad.indd 89 2009-04-14, 14:55 El tema principal del siguiente número de Linux+ será: Seguridad y Ethical Hacking El próximo número incluirá los siguientes artículos: • Ethical Hacking utilizando BackTrack • Historia de Hacking Práctico • Hacking para Linuxeros • Sistemas de encriptación alternativos • Seguridad en Linux y mucho más... La Redacción se reserva derecho a modificar sus planes Mensual Linux+ está publicado por Software-Wydawnictwo Sp. z o. o. Diseño portada: Agnieszka Marchocka Producción: Marta Kurpiewska, [email protected] Redactora Jefe Paulina Pyrowicz, [email protected] Colaboradores: Francisco Javier Carazo Gil, José Carlos Cortizo Pérez, David Puente Castro, Jorge Emanuel Capurro Gráfico: Łukasz Pabian – "insane" Publicidad: [email protected] Suscripción: [email protected] Correctores: Pablo Cardozo, Jose Luis Lz. de Ciordia Serrano Alberto Elías de Ayala Distribución: Coedis, S. L. Avd. Barcelona, 225 08750 Molins de Rei (Barcelona), España Preparación de DVDs: Ireneusz Pogroszewski, Andrzej Kuca Dirección: Software–Wydawnictwo Sp. z o.o., ul. Bokserska 1, 02-682 Varsovia, Polonia DTP: Marcin Ziółkowski Graphics & Design Studio, www.gdstudio.pl 90_zajawka_es.indd 90 La Redacción se ha esforzado para que el material publicado en la revista y en los DVDs que la acompañan funcionen correctamente. Sin embargo, no se responsabiliza de los posibles problemas que puedan surgir. Todas las marcas comerciales mencionadas en la revista son propiedad de las empresas correspondientes y han sido usadas únicamente con fines informativos. La Redacción usa el sistema de composición automática Los DVDs incluidos en la revista han sido comprobados con el programa AntiVirenKit, producto de la empresa G Data Software Sp. z o.o. ¡Advertencia! Queda prohibida la reproducción total o parcial de esta ublicación periódica, por cualquier medio o procedimiento, sin para ello contar con la autorización previa, expresa y por escrito del editor. Linux ® es una marca comercial registrada de Linus Torvalds. 2009-04-17, 11:55 91_rekl_ademix.indd 1 2009-04-14, 14:55 92_rekl_consultor.indd 1 2009-04-14, 14:56