sábado, 15 de noviembre de 2008

Ejecutando aplicaciones Linux en OpenSolaris

Entre las muchas herramientas de virtualización hay una disponible únicamente en Solaris desde la versión 10 que me ha agradado especialmente (a pesar de sus defectos, que también tiene). Esta herramienta se llama Zones. Lo que más me ha sorprendido es la parte de esta herramienta que permite ejecutar un sistema Linux dentro del propio Solaris llamado BrandZ.

¿Qué es exactamente lo que permite hacer?
Bueno, como usuario de sistemas *NIX el principal quebradero de cabeza con el que nos podemos encontrar es tener un programa que no es de software libre compilado únicamente para un sistema. Si es software libre la solución es tan sencilla como descargarse el código y compilarlo, pero ¿y en este caso? Este ejemplo lo tenemos con Skype y OpenSolaris. ¿La solución? Las Zonas.

Mediante el ladrillazo que se avecina voy a contarles como montar desde cero hasta que arranca el Skype toda la Zona. Desgraciadamente uno de los puntos débiles de las Zonas de Linux son los siguientes: la versión que se instala está disponible únicamente para kernel 2.4 de linux, y aunque instalemos el soporte para el kernel 2.6 seguiremos teniendo una seria piedra en el camino. La instalación desde iso no funciona más que en la versión para kernel 2.4. Así las cosas solamente algunas distros funcionan en las Zonas, entre ellas Centos es la que mejor lo hace (seguramente por ser con la que han trabajado la gente de Sun). ¿La solución?

Primero descargarnos un tarball (imagen de disco de una distro instalada) e instalar el soporte para el kernel 2.6.

¿Empezamos?
Zonas viene instalado en las distribuciones de OpenSolaris. Yo he probado todo lo aquí comentado en Indiana sobre el build 101.

Primero instalemos el soporte para el kernel 2.6:

cd /etc/zones
wget http://www.opensolaris.org/os/community/brandz/files/SUNWlx26.xml
chown root:bin SUNWlx26.xml
chmod 444 SUNWlx26.xml


Ahora, crearemos la zona y le daremos ciertos atributos que ire explicando:
Accedemos al programa de administración de las zonas indicando el nombre de la zona que queremos administrar. Como no está creada nos dará un mensaje de aviso.
zonecfg -z Centos5
Centos5: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:Centos5>


Creamos la zona con soporte para el kernel 2.6
zonecfg:Centos5>  create -t SUNWlx26

Le asociamos un directorio donde se alacenará. Si estamos usando el sistema de ficheros ZFS se nos creará una nueva partición
zonecfg:Centos5>  set zonepath=/export/Centos5

Añadimos el interface de red. En este caso la red de mi equipo anfitrión es de tipo 192.168.1.0 con mascara de red 255.255.255.0 y el interface físico es nge0.
zonecfg:Centos5>  add net
zonecfg:Centos5:net> set address=192.168.1.39/24
zonecfg:Centos5:net> set physical=nge0
zonecfg:Centos5:net> end

Añadimos un interface de sonido
zonecfg:Centos5> add attr
zonecfg:Centos5:attr> set name="audio"
zonecfg:Centos5:attr> set type=boolean
zonecfg:Centos5:attr> set value=true
zonecfg:Centos5:attr> end

Ahora añadiremos un directorio para nuestro usuario. Aquí está una de las cosas que más me han gustado. Podemos hacer que tanto el sistema huesped como en anfitrión accedan a los mismos directorios "como si fueran recursos propios".
zonecfg:Centos5> add fs
zonecfg:Centos5:fs> set dir=/home/starman ##Este va a ser el directorio en Linux
zonecfg:Centos5:fs> set special=/export/home/starman ##Y este es el directorio en OpenSolaris
zonecfg:Centos5:fs> set type=lofs
zonecfg:Centos5:fs> end

Salvamos los cambios y salimos
zonecfg:Centos5> commit
zonecfg:Centos5> exit


