Guía Rápida para usar KVM en CentOS-5

Observe que esto es un trabajo en progreso al momento de escribir este artículo (Abril, 2008). KVM es frecuentemente actualizado y mejorado. Los números de versión usados en este artículo puede que hayan cambiado en el momento en que estes leyendo esto.

1. Preparación e Instalación

Necesitas tener un modelo de procesador con soporte para virtualización, para que KVM funcione de forma adecuada. Esto es posible saberlo examinando /proc/cpuinfo. Si tiene un procesador Intel entonces ejecute:

grep vmx /proc/cpuinfo

Si se obtienen resultados, su procesador esta listo para usar KVM. Si tiene un procesador AMD entonces debe ejecutar:

grep svm /proc/cpuinfo

Si no está seguro de que tipo de procesador tiene, entonces ejecute:

grep 'vmx|svm' /proc/cpuinfo

(Si se obtienen resultados con vmx, entonces su procesador es Intel, si los obtiene con svm, entonces su procesador es AMD. Si no se obtuvieron resultados, entonces su sistema no tiene un CPU construido para la virtualización. Por lo que es mejor probar con otro tipo de virtualización como la que ofrece VirtualBox).

El paquete KVM para CentOS está disponible en los repositorios extras. Puede instalar KVM ejecutando:

yum install kvm kmod-kvm

Cuando este artículo fue escrito (Abril, 2008), la versión estable era kvm-36. El paquete del módulo del kernel kmod-kvm es kernel versión/tipo-específico. Este está disponible para el último kernel 2.6.18-53.1.14 y para los tipos estándar y -PAE. También si estás ejecutando un kernel de centosplus y el yum está configurado apropiadamente, kmod-kvm para el kernel de centosplus se instalará automaticamente.

El repositorio CentOS-Testing contiene una nueva versión de KVM (Actualmente kvm-66) la cual está bajo prueba. Si usted desea probarla, necesita configurar el repositorio de pruebas (refiriendose a Repositorios), entonces instale KVM ejecutando:

yum install --disablerepo=\*  --enablerepo=c5-testing kvm kmod-kvm

A diferencia de KVM en el repositorio extras, solo el actual (2.6.18-53.1.1.14), la versión estandar del kernel de kmod-kvm está disponible en el repositorio testing hasta el momento. Esta no es una versión para el kernel PAE. Si tiene kernel de centosplus, entonces necesita instalar manualmente kmod-kvm (Vea debajo para más detalles).

Probablemente también desee instalar QEMU, si es así, entonces este comando puede serle de utilidad.

yum install qemu

Sin embargo esto no es esencial. El siguiente paso es hacerle modprobe al modulo kvm para la arquitectura de su máquina. Si es un procesador Intel ejecute:

modprobe kvm-intel

Si es un procesador AMD:

modprobe kvm-amd

Si todo salio bien, debería tener cargado el modulo kvm en el sistema en este momento, puede chequear esto ejecutando:

/sbin/lsmod | grep kvm

Agrege el usuario que va a ejectura kvm en el grupo kvm. Si el nombre del usuario el john, entonces ejecute:

usermod -G kvm -a john

Si está haciendo esto como el usuario john y usando su o sudo para ejecutar el comando anterior, necesitará salir completamente de la sesión y volver a loguearse nuevamente para que esto tome efecto.

Después de hacer modprobe, no es mala idea reiniciar el sistema para estar seguro de que se cargo el modulo, y el dispositivo /dev/kvm está asignando los permisos adecuados para 'udev'. Ahora, debe de habe run script en /etc/sysconfigmodules/kvm.modules. Una vez que haya reiniciado, vea si el modulo ha sido cargado usando /sbin/lsmod. Debería ver ambos modulos, un kvm y un kvm-intel o kvm-amd.

Si selecciona evitar un reinicio, puede establecer los permisos apropiados en el dispositivo /dev/kvm con los siguientes comandos:

chown root:kvm /dev/kvm
chmod 0660 /dev/kvm

En un posterior reinicio udev le asignará al dispositivo los permisos apropiados.

2. Creando una maquina virtual

Si tiene qemu instalado, ahora puede usar el comando create para hacer la imagen de disco:

qemu-img create -f qcow2 disk.img 5G

En este caso, está creando una imagen que puede crecer hasta los 5 Gb. Aunque solo usará la cantidad de espacio que necesite. El -f qcow2 es el estandar de formato moderno para imagenes qemu, (-f como en formato). Si usted no instaló qemu, todavía será capaz de crear una imagen de disco con el comando:

dd if=/dev/zero of=disk.img bs=1G count=5

