Diez sistemas operativos en una netbook

Mi buen amigo Efraim es de esos informáticos que la tienen muy pero muy clara. Es de los administradores que hacen su trabajo con seriedad, pero de forma casi imperceptible para que las redes de las organizaciones sigan funcionando a pesar de las barbaridades que se ven en los desarrollos que corren sobre ellas (y de esas anécdotas hay para hacer un libro). Tiene, eso sí, la costumbre de exprimir al máximo todo hardware que pasa por sus manos; de hecho más de una vez lo he encontrado dejado procesando equipos una semana entera para entrenar redes neuronales.

Entre esos arranques -que a mi no se me ocurren ni por casualidad- se preguntó que tal andaría una netbook con diez sistemas operativos corriendo a la vez. Nueve Ubuntu(s), para ser preciso, virtualizados con KVM + KSM sobre un Debian que actúa de host, y todos al mismo tiempo y todos en una netbook. Contrario a lo que uno hubiera esperado, la verdad se la bancó muy bien, manteniendo responsivo el escritorio, como pueden ver por la captura de pantalla (de paso, con compiz). Allí está ingresando en uno de los virtualizados, mientras los restantes aún muestran la pantalla de inicio de sesión.

Por supuesto que no es cualquier netbook; de todas las que hay en el mercado, esta belleza de Asus [ver reviews 1 y 2] tiene un procesador de 64 bits y virtualización por hardware, lo que hace posible semejante comportamiento.

Maquinas virtuales como escritorios con VirtualBox y Debian Lenny

Hace un tiempo un colega me comentó una idea bastante extraña que tenía para máquinas virtuales, que podría ayudarle a administrar algunos sistemas bajo su dominio. Me había quedado pendiente publicar este post al respecto.

Viene más o menos así: un lote de computadoras utilizadas en forma alternada por varios usuarios, cada uno de los cuales requiere un conjunto dado de programas instalados; algunos de estos programas son incompatibles entre sí por diferencias de versiones, o presentan conflictos con el sistema operativo, o requieren privilegios de administración, etc.

Entonces pensó en una solución posible utilizando máquinas virtuales para cada usuario, donde tuviera instalado el software que requiere con los privilegios que requiere y con independencia del resto de los usuarios. De esta forma cada persona que llega debería ingresar al sistema, iniciar la aplicación de virtualización, seleccionar e iniciar su máquina virtual, y realizar el procesamiento que requiera. Al finalizar, debería apagar la VM y luego cerrar la sesión en el sistema. Lo mismo que hacemos todos aquellos que usamos VMs.

Pero – dijo – no estaría mal presentarle al usuario una lista de máquinas disponibles ni bien ingresa al sistema, de manera tal de no requerir iniciar la aplicación de virtualización. O mejor, iniciar la máquina virtual asignada al momento de iniciar sesión y presentarla al usuario como si fuera el escritorio real. Al apagar la máquina virtual, el sistema debería volver a la pantalla de login.

Bien, independientemente de que sea una buena o mala solución utilizar VMs, el concepto es interesante.

¿Es posible? Veamos si se puede realizar en forma sencilla con VirtualBox…

1. Preparando el Host

1.1. Instalar con el sistema operativo, en este ejemplo será Debian GNU/Linux 5.0 Lenny con una instalación base. Ni “entorno de escritorio”, ni “sistema estándar”, ni nada de eso: la idea es mantenerlo lo más sencillo posible.

1.2. Una vez instalado, generalmente desactivo la instalación de paquetes recomendados para no cargar el sistema con paquetes prescindibles. Para ello:

# echo "APT::Install-Recommends \"false\";" >> /etc/apt/apt.conf

1.3. Sobre el S.O. instalar Xorg, LXDE para la administración y GDM como gestor de sesiones. En realidad, es posible utilizar Openbox o Fluxbox solamente y prescindir de LXDE, pero a fines didácticos dejaremos el entorno completo.

# aptitude install xorg lxde gdm

1.4. Sobre esto instalar VirtualBox OSE y los módulos requeridos, que serán cargados automáticamente al iniciar el sistema real.

# aptitude install virtualbox-ose virtualbox-ose-modules-`uname -r`
# echo vboxdrv >> /etc/modules

