PRÓLOGO (¡¿OTRA VEZ?!)
Esta vez sí el blog está muerto, habrán pensado los lectores, o los navegantes que se crucen por aquí de casualidad, o gracias a San Google.

¡Pero no! ¡Estación de Tránsito vive! Y si bien hace casi tres meses que no publicaba, la buena noticia es que de ahora en adelante les prometo publicar por lo menos un post mensual, y de contenido extenso y e interesante. No es un compromiso de año nuevo: ocurre que desde hace unos meses estoy colaborando con una publicación mensual especializada en informática, y con la salida a la calle de cada nuevo número, pienso postear aquí el artículo de la edición anterior, para compartirlo con ustedes, o para que sea de utilidad a quien busque sobre el tema.

Res non verba, decían sabiamente los antiguos romanos, así que vamos al tema de este mes.

VIRTUALIZACIÓN: UN DATA CENTER EN TU PC
Una para todosDesde que llegó a los escritorios de nuestra querida PC, de la mano de software como VMWARE, XEN, BOCHS o Virtual PC, no se hace otra cosa que hablar de este concepto. Claro que no es nada nuevo, y quienes conocen del asunto saben que ya se utiliza desde hace muchos años. Lo novedoso es que AMD e Intel comienzan a tenerla en cuenta a la hora de diseñar sus nuevos procesadores, y es por eso que hoy dedico un post completo sobre el tema.

La virtualización nació, originalmente, en los mainframes, gigantescas computadoras centrales con inmenso poder de proceso y almacenamiento, que, compartiendo estos recursos, permitían que cientos de usuarios operaran simultáneamente a través de múltiples terminales. Hoy en día, este modelo de “computación centralizada” ha sido abandonado casi por completo y reemplazado por redes compuestas por pequeños servidores y computadoras personales (estaciones de trabajo). Pero las ventajas de la virtualización siguen estando más que vigentes.

EL PROBLEMA DE LA INFORMACIÓN
Desde siempre, la mayoría de las empresas ha contado en sus centros de cómputo con una gama heterogénea de equipos de distintas marcas y modelos, a menudo incompatibles entre sí, corriendo decenas de sistemas operativos distintos. En cualquier centro de cómputos moderno, se apilan servidores web, de archivos, de impresión, de bases de datos, de correo y de innumerables tareas más. Cada uno de ellos, un punto de falla posible, cuya caída deja a la empresa sin el servicio que esa máquina ofrece, a menos que haya servidores redundantes de backup, lo que eleva aún más la cantidad de equipos necesarios.
Al fin y al cabo, ni los equipos más poderosos sirven para nada sin el software que ejecutan, y así como nosotros, los usuarios comunes, amamos ciertas piezas particulares de software y decidimos el sistema operativo que usaremos e, incluso, el equipo que compraremos para poder correr ese software, de la misma forma las empresas necesitan ejecutar para sus tareas ciertos programas que, en general, sólo corren en determinados sistemas operativos, que a su vez sólo se ejecutan en un cierto hardware; un círculo vicioso que nos obliga a la heterogeneidad y a la sobreabundancia de equipos, más el trabajo que conlleva administrarlos.

VIRTUALIZAR: LA SOLUCIÓN
Hasta que llegó la virtualización. Casi siempre, el procesador de los equipos, hasta el de los mainframes más potentes, funciona por debajo de su capacidad; a veces, muy por debajo de ella. Entonces, ¿por qué no usar ese poder de proceso disponible para emular hardware y, así, poder tener distintas “computadoras” virtuales ejecutándose en un mismo equipo? Esta pregunta, que primero se hicieron los ingenieros que desarrollaban y mantenían sistemas operativos para mainframes, y luego, finalmente, se repitieron desarrolladores de software de PC, hizo que esta tecnología llegara a nuestro alcance, en forma completamente gratuita.
Las ventajas de la virtualización para una empresa pueden ser inmensas, en relación al dinero que les puede ahorrar: muchas “máquinas virtuales” corriendo en una sola ahorran muchísima administración, tiempo de trabajo y hasta energía eléctrica; puede elevar la estabilidad y confiabilidad de los servicios que se ofrecen, y minimizar los tiempos de caídas.
Para nosotros, amigos de los fierros domésticos y aficionados a jugar con las máquinas y a probar sistemas operativos, nos viene como anillo al dedo. Si somos programadores, es perfecto para poder testear nuestros desarrollos en distintas plataformas y versiones de sistemas operativos. Si nos dedicamos a las redes, es ideal para diseñar y simular una red con sus servidores dedicados de web, correo, base de datos… Las posibilidades son infinitas.
Otra capacidad más que interesante de la virtualización es la de emular diversos dispositivos de un equipo; interfaces de entrada/salida como USB, sonido, lectoras de CD (usando las físicas de nuestra PC o archivos de imagen) y discos duros. Podemos simular uno o más discos rígidos, que serán, simplemente, archivos en el sistema de archivos de nuestro sistema operativo anfitrión; y si queremos, por ejemplo, crear un disco de 10 GB, ni siquiera necesitaremos resignar todo ese espacio de nuestro disco, ya que, por defecto, el archivo, al crearse, será mínimo e irá creciendo a medida que el disco “virtual” se vaya llenando. Esto nos permite correr diversos sistemas operativos en la misma partición y sistema de archivos, y así evitar particionados y administradores de arranque.

