web-dev-qa-db-ja.com

Libvirtには、qemu-kvmが機能しても、KVM=機能はありません。

CirrusCIは、パブリックレポジトリ用の無料パッケージでネストされた仮想化を提供していることを知り、Ansibleプレイブックのテストにそれを利用しようとしています。

残念ながら、libvirtはCI環境が完全な仮想化をサポートしていないと主張しています。すべてのチェック(私が知っている)は反対を証明し、qemu-kvmを直接呼び出すと正常に動作します。問題は、CIエンジンではなく、ホストOSの構成にあるとほぼ確信しています。他の人々がCirrusCIで完全な仮想化を彼らの目的(Androidエミュレーション、レドックステスト)に使用しているのを見てきました。

ホストシステムにはDebian 10を使用し、DockerHubのスリムなイメージに次の追加パッケージをインストールします(--no-install-recommends)。

_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構成

何が欠けているのでしょうか? qemu-kvmが完全に機能する場合、libvirtは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ログ

診断

  • lsmodは、kvmおよびkvm_intelがロードされていることを示します
  • _cat /proc/cpuinfo_-vmxフラグが含まれています
  • lscpu-仮想化タイプ:フル
  • _kvm-ok_-OK
  • _ls -l /dev/kvm_-存在、root:rdmaが所有
  • _ls -l /var/run/libvirt_-ソケットが存在し、root:rootが所有しています
  • whoami-ルート
  • groups $(whoami)-ルート
  • _systemctl status_-systemdは開始されていません。libvirtdはCIルールを介して起動されました
  • _virt-Host-validate_-IOMMUを除くすべてのチェックに合格-私のユースケースでは重要ではない

完全なリストは CIログ のセクション「kvm_before」にあります。

2
SIO

ほとんどのディストリビューションlibvirtパッケージは、qemu:qemuユーザーとしてqemuを実行するように構成されます。 virsh --connect qemu:///system capabilities | grep baselabelによって報告されたUID + GIDを参照してください。それがディストリビューションに当てはまる場合、qemuには/ dev/kvmにアクセスする権限がないため、libvirtはkvmサポートをアドバタイズしていません。 chmod 666 /dev/kvmで修正する必要があります。これはFedora FWIWのデフォルトです

3
Cole Robinson