Configurar plan9 con el hipervisor lguest

By | May 4, 2008

Introducción

  • Plan9 de Bell Labs es el sistema operativo creado por los mismos laboratorios que inventaron Unix. Puede ejecutarse de manera nativa sobre diferentes arquitecturas, o tambien como máquina virtual con Qemu, Xen o Lguest.
  • Lguest está integrado en el kernel linux desde la versión 2.6.23-git13 en adelante. Para realizar el artículo se ha probado con el último kernel 2.6.25.

 

Configurando Lguest

Hay que preparar el kernel para tener el soporte de lguest  y activar varias opciones.

No es el objetivo de este artículo explicar como se configura o compila el kernel, pero puedes utilizar “make menuconfig” para seleccionar las siguientes opciones:

  "General setup":
     "Prompt for development and/or incomplete code/drivers" = Y
        (CONFIG_EXPERIMENTAL=y)

  "Processor type and features":
     "Paravirtualized guest support" = Y
        "Lguest guest support" = Y
     "High Memory Support" = off/4GB
     "Alignment value to which kernel should be aligned" = 0x100000
        (CONFIG_PARAVIRT=y, CONFIG_LGUEST_GUEST=y, CONFIG_HIGHMEM64G=n and
         CONFIG_PHYSICAL_ALIGN=0x100000)

  "Device Drivers":
     "Block devices"
        "Virtio block driver (EXPERIMENTAL)" = M/Y
     "Network device support"
        "Universal TUN/TAP device driver support" = M/Y
        "Virtio network driver (EXPERIMENTAL)" = M/Y
           (CONFIG_VIRTIO_BLK=m, CONFIG_VIRTIO_NET=m and CONFIG_TUN=m)

  "Virtualization"
     "Linux hypervisor example code" = M/Y
        (CONFIG_LGUEST=m)

 

Configurando el soporte de red (Bridging o NAT)

La máquina virtual usará un interfaz de red virtual, mediante bridging o NAT.

En este caso, utilizaremos NAT, para lo cual tambien necesitaremos soporte de NAT en el kernel si no lo tuvieramos:

 

Networking  ---->
 Networking options  ---->
  Network packet filtering framework (Netfilter)--->
   Core Netfilter Configuration ---->
    <*> Netfilter connection tracking support
    <*> Netfilter Xtables support (required for ip_tables)
    <*>   "NFLOG" target support
    <*>   "conntrack" connection tracking match support
    <*>   "state" match support
   IP: Netfilter Configuration --->
    <*> IPv4 connection tracking support (required for NAT)
    <*> IP tables support (required for filtering/masq/NAT)
    <*>   Packet Filtering
    <*>     REJECT target support
    <*>   Full NAT
    <*>     MASQUERADE target support

Compilamos el kernel: make
Instalamos el kernel: make install
Instalamos los modulos: make modules_install

Compilando el binario de lguest

Bajo el arbol de directorios donde tengamos las fuentes de linux (en mi caso es /usr/src/fuentes/linux), vamos al siguiente subdirectorio:

cd Documentation/lguest/

y ejecutamos “make” para generar el binario ejecutable de lguest.

vejeta:/usr/src/fuentes/linux/Documentation/lguest# make
cc -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include    lguest.c  -lz -o lguest

 

Obtener el kernel modificado y la imagen de Plan9 para lguest (THNX)

 

  • 9lguestcpu.2.6.25.elf.   Es el kernel modificado para arrancar Plan9 bajo lguest.
wget http://sirviente.9grid.es/sources/contrib/rminnich/lguest/9lguestcpu.2.6.25.elf
  • THNX – “Tiny Horrible NOT Xen” es la imagen preinstalada de Plan9 que fue creada por Ron Minnich para funcionar bajo lguest. (300Mb comprimidos, 1.6Gb al descomprimir)
wget http://usuarios.lycos.es/vejeta/plan9/thx9.img.bz2

 

Descomprimir:

bzip2 -d thx9.img.bz2

 

Haciendo NAT para el interfaz de red tap0

 

Crear el script: NATME con las siguientes líneas y ejecutarlo.

iptables --append FORWARD --in-interface tap0 -j ACCEPT
iptables --table nat --append POSTROUTING --out-interface  eth0  -j MASQUERADE
iptables -t nat --list
echo 1 > /proc/sys/net/ipv4/ip_forward

 

Arrancando Plan 9 con lguest

Hay que reiniciar el ordenador para arrancar con el nuevo kernel y ya podemos arrancar lguest.

Primero cargamos el modulo de lguest con los parámetros que se indican.

modprobe lg syscall_vector=64

Arrancando lguest con Plan9 virtualizado.

/usr/src/fuentes/linux/Documentation/lguest/lguest 256 /usr/local/tmp/plan9/lguest/9lguestcpu.2.6.25.elf \
--tunnet=192.168.19.1 \
--block=/usr/local/tmp/plan9/lguest/thx9.img \
'venti=#S/sd00/arenas;bootdisk=local!#S/sd00/fossil;bootargs=local!#S/sd00/fossil;lguestnetwork=NAT;'
  • 256 indica la RAM que tendra la máquina virtual.
  • 9lguestcpu.2.6.25.elf.  Es el kernel que ejecutará la máquina virtual.
  • –tunnet=192.168.19.1. Configura un dispositivo de red “tap” con la dirección IP indicada.
  • –block=/usr/local/tmp/plan9/lguest/thx9.img.  Es  el dispositivo de bloques (block device) que en este caso contiene la imagen de plan9 preinstalada.

 

La imagen de Plan9 está preparada para funcionar como “cpu”, es un servidor de Plan9 el cual sirve a terminales Plan9.

 

Conectando a la máquina virtual Plan9 con drawterm

 

Si aún no tienes un terminal Plan9, puedes usar drawterm compilando los fuentes, o usando un binario ejecutable para tu sistema operativo.

 

drawterm -u bootes -a 192.168.19.2 -c 192.168.19.2

La clave o password es: lguestgood

La siguiente imagen muestra la ventana de drawterm, con el navegador abaco y acme. De fondo se ve el terminal donde arrancamos lguest.

 

lguest_thnx

 

 

Enlaces de interes

Espero que os guste

Zoperman – Vejeta

Leave a Reply

Your email address will not be published. Required fields are marked *