En este esquema vemos las capas que componen el sistema de virtualización.Figura 1

MANOS A LA OBRA
Veremos a continuación cómo probar esta tecnología en nuestra PC utilizando VMWare Player, el producto gratuito de VMWare, una empresa pionera en tecnología de virtualización para PC. En esta oportunidad lo elegimos porque es uno de los más populares y fáciles de utilizar, además de poseer una performance notable; si corre sobre un equipo más o menos moderno, sorprendentemente apenas notaremos el overhead que agrega la virtualización. Y como casi todo el software que recomienda el autor de este post, se puede descargar en forma gratuita desde Internet.
Otros productos VMWare (por ejemplo, VMWare Workstation), que son pagos, nos permiten “crear” y configurar a gusto las máquinas virtuales y sus dispositivos de almacenamiento en forma amigable, con una intuitiva interfaz gráfica. VMWare Player, en cambio, está pensado para sólo “ejecutar” estas “Virtual Machines” creadas con los otros productos, y no dispone de la posibilidad de crear nuevas ni modificar las existentes mediante su interfaz. Sin embargo, munidos de nuestro viejo y nunca bien ponderado amigo el Bloc de notas, vamos a solucionar esta limitación en pocos minutos.
Para nuestras pruebas elegimos como sistemas operativos “guest” o huésped (el “host” o anfitrión sería el sistema operativo que utilizamos normalmente con nuestra computadora) a Windows XP y Debian Linux, aunque los pasos explicados sirven para instalar el que gusten. Casi todos los que hemos probado, funcionaron sin ningún problema, y fueron muchos: DOS, FreeDOS, Windows 95/98/2000/XP, FreeBSD, varias distribuciones de Linux, etc.

PASOS PARA LA CREACIÓN
Antes de nada, para crear nuestro Windows XP virtual descargamos los apenas 30 MB que tiene el paquete del VMWare Player desde www.vmware.com/download/player, y lo instalamos. Si usamos distribuciones Linux, como Debian o Ubuntu, podremos encontrarlo también para su descarga e instalación automatizada en los repositorios correspondientes.
A continuación, debemos crear el disco duro virtual. Para hacerlo, necesitamos descargar la herramienta QEMU desde http://free.oszoo.org/ftp/qemu/win32/release/QemuInstall-0.7.2.exe.
Una vez descargada, si utilizamos Linux como sistema operativo anfitrión, la instalamos y ejecutamos a través de Wine, el emulador que nos permite correr binarios de Windows en Linux. En cambio, si nuestro sistema host es Windows, la instalamos normalmente y la invocamos desde el intérprete de comandos de la siguiente manera:

qemu-img.exe create -f vmdk WinXP.vmdk 4G Formating ‘WinXP.vmdk’, fmt=vmdk

Así crearemos el archivo que hará las veces de disco duro “virtual”. En este caso, 4G indica que el tamaño máximo de dicho disco será 4 GB, y es posible especificar la cantidad que se desee. Para instalar un XP, es aconsejable un disco de, al menos, este tamaño. Recordemos que todo este espacio no será usado de inmediato, sino que el archivo irá creciendo en la medida en que se vaya utilizando el disco virtual, y el límite será el especificado.
Luego, abrimos el editor de texto que acostumbramos a utilizar y copiamos las líneas del recuadro. Al hacerlo, cada usuario deberá modificar algunas líneas para adaptar la VM (Virtual Machine) a sus necesidades y a las posibilidades de su equipo.

