Bagaimana cara memperbaiki Error QEMU / KVM Tidak Terhubung di Ubuntu 20.04

Dalam tutorial ini, Anda akan belajar cara memperbaiki error QEMU/KVM Tidak terhubung di Ubuntu 20.04. Mungkin Anda telah menginstal KVM hypervisor di Ubuntu 20.04 agar Anda dapat menjalankan engine virtual di dalamnya sebagai user biasa, non-root. Namun untuk beberapa alasan, ketika Anda mencoba menjalankan virshperintah ke virt-manager, menampilkan alat manajemen desktop engine virtual, Anda berakhir dengan error seperti Qemu/KVM tidak terhubung. Mari kita lihat cara memperbaiki error tersebut.

Penafian: Tutorial menguraikan bagaimana saya memperbaiki masalah sendiri. Ini bukan perbaikan resmi untuk masalah ini. Pakailah ayo.

Bagaimana cara memperbaiki Error QEMU / KVM Tidak Terhubung di Ubuntu 20.04

Contoh error yang Anda temui saat menjalankan KVM sebagai user non-root di Ubuntu 20.04 mungkin termasuk contoh di bawah ini;

virsh -c qemu:///system
error: failed to connect to the hypervisor error: End of file while reading data: Input/output error
virsh list --all
error: failed to connect to the hypervisor error: End of file while reading data: Input/output error

Jadi Anda telah melakukan semua yang diperlukan untuk menjalankan KVM sebagai user non-root, dengan menambahkan nama user standar Anda ke libvirtgrup, tetapi Anda tetap tidak dapat menjalankan KVM sebagai user standar.

id -nG
koromicha kvm netdev nm-openvpn libvirt

Semua modul yang diperlukan dimuat;

lsmod | grep kvm
kvm_intel 282624 0 kvm 663552 1 kvm_intel

Anda telah menjelajahi internet, tetapi sejauh ini tidak ada solusi yang disarankan yang memperbaiki masalah dengan QEMU/KVM tidak terhubung? Mungkin ada sesuatu yang tidak Anda cari?

Bagaimana Dengan AppArmor?

Menurut halaman wiki Ubuntu AppArmor ;

AppArmor adalah sistem Mandatory Access Control (MAC) yang merupakan peningkatan kernel (LSM) untuk membatasi program ke sumber daya yang terbatas. Model keamanannya adalah untuk mengikat atribut kontrol akses ke program daripada ke user.

Batasannya disediakan melalui profil yang dimuat ke dalam kernel, biasanya saat boot. Profil AppArmor bisa dalam salah satu dari dua mode:

  • enforcement – Profil yang dimuat dalam mode penegakan akan menghasilkan penegakan kebijakan yang ditentukan dalam profil serta upaya pelaporan pelanggaran kebijakan (baik melalui syslog atau auditd).
  • complain– Profil dalam mode keluhan tidak akan menerapkan kebijakan tetapi melaporkan upaya pelanggaran kebijakan.

Nah, jadi setelah memeriksa log syslog;

sudo grep libvirt /var/log/syslog | grep -i apparmor | grep -i denied
Jun 28 14:53:27 koromicha kernel: [ 334.660844] audit: type=1400 audit(1593345207.778:951): apparmor="DENIED" operation="bind" profile="libvirtd" pid=12254 comm="libvirtd" family="unix" sock_type="dgram" protocol=0 requested_mask="bind" denied_mask="bind" addr="@userdb-6228daaaf66b14dfd14d93ef46d962c3" Jun 28 14:54:19 koromicha kernel: [ 386.034970] audit: type=1400 audit(1593345259.145:952): apparmor="DENIED" operation="bind" profile="libvirtd" pid=14311 comm="libvirtd" family="unix" sock_type="dgram" protocol=0 requested_mask="bind" denied_mask="bind" addr="@userdb-c861507740da1fa0c3356ad3b78bffe9" Jun 28 15:02:30 koromicha kernel: [ 877.339057] audit: type=1400 audit(1593345750.437:968): apparmor="DENIED" operation="bind" profile="libvirtd" pid=16175 comm="libvirtd" family="unix" sock_type="dgram" protocol=0 requested_mask="bind" denied_mask="bind" addr="@userdb-7d70643a9f8da0342f6359907817b664"...

Dari pesan buffer ring kernel;

dmesg| grep -i libvirt
[ 12.737770] systemd[1]: Reached target Libvirt guests shutdown. [ 36.451935] audit: type=1400 audit(1593344909.127:909): apparmor="DENIED" operation="bind" profile="libvirtd" pid=1329 comm="libvirtd" family="unix" sock_type="dgram" protocol=0 requested_mask="bind" denied_mask="bind" addr="@userdb-17950adb1cf7fdce327fb745a8f96166" [ 82.906690] audit: type=1400 audit(1593344956.066:911): apparmor="DENIED" operation="bind" profile="libvirtd" pid=3295 comm="libvirtd" family="unix" sock_type="dgram" protocol=0 requested_mask="bind" denied_mask="bind" addr="@userdb-5f105e043aa71b33f878838eb17ed07a"...

Ini menunjukkan bahwa AppArmor karena beberapa alasan menahan libvirtd dari useran useran oleh user biasa/non-root, terlepas dari menambahkan mereka ke grup.

Memeriksa status AppArmor;

sudo aa-status
... 6 processes have profiles defined. 1 processes are in enforce mode. /usr/sbin/libvirtd (110108) libvirtd...

Apakah libvirtd menggunakan driver keamanan AppArmor?

sudo virsh capabilities | less
.. <secmodel> <model>apparmor</model> <doi>0</doi> </secmodel>..

Anda dapat memeriksa silang libvirtdprofil AppArmor ;

cat /etc/apparmor.d/usr.sbin.libvirtd

Dan file lain di bawah, /etc/apparmor.d/libvirt/dan /etc/apparmor.d/abstractions/.

Solusi untuk Masalah

Yah, saya tidak punya banyak waktu untuk menemukan solusi yang lebih baik daripada menonaktifkan penegakan AppArmor untuk libvirtd;

sudo ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/

Nyalakan ulang engine untuk mempengaruhi perubahan penonaktifan libvirt;

systemctl reboot -i

Setelah sistem di-boot ulang, Anda sekarang dapat menjalankan KVM sebagai user non-root;

virsh list --all
 Id Name State --------------------

Dan ini dia tentang cara memperbaiki error QEMU/KVM Tidak terhubung di Ubuntu 20.04.

Bacaan lebih lanjut

AppArmor: Libvirtd Wiki

AppArmor Ubuntu Wiki

Tutorial Terkait

Cara Mengganti Nama Mesin Virtual KVM dengan perintah virsh

Instal Firewall pfSense di KVM

Gunakan VM VirtualBox di KVM