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?
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'/>
.
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
...
lsmod
montre que kvm et kvm_intel sont chargéscat /proc/cpuinfo
- contient le drapeau VMXlscpu
- Type de virtualisation: Fullkvm-ok
- OKls -l /dev/kvm
- Existe, possédée par root: RDMAls -l /var/run/libvirt
- Les prises existent, possédées par root: racinewhoami
- racinegroups $(whoami)
- racinesystemctl status
- SystemD n'est pas démarré, libvirtd a été lancé via des règles CIvirt-Host-validate
- Tous les chèques pass, sauf que IOMMU - ne devrait pas être important pour mon cas d'utilisationLes annonces complètes sont disponibles dans le CI journal , section "kvm_before".
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
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
.