Contenido del archivo de configuración

#!/usr/bin/vmware
config.version = “8″
virtualHW.version = “3″
memsize = “256″
MemAllowAutoScaleDown = “FALSE”
MemTrimRate = “-1″
displayName = “Windows XP”
guestOS = “winxppro”
nvram = “wxp.nvram”
checkpoint.vmState = “wxp.vmss”
ide0:0.present = “TRUE”
ide0:0.filename = “WinXP.vmdk”
ide0:0.redo = “”
ide1:0.present = “TRUE”
ide1:0.startConnected = “TRUE”
ide1:0.autodetect = “TRUE”
ide1:0.fileName = “auto detect”
ide1:0.deviceType = “cdrom-raw”
floppy0.fileType = “file”
floppy0.fileName = “cdboot1.img”
floppy0.startConnected = “FALSE”
ethernet0.present = “TRUE”
ethernet0.connectionType = “nat”
ethernet0.addressType = “generated”
ethernet0.generatedAddress = “00:0c:29:5b:85:90″
ethernet0.generatedAddressOffset = “0″
usb.present = “TRUE”
sound.present = “TRUE”
sound.virtualDev = “es1371″
tools.syncTime = “TRUE”
tools.remindInstall = “TRUE”
uuid.location = “56 4d 45 2f be 2c 90 1b-83 28 ab 13 31 5b 85 90″
uuid.bios = “56 4d 45 2f be 2c 90 1b-83 28 ab 13 31 5b 85 90″
uuid.action = “create”

TOCANDO LA CONFIGURACIÓN
Es hora de analizar las distintas áreas del archivo de configuración.

* Noten la línea memsize = “256”: En este caso, le estamos asignando 256 MB de memoria RAM a la VM porque el equipo host tiene 2 GB de RAM. En equipos con menos memoria, podemos asignarle menos, aunque si el sistema operativo “guest” es Windows XP, es recomendable no asignarle menos de 128 MB. Si vamos a instalar una distribución de Linux sin interfaz gráfica –por ejemplo, para correr Apache/PHP/MySQL para un servidor web–, con 64 MB alcanza e, incluso, con menos. De todas formas, nunca es recomendable asignarles a las VM más de la mitad de la memoria física del equipo anfitrión. De lo contrario, perjudicaríamos seriamente su rendimiento, lo cual sería desastroso para el rendimiento de las VM. El balance ideal lo iremos encontrando con el viejo método de prueba y error.

* La línea ide0:0.present = “TRUE” indica que está presente el dispositivo IDE primario; ide0:0.filename = “wxp.vmdk” le asigna el disco virtual que creamos previamente. Las que siguen con ide1:0 son similares, y en este caso asigna al dispositivo IDE secundario una de las lectoras de CD físicas del anfitrión (VMWare autodetectará el que corresponda), con lo cual permitirá bootear desde el CD para instalar el sistema operativo guest.

* Si no necesitamos soporte para USB, en usb.present = “TRUE” reemplazamos “TRUE” por “FALSE”, y del mismo modo procedemos con el sonido (sound.present).

* La línea ethernet0.present = “TRUE” activa la emulación de la interfaz de red; ethernet0.connectionType = “nat” indica que se utilizará Network Address Translating para redirigir el tráfico de red desde el equipo anfitrión hacia el guest. Esto (para quienes no estén familiarizados con conceptos de redes) es una técnica pensada para compartir Internet en redes locales, y permite que muchas máquinas se conecten a Internet a través de la única IP que normalmente asigna el ISP. Quiere decir que se creará una red privada entre el host y los guest, y, por ejemplo, si queremos navegar en uno de los guests, los pedidos de nuestro navegador saldrán del guest hacia el host con la IP de la red privada, y el host se encargará de convertirlos a la IP asignada por el proveedor al enviarlos al exterior. Al regresar los paquetes en respuesta, el host reemplazará la IP de destino (la asignada por el ISP) por la del guest en la red privada, y nos permitirá navegar y utilizar otros servicios de red; todo esto será absolutamente transparente y funcionará sin que nos enteremos, ya que VMWare dispone de un servidor DHCP que se encargará de gestionar todo por nosotros.
Cabe destacar que, además de NAT, se pueden utilizar otros tipos de vínculos de red entre guest y anfitrión, como “Bridged”; es decir, que la VM tenga una IP propia dentro de nuestra red, si es que estamos en una, en vez de usar la red privada virtual.

