Назад | Перейти на главную страницу

Libvirt не имеет возможностей KVM, хотя qemu-kvm работает

Я узнал, что 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 работает идеально?

ошибка libvirt

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
...

Полные журналы CI

Диагностика

Полные списки доступны в Журнал 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.