web-dev-qa-db-fra.com

Libvirt n'a pas KVM capacités même si QEMU-KVM fonctionne

J'ai appris que Cirrusci offre une virtualisation imbriquée dans leur paquet gratuit pour les reposions publiques et j'essaie de l'utiliser pour tester mes playbooks ansibles.

Malheureusement, Libvirt insiste sur le fait que l'environnement CI n'avait aucun soutien à une virtualisation complète. Tous les chèques (connus pour moi) témoignent de l'inverse et QEMU-KVM fonctionne correctement lorsque cela est appelé directement. Je suis presque certain que le problème est avec ma configuration d'OS hôte et non avec le moteur CI. J'ai vu d'autres personnes utilisent une virtualisation complète sur cirrusci à leurs fins (émulation Android, tests redox).

J'utilise Debian 10 pour le système hôte, Slim Image de DockerHub avec les packages supplémentaires suivants installés (-NO-Install-recommande):

bridge-utils  libguestfs-tools       python3-dev
coreutils     libosinfo-bin          python3-venv
cpu-checker   libssl-dev             qemu-kvm
curl          libvirt-clients        qemu-kvm
gcc           libvirt-daemon         qemu-utils
gpg           libvirt-daemon-system  systemd
gpg-agent     linux-image-AMD64      vagrant
iproute2      make                   vagrant-libvirt
kmod          procps                 virt-goodies
libc-dev      python3                virtinst
libffi-dev

image de base , configuration cirrusci

Que dois-je manquer? Pourquoi Libvirt dit-il qu'il n'y a pas KVM lorsque Qemu-kvm fonctionne parfaitement?

erreur de libvirine

Error while creating domain: Error saving the server: Call to virDomainDefineXML failed: invalid argument: could not find capabilities for domaintype=kvm

virsh capabilities Contient uniquement des entrées <domain type='qemu'/>.

Démo de comportement incompatible

Tout outil basé sur Libvirt omet d'invoquer KVM:

$ virt-install --import --virt-type kvm --name debian10-vm --memory 512 --disk path=/debian.qcow2,format=qcow2 --os-variant debian10 --noautoconsole || echo "Exit code: $?"
ERROR    Host does not support domain type kvm for virtualization type 'hvm' Arch 'x86_64'
Exit code: 1

Mais Qemu-KVM fonctionne lorsqu'il est exécuté directement:

$ kvm -nographic /debian.qcow2
cSeaBIOS (version 1.12.0-1)
iPXE (http://ipxe.org) 00:03.0 C980 PCI2.10 PnP PMM+07F900F0+07ED00F0 C980
Press Ctrl-B to configure iPXE (PCI 00:03.0)...

Booting from Hard Disk...
GNU GRUB  version 2.02+dfsg1-20
...

journaux CI complètes

Diagnostique

  • lsmod montre que kvm et kvm_intel sont chargés
  • cat /proc/cpuinfo - contient le drapeau VMX
  • lscpu - Type de virtualisation: Full
  • kvm-ok - OK
  • ls -l /dev/kvm - Existe, possédée par root: RDMA
  • ls -l /var/run/libvirt - Les prises existent, possédées par root: racine
  • whoami - racine
  • groups $(whoami) - racine
  • systemctl status - SystemD n'est pas démarré, libvirtd a été lancé via des règles CI
  • virt-Host-validate - Tous les chèques pass, sauf que IOMMU - ne devrait pas être important pour mon cas d'utilisation

Les annonces complètes sont disponibles dans le CI journal , section "kvm_before".

4
SIO

La plupart des packages Distro Libvirt seront configurés pour exécuter QEMU comme QEMU: Utilisateur QEMU. Voir l'UID + GID rapporté par virsh --connect qemu:///system capabilities | grep baselabel. Si tel est le cas pour votre distribution, alors QEMU n'a pas d'autorisation d'accès/dev/kvm, donc libvirt n'est pas la publicité de la publicité KVM. chmod 666 /dev/kvm devrait le réparer. Ceci est la valeur par défaut dans Fedora Fwiw

3
Cole Robinson

Cela étend un peu la réponse de Cole Robinson, qui m'a été très utile de comprendre un problème similaire sur Ubuntu.

Je pense que Debian fait-il de la même manière que Ubuntu, où vous devez installer qemu-system-x86 et/dev/kvm devient magiquement écritable et appartenant au groupe kvm (au lieu de la racine 0600: racine).

libvirtd sur Debian/Ubuntu utilise le libvirt-qemu utilisateur par défaut et le groupe principal de l'utilisateur est kvm.

0
Marius Gedminas