Categoría: lguest

  • Configurar plan9 con el hipervisor lguest

    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

Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.