El count será el tamaño en Gb. En este caso, el archivo .img asumirá los 5 Gb completos en el espacio asignado de su disco duro, independientemente de las necesidades actuales del SO huésped. Si el ratón no funciona con qemu (por ejemplo, un raton PS/2 conectado a través de un switch KVM), siga este procedimiento. Las páginas man ofrecen opciones para un ratón USB, siendo el PS/2 que esta por defecto. Una busqueda rápida en Google brinda la solución desde the Cape Linux User Group's wiki. Antes de arrancar kvm hacemos:

export SDL_VIDEO_X11_DGAMOUSE=0

Esto debe resolver el problema del ratón.

Si desea instalar una máquina virtual con Windows 2000, el comando actual, hay o no instalado qemu, es qemu-kvm. Para aquellos familiarizados con qemu, este toma las mismas opciones. Copie el iso en el disco duro y entonces ejecute el comando:

qemu-kvm -hda win2k.img -cdrom win2k.iso -m 512 -boot d

Esto está explicado en las páginas man de qemu-kvm. En este caso, la imagen creada ha sido nombrada win2k.img y el iso fue llamado, como seguramente adivinarás win2k.iso. el -hda es el disco virtual que has creado. -cdrom espara el dispositivo CDROM. Si estas booteando por el cdrom desde el dispositivo CDROM de la máquina hospedera, entonces debería usar -cdrom /dev/cdrom. El -m es el tamaño en memoria en Mb que le fue otorgada a la máquina virtual. El boot significa que deber bootear desde el dispositivo CDROM. Si todo ha salido bien, ahora se debería ejecutar como si estuviésemos instalando en nuestro disco. Una vez hecho, podrá, afortunadamente, bootear en una instalación virtual de trabajo de Windows 2000. Después de eso,cuando quiera ejecutarla, lo podrá hacer del mismo modo. Exporte el SDL_VIDEO si es necesario y solo reinicie la máquina con:

qemu-kvm -hda win2k.img

(Si necesita el dispositivo de cd de la máquina hospedera, entonces probablemente sea necesario añadir la opción - cdrom. La opción -boot, es solo usada cuando booteamos desde un CD.)

3. Redes

3.1. Redes NAT

Por defecto kvm (asi como QEMU y VirtualBox) usan redes NAT. Este toma una dirección 10.0.2.x. Puede acceder la LAN del hospedero, a pesar de la subred - que sea, si el hospedero esta en la subred 192.168.1.x, incluso aunque el huésped tenga una IP 10.0.2.x podrá acceder al hospedero (o a cualquier máquina en la red) con ssh o samba. También podrá navegar en Internet. Algunos clientes VPN pueden no funcionar. En el pasado, no parecia posible el uso de NAT (también conocidos como slirp) con un cliente VPN Nortel. Sin embargo un cliente VPN Checkpoint funcionará.

3.2. Redes Bridged Tap

Si desea que el huésped aparezaca en la LAN como otra máquina, visible para el resto de la red, necesitará usar redes bridged. Existen muchos COMO's para QEMU por ahí, pero muchos están desactualizados, estos han cambiado desde el kernel 2.6.18. Aqui describimos un sencillo y funcional metodo. Muchos COMO's hablan de hacer un script qemu-ifup que resida en /etc. Desafortunadamente, muchos de los COMO's parecen estar desactualizados, asi como ninguno de los scripts sugeridos han funcionados. Debajo presentaremos un script que crea el bridge y la interfaz tap con los comandos apropiados.

Primero necesitaremos bridge-utils, disponible en los repositorios base:

yum install bridge-utils

También necesitaremos tunctl. Hay un rpm que funciona en el sitio de Descargas de Fedora. Este vínculo lo llevara al directorio de desarrollo. Allí podrá ver un directorio i386 y otro x86_64. Seleccione el apropiado para la arquitectura de su máquina y entre en el directorio os/Packages. Localize el rpm de tunctl. Este esta marcado como fc9, pero funciona en CentOS 5.1. Descarguelo e instalelo con el comando:

rpm -Uvh tunctl-<version.arch>.rpm

Incluso querrá editar su /etc/udev/rules.d/90-kvm-rules.Cuando instale el rpm, el archivo creado se leerá:

KERNEL=="kvm",          NAME="%k", GROUP="kvm", MODE="0660"

Agrege la línea:

KERNEL=="tun",          NAME="%k", GROUP="kvm", MODE="0660"

Para los impacientes, aqui esta nuestro script. Luego lo explicaremos. Esto es asumiendo que usted está en una red 192.168.1.0/24 sin servidor DHCP

