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
&amp;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

Documentos relacionados