2. Creando las cuentas de usuario

2.1. Ahora es el turno de crear las cuentas de usuario que tendrán acceso a las máquinas virtuales. Para este ejemplo definiremos tres usuarios que llamaremos asterix, obelix y getafix (algún patrón conocido):

# adduser asterix
# adduser obelix
# adduser getafix

2.2. Es necesario añadir estos usuarios al grupo vboxusers para que puedan utilizar las máquinas virtuales. Es posible hacerlo en la creación, pasando un parámetro al comando adduser, pero así queda bien explícito:

# adduser asterix vboxusers
# adduser obelix vboxusers
# adduser getafix vboxusers

2.3. Reiniciar el equipo para que tome los cambios. Alternativamente es posible cargar vboxdrv y e iniciar GDM. En cualquier caso, al finalizar se verá la pantalla de inicio de sesión. Opcionalmente puede configurarse el gestor gráfico para que muestre la lista de usuarios disponibles (Menú Acciones / Configurar el gestor de entrada).

3. Creando la máquina virtual para un usuario

3.1. Ingresar bajo el nombre de usuario cuya VM se desea crear e iniciar VirtualBox.

3.2. Allí definir una máquina virtual de la manera tradicional, nombrándola igual que el usuario (asterix, en este ejemplo) y estableciendo la memoria a utilizar, el sistema operativo, el tamaño de disco, etc…

3.3. Una vez creada la VM, iniciarla y proceder a instalar el sistema operativo deseado mas las aplicaciones requeridas. Adicionalmente, instalar las “Aplicaciones del huésped” (guest tools) en la máquina virtual.

3.4. Al finalizar, apagar la VM correctamente y cerrar VirtualBox.

4. Estableciendo el inicio de la máquina virtual al inicio de sesión

4.1 Crear un archivo de texto llamado .xsession en el home del usuario, conteniendo lo siguiente:

#!/bin/sh
exec VBoxSDL -vm $USER -fullscreen

4.2. Cerrar la sesión de usuario y volver a iniciar sesión. La máquina virtual deberá iniciar automáticamente en pantalla completa.

4.3. Para salir / cerrar, apagar del sistema operativo virtual, o bien pulsar CtrlDer+H, o CtrlDer+Q. El sistema deberá cerrarse correctamente y volver a la pantalla de inicio de sesión.

5. Crear las máquinas para los restantes usuarios

… procediendo de manera análoga al caso anterior.

6. ¡Listo!

Ya tenemos una VM Jukebox en el equipo, o algo por el estilo. Ahora a por una buena taza de café.

I. Algunas notas adicionales

I.1. Es posible utilizar VirtualBox 2.1.4 (en vez de 1.6.6), añadiendo el repositorio testing en /etc/apt/sources.list e instalando los módulos apropiados mediante module-assistant.

I.2. Se puede cambiar la configuración de inicio de cada VM desde el mismo script en .xsession. Por ejemplo, si se desea iniciar la máquina virtual con 64 MB de ram, el script deberá contener

exec VBoxSDL -vm $USER -fullscreen -m 64

o para iniciar con una imagen ISO en la unidad de CD virtual:

exec VBoxSDL -vm $USER -fullscreen -cdrom ARCHIVO.ISO -boot d

I.3. Para cambiar la tecla con la cual se administra la máquina virtual, por ejemplo con la tecla WIN Derecha (en vez de con Ctrl Derecha), utilizar:

exec VBoxSDL -vm $USER -fullscreen -hostkey 312 0

donde el valor del parámetro hostkey define la tecla a utilizar. Ejecutando el comando VBoxSDL -detecthostkey en una terminal es posible obtener el parámetro correspondiente al conjunto de pulsaciones deseado.

Bueno, todo esto para ver si la idea era posible usar una máquina virtual como escritorio. Pues resulta que sí, con algunos comandos y tres líneas de código (4.1).
Creo que no me olvidé ningún paso, en caso contrario, me avisan.

Suerte y saludos!

Actualización 2010: Charly (un maestro!) me ha hecho saber que en Ubuntu 9.10 Karmic, el archivo .xsession es ignorado totalmente, por lo cual al iniciar sesión el usuario vuelve al escritorio de Gnome en vez de ver iniciar la máquina virtual. No tengo idea qué es lo que tuvo en mente la gente de Ubuntu con este extraño comportamiento, pero ya hay varios bugs reportados [398300, 459122, 465349] con algunos parches posibles.