Una vez que estamos satisfechos con la configuración, creamos una carpeta para nuestra VM y grabamos en ella el archivo con el nombre “WinXP.vmx”.

INICIANDO NUESTRA NUEVA PC VIRTUAL
Sólo resta poner el CD de instalación de Windows XP en la lectora, ejecutar VMWare Player, seleccionar la opción Abrir VM y elegir el archivo WinXP.vmx que recién creamos. Ante nuestros ojos, la ventana del Player se transformará en el “monitor virtual” desde el cual veremos bootear la VM con pantalla de BIOS y todo (al cual podremos acceder para modificar su configuración a nuestro gusto). Funciona de una forma tan natural y liviana, que es común que quienes lo vean correr en nuestro monitor supongan que estamos conectados con alguna herramienta de acceso remoto a otra máquina “real”.
Al no encontrar un sistema operativo instalado en la máquina virtual, Player booteará desde el CD, y procederemos a la instalación del sistema operativo como lo hacemos habitualmente. Incluso, si optamos por un S.O. libre, podemos evitarnos el engorroso paso de instalarlo en la VM y configurarlo, descargando imágenes “prearmadas” para nosotros por la gente de VMWare y sus usuarios. Aquellas prearmadas por VMWare y sus partners son conocidas como Virtual Appliances ya que vienen con software preinstalado de tal forma que la VM ya esté lista para cumplir distintas funciones: desde servidor web, de base de datos, de juegos FPS online, hasta estaciones de trabajo preparadas para navegar por Internet de manera privada y segura, aislando por completo nuestra máquina anfitrión y sus valiosos datos de los conocidos peligros (spyware, troyanos) que implican la navegación web y el uso de archivos descargados de sitios inseguros. Podemos encontrar literalmente cientos de estas “appliances” en www.vmware.com/vmtn/appliances/directory. También es posible descargar imágenes de distintas distribuciones Linux preinstaladas, desde www.thoughtpolice.co.uk/vmware.

PARA FINALIZAR
Con lo visto hasta ahora tendremos información más que suficiente como para dar los primeros pasos en el mundo apasionante y lleno de posibilidades de la virtualización. En futuras notas profundizaremos en el tema, analizando otros productos de software que nos permitan el uso de esta tecnología en nuestra computadora personal.

Requerimientos de hardware

Seguramente, lo primero que supondremos ante la idea de tener una o más máquinas virtuales corriendo en una PC es que se requiere de una poderosa capacidad de procesamiento. En el caso de VMWare Player, utilizado en nuestras pruebas, esto es sorprendentemente relativo. No se necesita un procesador muy potente, ya que hemos corrido un Debian Linux virtual con Apache/PHP/MySQL en un equipo anfitrión con un procesador Pentium III 450 MHz, con 256 MB de RAM, y con un rendimiento más que decente. En cambio, si queremos correr varias VM, necesitaremos, al menos, 512 MB de RAM. Pero siempre debemos disponer de bastante espacio libre en el disco rígido, ya que los “discos virtuales” de las VM pueden crecer bastante a medida que instalemos software en ellas, aunque nunca superarán el tamaño máximo que hayamos definido al crearlos.

En una de estas capturas se ve un Win XP virtual corriendo en un Anfitrión Linux, y en la otra el caso inverso. Clickeando las imágenes se las puede ver ampliadas.

hostubuntu-guestxp hostxp-guestdsl

Aclaración: Este post fue publicado originalmente en la revista POWERUSR #38. TODOS LOS DERECHOS RESERVADOS. PROHIBIDA SU REPRODUCCIÓN TOTAL O PARCIAL SIN EL CONSENTIMIENTO EXPRESO DEL AUTOR. SE PERMITE EL ENLACE O LINKEO A ESTE POST SIN NINGÚN TIPO DE RESTRICCIONES.