#!/bin/sh
PATH=$PATH:/usr/sbin:/sbin
sudo brctl addbr br0
sudo ifconfig eth0 0.0.0.0
sudo brctl addif br0 eth0
sudo ifconfig br0 192.168.1.120 netmask 255.255.255.0 up
sudo route add -net 192.168.1.0 netmask 255.255.255.0 br0
sudo route add default gw 192.168.1.1 br0
sudo tunctl -b -u john
sudo ifconfig tap0 up
sudo brctl addif br0 tap0
export SDL_VIDEO_X11_DGAMOUSE=0
sudo iptables -I RH-Firewall-1-INPUT -i br0 -j ACCEPT
qemu-kvm ~/win2k.img -m 512 -net nic -net tap,ifname=tap0,script=no

Aquí esta lo que hemos hecho. Hemos usado sudo, pero usted podrá usar su hasta la linea que ejecuta qemu. En CentOS, solo el PATH de root tiene /sbin/ y /usr/sbin, pero la mayoria de estos comandos están localizados en uno de estos dos directorios. Por lo tanto comenzaremos adicionandolo al PATH del usuario. Creamos un bridge, br0, con el comando brctl addbr. Como vamos a agregar eth0 al bridge, tenemos que llevar a 0 su salida, lo que vamos a hacer con el ifconfig eth0 0.0.0.0.

Observe que cuando cambiamos la dirección de eth0 a 0.0.0.0, temporalmente perderemos la conectividad hacia la red. Por tanto, no trate de hacer esto de forma remota, o en un momento en que no quiera perder brevemente su conectividad. El próximo comando agrega eth0 al bridge y le da al bridge eth0 la anterior dirección. Si su tarjeta ethernet toma la dirección de un DHCP, puede sustituir el comando ifconfig y route con:

dhclient br0

El comando tunctl agrega una interfase tap0 y le asigna permisos al usuario john. Entonces es levantado con ifconfig. Observe que no se ha asignado una dirección IP. Ahora agrege tap0 a br0. La próxima linea DMOUSE puede que sea necesaria si tiene un huésped Windows. Las reglas del iptables van a permitir el tráfico hacia el bridge. Si no insertamos esta regla, la máquina virtual será incapaz de usar DNS y DHCP. Finalmente levantamos qemu-kvm.

Hemos explicado casi la mayoria de los pasos, pero observe que -net nic -net tap, if=tap0,script=no es parte de esto. Todo esto parece necesario. Como mencioné, no hemos sido capaces de hacer trabajar qemu-if. Sin embargo, kvm-qemu espera encontrar semejante script y si no lo encuentra, puede haber problemas. Para eso, tenemos la opción script=no. Cuando todo esté hecho, qemu-kvm debe iniciar.

Si usted tiene un servidor DHCP en su red, incluso si su máquina tiene una dirección estática, el Sistema Operativo huésped debe ser capaz de recibir una dirección desde el servidor, de otra manera, deberá configurar la dirección IP del huésped de la misma manera que en que lo hace en cualquier LINUX, BSD o sistema Windows.

4. Probabilidades y Resultados

[1] Si estas ejecutando un kernel centosplus y desea probar kvm de un repositorio de prueba, necesita hacer lo siguiente. Primero, instale el kernel 2.6.18.53.1.14 de la distro (pero no necesitas iniciar con este kernel) Esto es porque kmod-kvm requiere el kernel de la distro. Kmod-kvm instala el módulo dentro de /lib/modules/2.6.18.53.1.14.el5/extra/kvm. Copie estos modulos para /lib/modules/2.6.18.53.1.14.el5.centos.plus/extra/kvm.

[2]Si ya tiene VirtualBox o VMWare en su máquina, no funcionarán bien con qemu-kvm. Por ejemplo, si regularmente usa VirtualBox y no quiere que el modulo kvm sea cargado en el arranque, renombre /etc/sysconfig/modules/kvm.modules a kvm.modules.bak.

Entonces cuando usted decida que quiere ejecutar qemu-kvm, pare VirtualBox y ejecute :

rmmod vboxdrv

antes de hacer modprobe kvm-intel. Solamente ejecutelo una vez.

Los agradecimientos para ScottRobbins quien contribuyó con esta guía. El artículo original puede ser encontrado en http://home.roadrunner.com/~computertaijutsu/centoskvm.html

Traducido por ManuelEnriqueChavezManzano <manuel864@gmail.com>

es/HowTos/KVM (last edited 2009-03-04 18:19:30 by AlainRegueraDelgado)