benchvm, una aproximacion al benchmarking de maquinas virtuales

En el post anterior hacía referencia a un intento de estudio de la performance de distintos productos de virtualización.

En realidad, existen actualmente algunos datos interesantes al respecto que pueden verse en la presentación Quantitative Comparison of Xen and KVM realizada por Todd Deshane de la Clarkson University para el reciente Xen Summit 2008 (slides, abstract y video disponibles). Entre el software utilizado en la presentación están la Isolation Benchmark Suite y benchvm.

Isolation Benchmark Suite es un conjunto de herramientas destinado a “cuantificar el grado en que un sistema de virtualización limita el impacto de un comportamiento defectuoso de máquina virtual en las otras máquinas virtuales corriendo en la misma máquina física”. En otras palabras, cuánto hace el hipervisor por limitar el impacto de un mal comportamiento de una máquina virtual en el funcionamiento de las restantes. La IBS comprende seis diferentes pruebas de estrés: uso intensivo de CPU, uso intensivo de memoria, una bomba fork, uso intensivo de disco y dos pruebas de uso intensivo de red, en envío y recepción.

Benchvm, por otro lado, es una implementación modular de la solución propuesta en el borrador del paper The Woes of the Art of Virtualization Benchmarking. Es un incipiente proyecto de Zach Sheperd y otros estudiantes de la C.U. para comparar la variedad de soluciones de virtualización mediante distintas métricas sobre un diverso conjunto configuraciones de hardware y software.

En fin, son sólo algunos datos más para tener en cuenta antes de evaluar las diferentes soluciones existentes, y que reflejan lo joven que es aún la tecnología de virtualización en el ámbito de la informática.

Más sobre virtualización

Brian Madden, autor de la polémica y bastante comentada predicción sobre Citrix dejando de lado al hipervisor Xen open source, ha publicado recientemente su intención (bajo contrato y por petición de Qumranet, los creadores de KVM) de hacer un benchmark de los principales productos de virtualización para infraestructura de escritorios virtuales. La verdad que no vendría nada mal tener un estudio del estilo a la fecha, aunque quizá hubiera sido más interesante un enfoque centrado en el área de servidores.

Como introducción y para tener un buen panorama sobre de la situación actual en este ámbito, él recomienda leer el artículo Microsoft Hyper-V: the day after de Virtualization.info.

No XEN que KVM utilizar, si VMware u OpenVZ

A la hora de tomar una decisión respecto de que plataforma de virtualización utilizar, las cosas se tornan complejas:

Lo bueno, es que las alternativas son variadas.
Lo malo, es que todas y cada una de ellas tiene un pero.

  • Xen parece una de las más completas y no requiere soporte de virtualización en el hardware, pero no está integrada al kernel de Linux y viene medio rezagada respecto de los últimos kernels.
  • KVM sí está integrada al kernel de Linux y es muy sencilla de utilizar, pero requiere Intel VT o AMD-V.
  • VMware es quizá el santo grial de la virtualización, pero implica tener que ensuciar el sistema operativo subyacente y atarse a su tecnología.
  • OpenVZ y Linux-VServer tienen muy buena performance, pero son más que nada contenedores y limitan a los guests a utilizar el mismo kernel del host.

En fin, todavía no hemos decidido. Es cuestión de seguir con las pruebas…

Actualización: al final terminamos usando KVM, sin virt-manager, pero con muy buenos resultados.

Nuevas incorporaciones a Debian

Parece que la comunidad Debian no se queda quieta y continúa mejorando cada día. Recientemente añadieron al repositorio inestable, entre otros, dos aplicaciones muy interesantes:

La primera es la versión open-source de Virtualbox, una solución de virtualización gratuita que permite correr una amplia variedad de sistemas operativos sobre el sistema Linux. Virtualbox permite correr, como guest, Windows (98, NT 4.0, 2000, XP, Server 2003, Vista), DOS/Windows 3.x, Linux (2.4 and 2.6), FreeBSD, OpenBSD y otros.