Mi Escritorio de Windows XP con CygwinEn estos días me ocurrieron dos cosas que me llevaron a escribir este post. Una fue leer partes del excelente texto de Neal Stephenson “In The Beginning Was The Command Line” (en el link tienen la traducción al castellano del texto completo).

La otra fue donde trabajo: un usuario necesitaba unir 20 o 30 archivos de texto, con millones de líneas de texto. El archivo de texto resultante pesaba mas de 250 MB, y la memoria RAM de la estación de trabajo era de solo 256 MB. Los editores de texto para Windows que intentamos utilizar en un principio se volvían lentísimos, o se colgaban; o ambas cosas :P Para los curiosos, el único que superó la prueba fue el TextPad, que la verdad es un editor shareware de excelente calidad. De todas formas, la máquina se volvía muy lenta y el tiempo para terminar la tarea considerable; así que la solución veloz fue zipear los archivos de texto, subirlos por FTP a un server UNIX, con 1 línea de shell concatenar los archivos (for i in *.txt ; do cat $i >> archivo.txt; done) zipear el resultado y enviarlo de vuelta a la estación de trabajo. Engorroso, pero mucho mas rápido… y yo no pude evitar pensar “Si solo pudiera tener un shell decente como bash y algunas de las herramientas de Unix en una PC con Windows…”

Así que obviamente busqué por Internet, y encontré el Cygwin. Se baja un instalador de apenas 300K, que recuerda fuertemente a algunos administradores de paquetes de distintas distribuciones Linux. Para mi sorpresa, descubrí que además de las utilidades base (shells, herramientas de networking, editores de texto para todos los gustos [incluido el icónico vi!!]) también podía tener servidores (ftpd, apache, mysql) herramientas de desarrollo (gcc, perl, python) y hasta servidores de XWindows y Window Managers! Y no son otra cosa que los fuentes originales de todos estos softwares Open Source, recompilados con GCC y las librerías Cygwin, que permiten reemplazar las llamadas a las funciones del sistema operativo UNIX por llamadas a la API de Win32.

Espectacular. Bajé inmediatamente las utilidades base, herramientas de texto, todos los editores de texto que se me cruzaron, algunos chiches (fortunes!!!) y un servidor X. Bajó todos los paquetes, y se instaló todo solito y me dejó un par de accesos directos en el menú Inicio y en el Escritorio. A los pocos minutos de descarga e instalación ya tenía todo listo como para tomar y capturar la imagen que da comienzo a este artículo; haciéndole click podrán ver una versión ampliada de la pantalla, donde se ve por un lado, una clásica ventana de línea de comandos de Windows; pero en lugar del limitado CMD.EXE de M$, lo que corre en la ventanita es un poderoso shell BASH, que permite hacer maravillas en todo lo que tenga que ver con administración de archivos y programación de procesos por lotes.

Pero además, otra ventaja: el Cygwin incluye un servidor X (incluso uno acelerado con GLX!) que me permitió ya con la instalación base correr un terminal X (xterm) y otras aplicaciones de X; incluso se puede descargar y usar sobre Windows un entorno de escritorio completo como Gnome o KDE, para los usuarios más “hardcore” que extrañen demasiado usar una auténtica estación Linux.

En la imagen ampliada también se ve otra terminal X, pero en este caso está ejecutando un shell desde un equipo remoto: un servidor debian, pero el Server X de mi Cygwin me permite ejecutar en ese debian aplicaciones X, y que dichas aplicaciones corran en el servidor X de mi estación de trabajo Windows. Los “xeyes” y la ventanita de shell que se ven en el escritorio de Windows están ejecutándose en el servidor Debian remoto, permitiéndome acceder a ese equipo de mi red de una forma mucho más elegante que Telnet y utilizando sus recursos para ejecutar aplicaciones X pesadas. Yo ya había visto soluciones similares en lugares donde trabajé, pero siempre era utilizando softwares costosos y difíciles de configurar. ¿Mencioné que Cygwin es libre y gratis?

En resumen, si buscabas el poder y versatilidad de un entorno UNIX pero por distintas razones (de trabajo, o todavía mas importante, de Gaming!) te ves atado al uso de un Sistema Operativo Propietario (recuerda, Propietario Malo, Open Source bueno!) como Windows, Cygwin es una excelente solución, que recomiendo ampliamente. Que lo disfruten, happy hacking.