lunes, 8 de octubre de 2012

Cómo instalar un servidor de máquinas virtuales en ARCH Linux usando KVM QEMU

Hola, en este post vamos a instalar un servidor de máquinas virtuales utilizando KVM, aceleración de virtualización por hardware y algunos trucos de optimización. KVM basa todo su potencial de aceleración en el hardware, por lo tanto debemos asegurarnos de tener un microprocesador que tenga las extensiones de virtualización, y que estas estén habilitadas en el BIOS, y que además, este BIOS sea compatible. En mi caso, tuve que actualizar la versión de BIOS por que no funcionaba KVM hasta que no lo hice. Para todos aquellos que tengan una Gigabyte GA-MA790FX-UD5P, la ultima versión del BIOS no es la que aparece en la página, la F5 (la F6 aparece como beta). La última version es la F7. ¿Cómo lo supe? Casi de casualidad. Luego de una semana de probar y probar y probar, terminé iniciando en la partición de Windows 7 y ejecutando el BIOS flasher de Gigabyte. Apreté el botón del programa de buscar nuevas versiones de BIOS y WALLA! ahi estaba la F7. Bien por Gigabyte eh! un aplauso!!

Instalamos algunos paquetes:
pacman -Sy qemu-kvm dmidecode ebtables dnsmasq libvirt bridge-utils openbsd-netcat radvd urlgrabber virtviewer virtinst virt-manager ifplugd ifenslave tcl wget
Unimos nuestro usuario al grupo kvm
gpasswd -a nombre_de_usuario kvm

Y luego levantamos los módulos necesarios (en mi caso tengo AMD)
modprobe kvm-amd
modprobe kvm
Si tenés intel, tenes que hacer:

modprobe kvm-intel
modprobe kvm
Si salió todo bien, para que se arranque solo en cada reinicio debemos hacer
systemctl enable libvirtd.service
Para poder utilizar el manager como usuario, debemos darle permisos a nuestro usuario mediante el PolicyKit. Para eso hacemos
nano /etc/polkit-1/rules.d/50-org.libvirt.unix.manage.rules
y luego copiamos y pegamos este contenido
polkit.addRule(function(action, subject) {
if (action.id == "org.libvirt.unix.manage" &&
  subject.user == "aquí va el nombre de usuario") {
  return polkit.Result.YES;
}
});
En mi caso, me quedó así
polkit.addRule(function(action, subject) {
if (action.id == "org.libvirt.unix.manage" &&
  subject.user == "faktorqm") {
  return polkit.Result.YES;
}
});
Bueno a esta altura ya deberíamos tener corriendo el servidor. Para comprobar podríamos comenzar a instalar algunas maquinas virtuales ;)

Para instalar un Windows xp 32 bits virtual:

Bajar los drivers de la máquina virtual para xp y 7 de acá http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/

Los drivers de video de vmware los baje de acá http://www.linux-kvm.com/content/using-vmware-vga-kvm-windows-guests

Vamos al virtual machine manager y lo abrimos. Presionamos sobre "new" y nos abre:


escribimos un nombre y presionamos Forward.

Elegimos que vamos a instalar desde una imagen iso (como es mi caso) y luego elegimos que vamos a instalar un windows y que esa versión de windows va a ser xp.

y presionamos forward.
En la próxima pantalla, debemos elegir 2048Mb y 2 núcleos. (Me parece lo "mejor", vos podés elegir otra cosa)

y presionamos forward.
Luego debemos elegir cuánto espacio tendrá ese disco virtual. En mi caso elegí 20Gb.

y presionamos forward.
En la última pantalla del wizard, debemos elegir "customize configuration before install" y luego bajar las "advanced options" y elegir en architecture "i686".
Luego presionamos en finish. Nos abrirá el configurador. En la primer pantalla sólo debemos seleccionar ACPI, APIC y localtime. (esto es para que nuestra VM se vaya a suspender si es necesario). Presionamos apply.
Luego en el panel izquierdo elegimos "processor" y desplegamos "configuration" y presionamos donde dice "copy host cpu configuration". Presionamos apply.