Ya podemos proceder con el proceso de "instalación". Este proceso copiará la imagen del sistema que nos hemos descargado al nuevo filesystem.
root@opensolaris:/# zoneadm -z Centos5 install -d /export/home/starman/centos-5-x86_64-default.tar.gz
A ZFS file system has been created for this zone.
Installing zone 'Centos5' at root directory '/export/Centos5'
from archive '/export/home/starman/centos-5-i386-default.tar.gz'

This process may take several minutes.

Setting up the initial lx brand environment.
System configuration modifications complete.
Setting up the initial lx brand environment.
System configuration modifications complete.

Installation of zone 'Centos5' completed successfully.

Details saved to log file:
"/export/Centos5/root/var/log/Centos5.install.5479.log"


Ya tenemos nuestro sistema disponible. Si no me creen miren, miren
root@opensolaris:/# zoneadm list -iv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
- Centos5 installed /export/Centos5 lx shared

Ya solo nos queda arrancar la zona (pues ahora mismo está parada, útil esto para no ocupar recursos innecesariamente) y entrar al sistema.
root@opensolaris:/# zoneadm -z Centos5 boot
root@opensolaris:/# zlogin Centos5
[Connected to zone 'Centos5' pts/7]

[root@Centos5 ~]#
[root@Centos5 ~]# uname -a
Linux Centos5 2.6.18 BrandZ fake linux i686 i686 i386 GNU/Linux
[root@Centos5 ~]#


Ya solamente nos quedan los pasos postinstalación: el primero es crear un usuario con el mismo uid que tiene en OpenSolaris y darle de directorio home el que hemos montado.
[root@Centos5 ~]# useradd -u 101 -M -d /home/starman starman
[root@Centos5 ~]# passwd starman
Changing password for user starman.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
passwd: all authentication tokens updated successfully.


Ya por último cambiamos los siguientes parámetros es /etc/sysconfig/network
NETWORKING="yes"
HOSTNAME=linux

Y añadimos los DNS de nuestro anfitrión al huesped en /etc/resolv.conf

Por último reiniciamos Linux
[root@Centos5 ~]# init 6


En nuestro OpenSolaris creamos el sistema de claves pública y privada para acceder al sistema Linux por ssh
starman@opensolaris:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/export/home/starmano/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /export/home/starman/.ssh/id_rsa.
Your public key has been saved in /export/home/starman/.ssh/id_rsa.pub.
The key fingerprint is:
95:0d:e3:a6:45:38:91:6f:5d:67:fe:9e:09:a7:b3:09 starman@opensolaris
starman@opensolaris:~$ cd .ssh/
starman@opensolaris:~/.ssh$ ls -l
total 1
-rw------- 1 jacobo staff 951 2008-11-15 22:35 id_rsa
-rw-r--r-- 1 jacobo staff 221 2008-11-15 22:35 id_rsa.pub
starman@opensolaris:~/.ssh$ cp id_rsa.pub authorized_keys


Y bueno, ya solo queda instalar skype. Para eso nos descargamos la instalación para Centos5 y ejecutamos como root en el host Linux:
[root@linux ~]# wget http://gd.tuwien.ac.at/infosys/phone/skype/rpm-public-key.asc
[root@linux ~]# rpm --import rpm-public-key.asc
[root@linux ~]# yum localinstall /home/starman/skype-2.0.0.72-centos.i586.rpm


Una vez finalizada la instalación ejecutamos en un terminal de OpenSolaris
ssh -X 192.168.1.39 skype
y veremos con gran desasosiego que el Skype no arranca.... ¿porqué no usaríamos en el trabajo GoogleTalk maldita sea?

Seguiremos informando....

2 comentarios:

Anónimo dijo...

Muchas gracias por la entrada. Me ha sido de gran ayuda.
Salu2

Silverdew dijo...

Apart from tears, only time could wear everything away. While feeling is being processed by time, conflicts would be reconciled as time goes by, just like a cup of tea that is being continuously diluted.

........................................