La segunda es la implementación de una idea que hace mucho tiempo tuvo un gran amigo mío, que se vé que no es el único loco, y que yo creí irrealizable: Debtorrent.

Qué es debtorrent? DebTorrent es un proxy que permite bajar paquetes con APT, desde otros pares.

El cliente DebTorrent actúa como demonio y escucha peticiones de archivos desde APT. Los archivos que no son paquetes son descargados y servidos a APT en forma similar al resto de los proxies (apt-proxy, etc.).

Cuando se solicitan paquetes, el cliente DebTorrent intentará utilizar cualquier otro cliente DebTorrent que encuentre, utilizando el ancho de banda de subida de sus pares, reduciendo así la demanda a los espejos de la red de Debian. Si un paquete no se encuentra en ningún par, DebTorrent intentará descargarlo desde un mirror estándar.

La configuración es muy simple y sólo involucra prefijar un servidor y puerto al archivo sources.list actual.

En resumen, dos buenos paquetes para probar y tener en cuenta en la instalación de nuestro sistema operativo favorito.

Servidores virtuales en Debian con VServer (parte I)

Se dice que

“Necesidad, que es la madre de la invención” – Platón en “La República”. (1)

por supuesto algunos disienten,

“No pienso que la necesidad es la madre de la invención – la invención, en mi opinión, surge directamente de la ociocidad, posiblemente también de la holgazanería. Para ahorrarse problemas uno mismo.” – Agatha Christie en “Una Autobiografía”. (2)

En cualquier caso, menos mal que lo que yo necesitaba ya estaba inventado (punto a favor para la definición 2).

El tópico de hoy es Servidores virtuales en Debian con VServer. Pero primero ¿qué es un servidor virtual?

“Un servidor virtual privado (también designado como servidor virtual dedicado o servidor virtual y abreviado como VPS o VDS) es un servidor que se ejecuta mediante virtualización en tándem con otros servidores virtuales en una computadora física.” – Wikipedia

Las posibilidades en virtualización son varias, cada una con un buen compendio de ventajas y desventajas. Pueden encontrar una comparativa de máquinas virtuales en Wikipedia. Las implementaciones más conocidas son:

El sistema operativo en mi máquina de trabajo es Debian Etch, una versión de Debian que aún no está liberada como estable (aunque pronto lo estará). Nuestros servidores corren actualmente Debian Sarge (la versión estable actual) con las correspondientes actualizaciones de seguridad.

La virtualización es útil, en mi caso, para verificar el comportamiento de las aplicaciones en el entorno de trabajo en el que serán ejecutadas sin necesidad de tener un equipo adicional ni requerir un inicio dual con dos sistemas operativos en el equipo de desarrollo (lo que sería sumamente tedioso dado implica reiniciar el equipo para cambiar entre el entorno de desarrollo y el de implementación).

De las opciones anteriormente mencionadas opté por Linux-VServer sin muchas razones más que la facilidad de instalación.

La tecnología Linux-VServer es, según su página web:

… un concepto de particionamiento liviano basado en Contextos de Seguridad que permite la creación de muchos Servidores Virtuales Privados (VPS) independientes que se ejecutan simultáneamente sobre un único servidor virtual a máxima velocidad, compartiendo eficientemente los recursos de hardware.
Un VPS provee un entorno operativo casi idéntico al de un servidor Linux convencional. Todos los servicios como servidores de ssh, correo, web y bases de datos pueden ser iniciados en e VPS, sin modificación (o con mínimas modificaciones en casos especiales), tal como cualquier en otro servidor real.

Cada VPS tiene su propia base de datos de cuentas de usuarios y su propio usuario root, y está aislado de los demás servidores virtuales, exceptuando el hecho de que comparten los mismos recursos de hardware.”

A diferencia de Xen, donde un host puede ejecutar VPS con distintos sistemas operativos, Linux-VServer es un virtualizador que opera a nivel de Sistema Operativo y utiliza el mismo kernel en el host y en los diferentes VPS, con lo cual está limitado a Linux, y preferentemente a la misma distribución que el host. Esta característica le brinda a su vez una gran ventaja: muy buen rendimiento. Pueden encontrar mucha más información leyendo el Paper sobre Linux-VServer disponible en la web del proyecto.

