====== 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: * QEMU: motor de virtualització * KVM o Kernel Virtual Machine : acceleració de la virtualització * libvirt: emulació dels perifèrics [[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 [[https://bizanosa.com/ubuntu-debian-install-libvert-for-vagrant/|aquesta referència]]. Resum per a Ubuntu 22.04 i 24.04: - [[https://developer.hashicorp.com/vagrant/install?product_intent=vagrant#linux|Instal·la Vagrant com indica el fabricant HashiCorp a la seva web]]. - Instal·la Libvirt i la interfície gràfica virt-manager:sudo apt install libvirt-daemon virt-manager nfs-kernel-server - 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 - Afegeix el teu usuari al grup ''libvirt'':sudo adduser libvirt - Reinicia la màquina perquè l'usuari principal pugui gestionar Libvirt.sudo reboot - Engega la interfície gràfica:Dash -> virt - Instal·la les eines de desenvolupament per a poder compilar el plugin:sudo apt install libvirt-dev ruby-dev make gcc - 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: * Crea una carpeta per cada projecte (una per cada VM si no tenen res a veure entre elles):mkdir vm1 cd vm1 * Crea el Vagrantfile. Aquesta instrucció crearà un esquelet molt complert que pots anar activant per parts descomentant les línies que t'interessin: vagrant init debian/bookworm64 * Engega la màquina amb: vagrant up --provider=libvirt * Ajusta els paràmetres de Libvirt per a la VM inspeccionant i retocant el Vagrantfile: # Configuració comuna a per totes les màquines config.vm.provider "libvirt" do |vb| vb.memory = "2048" vb.cpus = 2 end === Tancament de la Vagrant Cloud o HCP Vagrant Registry === Com a conseqüència de la compra de l'empresa HashiCorp per part d'IBM el febrer de 2025, **la Vagrant Cloud (o HCP Vagrant Registry) es tancarà el Gener de 2027**. De fet, des de l'1 d'Octubre de 2026 ja no es podran pujar més imatges a aquest repositori públic. A partir d'aquestes dates **caldrà que cada usuari hostatgi les seves imatges en servidors propis**. Molts proveïdors de Vagrant boxes com generic, Roboxes.org, etc. han deixat de publicar i actualitzar imatges i ens podem trobar amb errors si les utilitzem. Sembla ser que el proveïdor ''bento'' sí que les seguirà proveint, caldrà veure amb quin mecanisme les publica. \\ ===== 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'': * bento/ubuntu-24.04 * bento/fedora-41 * debian/bookworm64 \\ ===== Configura xarxa bridge ===== Si vols fer servir una xarxa en mode //bridge// (en Vagrant una ''"public_network"'') caldrà que disposis d'un Linux Bridge a la teva instal·lació Ubuntu o Debian. Per configurar-ho amb ''netplan'' caldrà no posar la IP de la màquina host a la definició de la interfície física real (en l'exemple, ''enp0s2'') sinó que cal posar la IP a la definició del //bridge// (en l'exemple ''br0''): network: version: 2 ethernets: enp2s0: dhcp4: false dhcp6: false A la definició del //bridge// assignem la IP, per exemple de forma estàtica (també es podria fer amb mode dhcp): network: version: 2 bridges: br0: interfaces: [enp2s0] dhcp4: false dhcp6: false parameters: stp: false addresses: - 192.168.1.4/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: [8.8.8.8, 1.1.1.1] \\ ===== Compartir carpetes amb virtiofsd ===== 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 \\ ===== 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 [[https://nts.strzibny.name/inception-running-vagrant-inside-vagrant-with-kvm/|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: 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