Я узнал, что CirrusCI предлагает вложенную виртуализацию в своем бесплатном пакете для общедоступных репозиториев, и я пытаюсь использовать его для тестирования своих сборников пьес на Ansible.
К сожалению, libvirt настаивает на том, что среда CI не поддерживает полную виртуализацию. Все проверки (известные мне) свидетельствуют об обратном, и qemu-kvm при прямом вызове работает нормально. Я почти уверен, что проблема связана с конфигурацией моей ОС хоста, а не с механизмом CI. Я видел, как другие люди использовали полную виртуализацию на CirrusCI для своих целей (эмуляция Android, окислительно-восстановительное тестирование).
Я использую Debian 10 для хост-системы, тонкий образ из DockerHub со следующими установленными дополнительными пакетами (--no-install-рекомендует):
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
Базовое изображение, Конфигурация CirrusCI
Что мне может не хватать? Почему libvirt сообщает, что KVM отсутствует, если qemu-kvm работает идеально?
Error while creating domain: Error saving the server: Call to virDomainDefineXML failed: invalid argument: could not find capabilities for domaintype=kvm
virsh capabilities
содержит только <domain type='qemu'/>
записи.
Любой инструмент, основанный на libvirt, не может вызвать 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
Но qemu-kvm работает при прямом запуске:
$ 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
показывает, что kvm и kvm_intel загруженыcat /proc/cpuinfo
- содержит флаг vmxlscpu
- Тип виртуализации: полнаяkvm-ok
- ХОРОШОls -l /dev/kvm
- существует, принадлежит root: rdmals -l /var/run/libvirt
- сокеты существуют, принадлежат root: rootwhoami
- кореньgroups $(whoami)
- кореньsystemctl status
- systemd не запускается, libvirtd запускался по правилам CIvirt-host-validate
- все проверки пройдены, кроме IOMMU - не имеет значения для моего варианта использованияПолные списки доступны в Журнал CI, раздел "kvm_before".
Большинство пакетов дистрибутива libvirt настроены для запуска qemu от имени пользователя qemu: qemu. См. UID + GID, сообщенный virsh --connect qemu:///system capabilities | grep baselabel
. Если это так для вашего дистрибутива, то qemu не имеет разрешений на доступ к / dev / kvm, поэтому libvirt не рекламирует поддержку kvm. chmod 666 /dev/kvm
должен это исправить. Это значение по умолчанию в Fedora FWIW.