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
_
何が欠けているのでしょうか? qemu-kvmが完全に機能する場合、libvirtは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
_-vmxフラグが含まれていますlscpu
-仮想化タイプ:フルkvm-ok
_-OKls -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」にあります。
ほとんどのディストリビューションlibvirtパッケージは、qemu:qemuユーザーとしてqemuを実行するように構成されます。 virsh --connect qemu:///system capabilities | grep baselabel
によって報告されたUID + GIDを参照してください。それがディストリビューションに当てはまる場合、qemuには/ dev/kvmにアクセスする権限がないため、libvirtはkvmサポートをアドバタイズしていません。 chmod 666 /dev/kvm
で修正する必要があります。これはFedora FWIWのデフォルトです