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.
Tenim aquesta referència.
Resum per a Ubuntu 22.04 i 24.04:
sudo apt install libvirt-daemon virt-manager nfs-kernel-server
sudo apt install nfs-kernel-server
libvirt:sudo adduser <usuari> libvirt
sudo reboot
Dash -> virt
sudo apt install libvirt-dev ruby-dev make gcc
vagrant plugin install vagrant-libvirt
Ara ja hauries de tenir la instrucció vagrant disponible al terminal.
Provarem una configuració mínima per crear una VM amb Vagrant:
mkdir vm1 cd vm1
vagrant init debian/bookworm64
vagrant up --provider=libvirt
# Configuració comuna a per totes les màquines config.vm.provider "libvirt" do |vb| vb.memory = "2048" vb.cpus = 2 end
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:
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:
config.vm.provider "libvirt" do |vm| vm.memory = "2048" vm.cpus = 1 # ajustos per a virtiofs vm.memorybacking :access, :mode => 'shared' end
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"
Si vols fer nested virtualization amb libvirt et recomano la lectura d'aquest post sobre virtualizació aniuada amb Vagrant.
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:
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