libvirt

Actualizar la versión de QEMU, sin “reiniciar”

Hay dos maneras de modificar / actualizar la versión de QEMU sin “reiniciar”.

 

La primera, es haciendo una migración en caliente. Si tenemos dos servidores físicos con el mismo almacenamiento compartido (o incluso sin eso, utilizando la opción –copy-storage-all), podemos ejecutar un comando para migrar el servidor en caliente de uno a otro.

El truco aquí consiste en que al arrancar el qemu-kvm en el servidor remoto se hace con el ejecutable de la versión actualizada. Obviamente, tiene que poder arrancar, sin eso, fallará la migración, pero, al menos, el servidor virtual seguirá funcionando en origen.

 

La segunda manera, es hacer un “virsh save” y luego un “restore.

El comando “save” de libvirt te guarda un fichero con la memoria y las especificaciones de la máquina virtual. Dentro del fichero, por ejemplo, va el XML de definición.

El servidor virtual se detiene del todo, pero…con truco. Cuando se restaura la máquina virtual la ejecución continua en el mismo punto en el que se guardó 😉

De nuevo, al hacer el restore de la máquina virtual, si antes hemos modificado la versión de qemu-kvm, se intentará arrancar con la nueva versión.

 

Algún error que me ha dado alguna vez al hacer este tipo de upgrades era que el servidor estaba definido con el tipo de máquina “pc”.

Y al restaurarlo, ese “pc” en realidad es un alias a la última versión de máquina ACTUAL. Con modificar el fichero de save para poner un tipo de maquina más antiguo, funcionaba.

Para ver los diferentes tipos de VM posibles, se ejecuta el comando, donde se ve que “pc” se corresponde, en este caso, con pc-i440fx-1.5.

 

Para modificar el fichero donde hemos guardado la VM, se utiliza el comando

Cuidado con este comando, porque no permite hacer cualquier modificación. Parece ser que el tamaño de las modificaciones que se hacen en el XML guardado no pueden superar en tamaño a lo que había antes.

 

Instalar y compilar la última versión de libvirt en Ubuntu / Debian

En este mini-artículo vamos a ver cómo compilar la última versión de libvirt en un Ubuntu o Debian moderno.

Lo primero es descargar el código fuente de http://libvirt.org/sources/ . En este caso:

Lo descomprimimos con “tar xf ” y dentro del directorio creado ejecutamos:

 

Es posible que fallen dependencias, por lo que hay que instalar varios paquetes “-dev” para ser capaces de empezar a compilar.

En mi caso, un Ubuntu 16, tuve que instalar “libdevmapper-dev”, “libyajl-dev”. En un sistema recién instalado habrá que instalar bastantes más.

 

Cuando haya terminado el comando autogen correctamente, ejecutamos:

 

Si estamos en un sistema con systemctl (Debian 8 , Ubuntu 16 o superior), hay que editar el fichero

y modificar la línea que apunta al ejecutable de libvirt de esta manera

 

Luego ejecutamos

para recargar los ficheros de configuración, y para reiniciarlo:

 

 

Finalmente, con un “sudo virsh version”, tendremos que ver la versión correcta.

 

 

Es posible que os de un error indicando que no encuentra el emulador de X86_64. Eso ocurre porque no encuentra el emulador de qemu-kvm.

En mi caso, con hacer un link de /usr/local/qemu-kvm/bin/qemu-system-x86_64 a /usr/sbin/qemu-kvm ya bastó para que funcionase correctamente.

 

De igual manera que hicimos el otro día, se puede crear un paquete .deb para redistribuirlo en otros servidores físicos con checkinstall, pero no os cogerá los cambios del fichero del systemctl para el arranque.