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.
Enlaces de interes
—
Espero que os guste
Zoperman – Vejeta