Luego en el panel izquierdo elegimos "disk1" y desplegamos "advanced options" y luego volvemos a desplegar "performance options". En "disk bus" elegimos "IDE" y en "cache mode" elegimos "none", pero en "IOmode" elegimos "native".
Presionamos apply.
Luego en el panel izquierdo elegimos "NIC" y en device model elegimos "virtio". Presionamos apply.
Luego en el panel izquierdo elegimos "video"  y en modelo elegimos "vmvga". Presionamos apply.

Ahora, si queremos agregar una segunda lectora de CD, no está agregada automáticamente, así que la agregamos presionando sobre "add hardware..." y ni bien nos abre la ventana ya está seleccionada la opción storage. Elegimos "select managed or other existing storage", y en "device type" elegimos "cdrom" y en "cache mode" elegimos "none". En el botón de "browse" debemos elegir la imagen ISO del windows XP.


Presionamos finish y nos debe quedar así (mas o menos):



y luego presionamos sobre "begin installation" para comenzar la instalación.

Cuando terminamos la instalación, montamos en el CD (vamos al botón "disconnect" y luego a "connect" otra vez para cambiar la ISO) y en el directorio \XP está el driver de la placa de red.
KVM nos armó ya un bridge con NAT para poder tener acceso a internet y a la red sin demasiadas complicaciones. Esto lo vamos a poder configurar mas adelante y mas detalladamente en otros post.

Para poder utilizar el driver virtio para el disco: tenemos que crear un segundo disco de 1gb, que no sirve de mucho pero con driver virtio, arrancar la VM, y va a detectar un dispositivo nuevo, instalamos los drivers de la carpeta que esta en \WXP y apagamos. Luego volvemos a las propiedades, borramos el disco, cambiamos el disco existente de IDE a virtio y reiniciamos. Deberia funcionar sin pantalla azul.

Para usar paginado de memoria grande:
Creamos un directorio para asignar:
mkdir /hugepages
Ahora debemos ver en que GID esta el grupo KVM con
getent group kvm
(en mi caso era el 78)
Entonces hacemos
nano /etc/fstab
y agregamos
"hugetlbfs /hugepages hugetlbfs mode=1770,gid=78 0 0"
luego
mount /hugepages
y me fijo a ver si esta con
mount | grep huge
ahora me fijo que tamaño tienen con
cat /proc/meminfo | grep Hugepagesize
(en mi caso dice 2Mb). Ahora tengo que hacer una cuenta para decidir un valor, si quiero que mi VM tenga 1Gb de ram, entonces tengo que hacer 1024 dividido el tamaño del hugepage, en este caso 2. entonces me da 512. le dejo un cacho de mas por las dudas, le pongo 550. A mi me gusta con 2Gb, asi que pongo 1100.
Lo pruebo para ver si anda con
echo 1100 > /proc/sys/vm/nr_hugepages
Para perpetuar los cambios lo agrego en
nano /etc/sysctl.conf
y agrego esta línea

vm.nr_hugepages=1100

Una vez hecho esto, ya quedo y ahora lo tengo que activar en el qemu-kvm utilizando el modificador -mem-path /hugepages para usar otros programas como virt-manager hago
nano /home/faktorqm/.bashrc
y agrego
alias qemu="qemu -mem-path /dev/hugepages"
alias qemu-kvm="qemu-kvm -mem-path /dev/hugepages"
alias qemu-system-x86_64="qemu-system-x86_64 -mem-path /dev/hugepages"
alias kvm="kvm -mem-path /dev/hugepages"
Para instalar el driver de video: 
Vamos al administrador de dispositivos, montamos la iso en el cdrom que bajamos al principio del post, e instalamos los drivers.

Para instalar un windows 7 64 bits virtual:
Para una VM con W7 es todo lo mismo. Salvo la parte de tener que colocar un segundo disco para instalar el driver y luego cambiar el "master". En W7 esto lo podemos hacer directamente desde la instalación, porque a diferencia de su antecesor el XP que te pedia diskettes para instalar drivers de controladoras de disco, 7 puede soportar CD's. por lo tanto, y a tiempo real, cambian la iso de la "lectora" virtual e instalan el virtio para el disco. No olviden volver a poner la imagen del windows 7!!!!

En otro post vamos a poner cómo instalar un ARCH GNU/Linux. Saludos!!!

No hay comentarios:

Publicar un comentario