Esse post vai para aquele seu amigo usuário de VirtualBox no GNU/Linux que justifica o “mal gosto” com as desculpas que precisa por causa do Vagrant, que não sabe usar outros providers, que a box XYZ só está disponível para VirtualBox, etc.
Instalação do Vagrant
Instalação com pacotes da distribuição:
sudo {apt | dnf} install vagrant
Pacotes da HashiCorp podem ser obtidos no site oficial do Vagrant.
Instalação do Libvirt
Debian:
sudo apt install virt-manager virt-viewer qemu-kvm
sudo systemctl status libvirtd
sudo adduser $USER libvirt
sudo adduser $USER libvirt-qemu
Fedora:
sudo dnf install @virtualization
sudo systemctl enable --now libvirtd
sudo systemctl status libvirtd
sudo usermod -a -G libvirt $USER
Como adicionamos o usuário ao(s) grupo(s) é interessante refazer o login para que a mudança fique “visível” para todas as aplicações. Caso você saiba usar o comando newgrp
nem precisa ter esse trabalho.
Plugin Libvirt
Como você provavelmente está cansado de saber o provider padrão do Vagrant é o VirtualBox então para usar ele com Libvirt precisamos instalar um plugin.
vagrant plugin install vagrant-libvirt
Caso prefira pode usar o gerenciador de pacotes da distribuição para instalar o plugin.
sudo {apt | dnf} install vagrant-libvirt
Plugin Mutate
Eventualmente podemos nos deparar com alguma box que não conta com o Libvirt como provider. Para contornar esse “problema” temos o plugin Mutate que é capaz de converter as boxes entre diversos providers.
vagrant plugin install vagrant-mutate
Convertendo uma box a partir do URL:
vagrant mutate http://cloud.centos.org/centos/7/vagrant/x86_64/images/CentOS-7-Vagrant-1505-x86_64-01.box libvirt
Convertendo uma box já adicionada:
vagrant mutate deb/squeeze-i386 libvirt
Convertendo de um provider específico:
vagrant mutate --input-provider=kvm fedora/29-cloud-base libvirt
Para mais opções e possibilidades não deixe de ler a documentação do Vagrant Mutate.
Trabalhando Com Vagrant/Libvirt
Dependendo das opções usadas no Vagrantfile é possível usar o libvirt como provider sem precisar fazer qualquer edição no arquivo. Iniciando uma VM a partir de um Vagrantfile preexistente:
vagrant up --provider libvirt
Adicionando box:
vagrant box add --provider libvirt fedora/29-cloud-base
No próximo exemplo vamos criar Vagranfile com o conteúdo abaixo, perceba que já temos o libvirt definido como provider por padrão. Portando basta um vagrant up
para subir a VM.
Vagrant.configure("2") do |config|
config.vm.box = "fedora/29-cloud-base"
config.vm.hostname = "fedora"
config.vm.provider "libvirt" do |lv|
lv.driver = "kvm"
lv.cpus = 2
lv.memory = 1024
end
end
A opção driver define o hypervisor usado, embora o libvirt suporte diversas soluções de virtualização no momento em que eu escrevo o plugin trabalha apenas kvm e qemu. Já as opções cpus e memory definem respectivamente a quantidade processadores virtuais e a quantidade de memoria RAM em MBytes alocados para a VM que será criada.
Uma lista completa das opções do plugin e suas respectivas descrições está disponível no repositório do projeto.