Instalar una VM con qemu, libvirt y virt-manager en Funtoo

Hacia tiempo que no reportaba nada nuevo por acá, lo cierto es que no he tenido mayor cosa interesante, hasta que hace poco se me ha presentado la necesidad de montar una VM para trabajar en un proyecto que he de mostrar a un cliente de forma rápida y funcional.

En GNU/Linux  cuando hablamos de VMs serias, lo primero que se nos viene a la cabeza es KVM y XEN, las dos tecnologías de virtualización que podemos usar en Linux sin tener que hacer maromas de más para que funcionen y ofrezcan una estabilidad y calidad de implementación para trabajos serios. Si bien KVM carece de algunas características que si ofrece XEN, KVM ofrece un desarrollo mucho más robusto y completamente open source, además de estar plenamente integrado al kernel, y este plus vale tenerlo en cuenta a la hora de elegir entre uno y otro. Conociendo esto, comenzaré a explicar los pasos para poder tener una VM funcional y activa, con acceso a red local, lista para alojar cualquier servidor que quieran poner.

La Instalación

En primer lugar he decir que mi instalación de Funtoo es un tanto especial, ya que he quitado las USE para consolekit, policykit y udisks, y como ya saben en Funtoo no hay soporte para SystemD, así que hemos de tocar archivos de configuración para poder instalar y tener completamente funcional todo lo que necesitamos. En primer lugar les daré las USE activas para cada uno de los programas ya mencionados

[ebuild R ] app-emulation/virt-manager-1.1.0-r2 USE="gtk -debug -gnome-keyring -policykit -sasl" PYTHON_TARGETS="python2_7" 0 kB
[ebuild R ] app-emulation/qemu-2.2.1-r1 USE="aio alsa caps curl fdt filecaps jpeg ncurses nls opengl pin-upstream-blobs png python seccomp threads usb usbredir uuid vhost-net vnc xattr -accessibility -bluetooth -debug -glusterfs -gtk -infiniband -iscsi -lzo -nfs -numa -pulseaudio -rbd -sasl -sdl (-selinux) -smartcard -snappy (-spice) -ssh -static -static-softmmu -static-user -systemtap -tci {-test} -tls -vde -virtfs -xen -xfs" PYTHON_TARGETS="python2_7" QEMU_SOFTMMU_TARGETS="i386 -aarch64 -alpha -arm -cris -lm32 -m68k -microblaze -microblazeel -mips -mips64 -mips64el -mipsel -moxie -or32 -ppc -ppc64 -ppcemb -s390x -sh4 -sh4eb -sparc -sparc64 -unicore32 -x86_64 -xtensa -xtensaeb" QEMU_USER_TARGETS="i386 -aarch64 -alpha -arm -armeb -cris -m68k -microblaze -microblazeel -mips -mips64 -mips64el -mipsel -mipsn32 -mipsn32el -or32 -ppc -ppc64 -ppc64abi32 -s390x -sh4 -sh4eb -sparc -sparc32plus -sparc64 -unicore32 -x86_64" 0 kB
[ebuild R ] app-emulation/libvirt-1.2.14-r2:0/1.2.14 USE="caps libvirtd macvtap nls qemu udev vepa virt-network -audit -avahi -firewalld -fuse -glusterfs -iscsi -lvm -lxc -nfs -numa -openvz -parted -pcap -phyp -policykit -rbd -sasl (-selinux) -systemd -uml -virtualbox -xen" 0 kB

Para poder instalar estas aplicaciones usando las USE mencionadas hay que activar algunas USE extras en otros paquetes, emerge les advertirá de cuales, si usan Consolekit y Polkit, deberán activar las USE correspondiente aunque con estas USE el trabajo se simplifica enormemente.

La Configuración

Instalados los paquetes debemos configurar el entorno y dar los permisos necesarios, en este caso lo primero que haremos será agregar nuestro usuario al grupo KVM

sudo gpasswd -a tu_usuario kvm

Luego comenzaremos a cambiar los permisos del demonio libvirtd, el mismo tiene su configuración en:

/etc/libvirt/libvirtd.conf

En este archivo editaremos una serie de lineas, las cuales dejaremos así:

listen_tls = 0
listen_tcp = 1
unix_sock_group = "kvm"
unix_sock_ro_perms = "0770"
unix_sock_rw_perms = "0770"
unix_sock_dir = "/var/run/libvirt"

ADVERTENCIA:  La configuración tal como se muestra acá te permitirá conectarte a tu VM en medio de una red Local segura sin muchas dificultades, pero todo lo que vaya en la red ira en TEXTO PLANO, esta no es una configuración pensando en seguridad. Si quieres proveer de seguridad a la conexión entre tu VM, administradores y los clientes, deberás usar SASL, y para ello solo deberás activar la USE = “sasl” y configurar el servicio.

Esta configuración te permitirá usar la infraestructura de sockets UNIX (archivos con permisos de ejecución por grupo y usuario) para controlar las VMs que tengas activas, saltándose la necesidad de usar Polkit y Consolekit (este ultimo deprecated debido a que está sin mantenimiento desde hace mas de un año). Si quieres permitir que un usuario tenga acceso a las VMs solo asegurate de que dicho usuario este asociado al grupo KVM.

Luego de haber configurado el demonio solo deberán iniciarlo, usando:

sudo /etc/init.d/libvirtd start

O en su lugar pueden asegurarse de que el demonio se inicie en cada arranque del sistema, haciendo

sudo rc-update add libvirtd default

Instalando la Maquina Virtual

Llegamos al punto medio de todo esto, y el que menos explicaré por obvias razones. Documentos, Wikis, tutoriales escritos y en videos que explican como montar una VM  usando virt-manager hay por demás y agregar otro al Universo no hará nada en especial. Sin embargo, he decir que en este paso deben tener atención en lo siguiente; cuando creen la maquina virtual tengan atención en que la red sea del tipo macvtap. Esto les permitirá creer un bridge de forma automática que les permitirá acceder a su VM como si fuera un equipo en metal. Les dejo una captura de la configuración en cuestión.

2015-04-19-165536_1280x1024_scrot

Realicen todo el procedimiento necesario para que la maquina virtual quede correctamente configurada. Les recuerdo, que para usar estas opciones el kernel debe estar configurado para tales tareas, así que no se olviden en activar los configuraciones necesarias para que los módulos kvm, kvm_intel, kvm_amd y macvtap sean construidos.

Listo ya con esto tendrán una VM a la cual podrán acceder desde su LAN sin problemas y que podrán usar para hacer servicios según lo requieran.

Anuncios

Deja tu comentario y participa

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s