Instalando O QEMU, KVM E Libvirt
- Home /
- Linux /
- KVM e QEMU /
- Instalando o QEMU, KVM e Libvirt
Instalando o QEMU, KVM e Libvirt
Vamos instalar o QEMU, Libvirt e utilitários para começar a usar o ambiente no Ubuntu 24.04. O KVM já vem no kernel, então o máximo que podemos fazer com relação a ele é instalar utilitários e garantir que os módulos carreguem corretamente:
# Verifique se os módulos do KVM estão carregados no host:
$ lsmod | grep kvm
kvm_intel 487424 0
kvm 1409024 1 kvm_intel
irqbypass 12288 1 kvm
Se os módulos kvm e kvm_intel (ou kvm_amd) estiverem carregados, o suporte básico ao KVM já está ativo no sistema.
# Instale a ferramenta cpu-checker:
$ sudo apt -y install cpu-checker
# Verifique se o sistema consegue utilizar aceleração de hardware via KVM:
$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
Se o comando retornar que a aceleração de hardware está disponível, o host está apto a executar máquinas virtuais com KVM. O pacote cpu-checker não é obrigatório. Ele serve apenas como uma ferramenta auxiliar para validar se a CPU e o kernel permitem o uso de virtualização por hardware.
Vale reforçar que os métodos de instalação mudaram com as versões mais recentes do kernel Linux, especialmente após o KVM ter sido incorporado como parte padrão do kernel. Atualmente, não é mais necessário instalar pacotes separados para habilitar o KVM, pois o suporte à virtualização já vem integrado ao próprio sistema.
Agora vamos instalar os pacotes necessários para que o QEMU funcione corretamente no sistema.
$ sudo apt install -y qemu-system qemu-utils
Agora vamos instalar os pacotes necessários para que o Libvirt funcione corretamente no sistema. Além dos pacotes principais do libvirt, é comum instalar algumas ferramentas auxiliares que facilitam bastante o uso e a integração do ambiente de virtualização.
$ sudo apt install -y libvirt-daemon-system libvirt-daemon libvirt-clients bridge-utils libosinfo-bin
O libvirt-daemon e o libvirt-daemon-system é o serviço responsável por gerenciar as máquinas virtuais em background. Ele é quem conversa com o QEMU/KVM, mantém o estado das VMs, controla redes, pools de armazenamento e executa as ações solicitadas pelos clientes.
O libvirt-clients fornece as ferramentas de linha de comando, como o virsh, que permitem administrar o libvirt diretamente pelo terminal. Sem esse pacote, o daemon até estaria rodando, mas não haveria uma forma prática de gerenciá-lo.
O bridge-utils fornece utilitários para criação e administração de interfaces do tipo bridge no Linux. Embora redes bridge também possam ser criadas com ferramentas modernas como ip ou nmcli, esse pacote ainda é amplamente utilizado e esperado em muitos cenários de virtualização, especialmente ao integrar interfaces físicas a switches virtuais usados pelas VMs.
Já o libosinfo-bin disponibiliza uma base de dados com informações sobre diversos sistemas operacionais convidados. Essas informações são usadas por ferramentas como virt-install e virt-manager para aplicar configurações adequadas automaticamente, como tipo de firmware, dispositivos recomendados e parâmetros de instalação compatíveis com cada sistema operacional.
:::tip Gerenciador gráfico
Se quiser instalar um gerenciador gráfico para facilitar a administração das máquinas virtuais, instale também o pacote virt-manager. Eu recomendo a instalação, principalmente para quem está começando ou precisa visualizar o estado das VMs com mais facilidade.
O virt-manager pode ser instalado na sua máquina local e usado para gerenciar máquinas virtuais que estão em outro servidor, de forma remota, utilizando libvirt sobre SSH.
:::
Agora com tudo instalado, podemos validar as configurações de virtualização do host usando o comando abaixo:
$ virt-host-validate
QEMU: Checking for hardware virtualization : PASS
QEMU: Checking if device /dev/kvm exists : PASS
QEMU: Checking if device /dev/kvm is accessible : PASS
QEMU: Checking if device /dev/vhost-net exists : PASS
QEMU: Checking if device /dev/net/tun exists : PASS
QEMU: Checking for cgroup 'cpu' controller support : PASS
QEMU: Checking for cgroup 'cpuacct' controller support : PASS
QEMU: Checking for cgroup 'cpuset' controller support : PASS
QEMU: Checking for cgroup 'memory' controller support : PASS
QEMU: Checking for cgroup 'devices' controller support : PASS
QEMU: Checking for cgroup 'blkio' controller support : PASS
QEMU: Checking for device assignment IOMMU support : PASS
QEMU: Checking if IOMMU is enabled by kernel : WARN (IOMMU appears to be disabled in kernel. Add intel_iommu=on to kernel cmdline arguments)
QEMU: Checking for secure guest support : WARN (Unknown if this platform has Secure Guest support)
LXC: Checking for Linux >= 2.6.26 : PASS
LXC: Checking for namespace ipc : PASS
LXC: Checking for namespace mnt : PASS
LXC: Checking for namespace pid : PASS
LXC: Checking for namespace uts : PASS
LXC: Checking for namespace net : PASS
LXC: Checking for namespace user : PASS
LXC: Checking for cgroup 'cpu' controller support : PASS
LXC: Checking for cgroup 'cpuacct' controller support : PASS
LXC: Checking for cgroup 'cpuset' controller support : PASS
LXC: Checking for cgroup 'memory' controller support : PASS
LXC: Checking for cgroup 'devices' controller support : PASS
LXC: Checking for cgroup 'freezer' controller support : FAIL (Enable 'freezer' in kernel Kconfig file or mount/enable cgroup controller in your system)
LXC: Checking for cgroup 'blkio' controller support : PASS
LXC: Checking if device /sys/fs/fuse/connections exists : PASS
Para consertar o aviso do IOMMU basta informar ao Kernel que vamos usar esse recurso, fazendo:
# Em '/etc/default/grub':
GRUB_CMDLINE_LINUX='intel_iommu=on'
# Depois aplique as configurações do grub:
$ sudo update-grub
Para consertar o aviso do freezer verifique se está usando o cgroup v2, caso esteja, pode ignorar o aviso.
# Verifique se você está usando cgroup v2:
$ stat -fc %T /sys/fs/cgroup
cgroup2fs
Podemos também verificar a rede que está configurada no KVM e se temos máquinas virtuais:
# Adicione seu usuário ao grupo libvirt e kvm:
$ sudo usermod -aG libvirt,kvm $USER
O grupo kvm controla acesso direto ao dispositivo de virtualização da CPU, que é o /dev/kvm, isso significa que somente quem está nesse grupo (ou o usuário root) podem criar vCPUs e executar VMs com aceleração por hardware.
Já o grupo libvirt controla o acesso ao daemon do libvirt, via socket Unix. Com exceção do root, apenas quem está nesse grupo pode usar o virsh, criar VMs, listar redes, pools, volumes, gerenciar libvirt remotamente ou localmente.