Esta guía es una traducción con ligeras modificaciones de “Linux-Vserver on Debian Testing (Etch), the easy way“, publicada en el sitio HowtoForge.

1. Preparación del host

Necesitaremos una imagen de kernel con los parches para VServer. Debian ya nos provee imágenes preparadas, de las cuales se puede optar para la más conveniente de acuerdo a la arquitectura del host. En mi caso, descargaré linux-image-vserver-k7.

# apt-get install linux-image-vserver-k7

También será necesario descargar las utilidades para VServer:

# apt-get install util-vserver vserver-debiantools

Una vez hecho todo esto se debe reiniciar el equipo para iniciar con el nuevo kernel. Al finalizar el arranque, verificar que el kernel iniciado es el que contiene los parches VServer con

# uname -r
2.6.18-3-vserver-k7

Este kernel no es muy diferente al estándar, los módulos disponibles son prácticamente los mismos. Incluso es posible iniciar un servidor X (si es que no inició automáticamente), aunque sólo lo recomiendo si tienen bastante memoria disponible (mas de 512, preferentemente).

2. Creación de un servidor virtual

Antes de continuar debemos establecer ciertas variables que serán necesarias para la creación del nuevo VPS:

  • vsroot – Esto apuntará a un directorio o partición donde se mantendrán los archivos para cada VPS. Por defecto es /var/lib/vservers
  • Hostname – El hostname de nuevo sistema
  • Domain – El dominio del nuevo sistema (usualmente el mismo de host)
  • IP Address– La dirección IP del nuevo VPS
  • CIDR Range – La máscara de la IP anterior
  • Dist – La distribución a instalar
  • Debian Mirror – El espejo desde el cual se deben descargar los paquetes
  • Interface – La interfaz de red a utilizar, si no es eth0

Para este ejemplo, crearé un servidor virtual con los siguientes datos:

  • vsroot: /var/lib/vservers
  • hostname: mendieta
  • domain: example.com
  • ip address: 192.168.3.101 <= puede ser pública o privada
  • máscara: /24
  • dist: sarge
  • mirror: http://ftp.br.debian.org/
  • interface: eth0

Nota: si son impacientes y no quieren esperar a bajar los paquetes desde el mirror porque tienen un CD de Sarge, pueden montar rápidamente un mirror casero aprovechando un servidor web o ftp existente. Por ejemplo utilizando vsftpd, solo deben crear un directorio debian dentro de la raíz anónima (usualmente /home/ftp) y copiar allí los directorios /pool y /dist del cdrom (o crear un enlace simbólico, lo que prefieran) . En tal caso el mirror será http://localhost/debian/
De esta forma se agiliza mucho la instalación. No hay que olvidarse de, en el corto plazo, efectuar una actualización contra los repositiorios security.debian.org, a fin de no quedar utilizando versiones comprometidas de los servicios disponibles.

Bien con eso alcanza para crear el primer VPS. Sólo hay que llamar a newvserver con los parámetros dados:

# newvserver –vsroot /var/lib/vservers/ –hostname mendieta –domain example.com –ip 192.168.3.101/24 –dist sarge –mirror ftp://localhost/debian/ –interface eth0

Tras un ratito de descarga y configuración donde hay que responder algunas preguntas (la clave que se asignará a root, por ejemplo), el VPS estará disponible.

3. Control del servidor virtual

Para controlar el servidor virtual se utiliza el comando vserver de la siguiente forma:

vserver [start | stop | restart | enter]

Por ejemplo, para iniciar el servidor recientemente creado, solo hay que ejecutar

# vserver mendieta start

Si se desea detener el VPS, reemplazar start por stop.

Finalmente, para ingresar al servidor virtual, se debe ejecutar:

# vserver mendieta enter
mendieta:/#

Y allí ya tenemos un VPS con Debian Sarge en el cual podemos instalar lo que sea necesario utilizando apt-get o aptitude.

Hasta acá llego con el post de hoy. La segunda parte tratará sobre la instalación y configuración de servicios tanto en el VPS como en el host, y el establecimiento de reglas de enrutado a fin de permitir el acceso externo a los servicios brindados por el VPS.

Como siempre, espero que todo haya sido de utilidad.

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress