Taula de continguts

Vagrant amb Libvirt en Ubuntu

El sistema de virtualització format per QEMU, KVM i libvirt és molt eficient per treballar, en especial quan ho fem de forma automatitzada, com en el cas de Vagrant. KVM és emprada per distribucions tan potents com Proxmox i, en general, és la opció més adoptada pels grans proveïdors ja que és codi lliure molt provat i robust, i que permet estalviar costos de llicències.

En aquest sistema tenim:

Vagrant és una eina d'automatització d'infraestructura, també conegut com a IaC o Infrastructure as Code.

En Ubuntu, el més habitual sol ser treballar Vagrant amb VirtualBox, però la configuració amb el proveïdor libvirt té molts avantatges, en particular la velocitat.


Instal·lació en Debian/Ubuntu

Tenim aquesta referència.

Resum per a Ubuntu 22.04 i 24.04:

  1. Instal·la Libvirt i la interfície gràfica virt-manager:
    sudo apt install libvirt-daemon virt-manager nfs-kernel-server
  2. Instal·la NFS per tal que Vagrant pugui gestionar l es carpetes compartides amb Libvirt (en Windows això no funciona).
    sudo apt install nfs-kernel-server
  3. Afegeix el teu usuari al grup libvirt:
    sudo adduser <usuari> libvirt
  4. Reinicia la màquina perquè l'usuari principal pugui gestionar Libvirt.
    sudo reboot
  5. Engega la interfície gràfica:
    Dash -> virt
  6. Instal·la les eines de desenvolupament per a poder compilar el plugin:
    sudo apt install libvirt-dev ruby-dev make gcc
  7. Instal·la els plugins de Vagrant que permeten gestionar Libvirt.
    vagrant plugin install vagrant-libvirt

Ara ja hauries de tenir la instrucció vagrant disponible al terminal.


Crea VMs amb Vagrant

Provarem una configuració mínima per crear una VM amb Vagrant:

Cerca imatges a Vagrant Cloud

Les imatges han d'estar adaptades per a cada provider, pel què no son iguals una imatge per a VirtualBox que una per a libvirt.

Consulta a https://portal.cloud.hashicorp.com/vagrant/discover Vagrant Cloud si hi ha disponible la imatge que t'interessa.

Exemples d'imatge confiables i disponibles per a libvirt:


Compartir carpetes amb viriofsd

Per defecte, les carpetes compartides (per exemple /vagrant per defecte) es fan mitjançant NFS si emprem libvirt. Una alternativa interessant és utilitzar virtiofs.

Fins a Debian 12 virtiofs ja ve inclòs en libvirt.

Si tens Debian 13+ hauràs d'instal·lar virtiofsd:

sudo apt install virtiofsd

Al Vagrantfile caldrà explicitar la carpeta compartida, encara que per defecte es faci:

config.vm.synced_folder ".", "/vagrant", type: "virtiofs"

A la configuració del provider caldrà ajustar la configuració a mode shared:

Vagrantfile
config.vm.provider "libvirt" do |vm|
    vm.memory = "2048"
    vm.cpus = 1
    # ajustos per a virtiofs
    vm.memorybacking :access, :mode => 'shared'
end


NFS en Debian/Ubuntu

Si utilitzes una Ubuntu i et dona error en la compartició NFS, pots intentar aquesta configuració que farà el shared folder via TCP enlloc del UDP per defecte al Vagrantfile:

config.vm.synced_folder ".", "/vagrant", 
  type: "nfs",
  nfs_version: 3,
  nfs_udp: false,
  nfs_protocol: "tcp"


Nested virtualization (virtualització aniuada)

Si vols fer nested virtualization amb libvirt et recomano la lectura d'aquest post sobre virtualizació aniuada amb Vagrant.


Escriptoris

Les imatges oficials Vagrant solen ser versions server o headless, és a dir, sense escriptori. Si el vols afegir, sempre el pots instal·lar amb:

$ sudo apt-get update
$ sudo apt-get install -y gnome

També podeu instal·lar altres escriptoris com lxde, xfce o kde enlloc de gnome.

Perquè funcioni adequadament amb l'aplicació virt-manager, en particular per gestionar bé l'idioma del teclat, convé afegir els settings perquè faci servir el visor SPICE enlloc del VNC:

Vagrantfile
  config.vm.provider "libvirt" do |libvirt|
    libvirt.memory = "4096"
    libvirt.cpus = 2
    libvirt.graphics_type = "spice"
    libvirt.video_type = "qxl"
    libvirt.channel :type => 'spicevmc', :target_name => 'com.redhat.spice.0', :target_type => 'virtio'
  end