With AppArmor enabled on Debian/ Ubuntu systems, starting up virtual machines with libvirt can cause startup failures if not AppArmor is not properly configured.
AppArmor will write messages to the kernel log (visible with either the dmesg
command or in kernel.log
if available) regarding its actions.
If your libvirt guests are not starting up or failing, have a look at dmesg
. Example:
In the above example AppArmor has denied (apparmor="DENIED"
) read access (requested_mask=r
) to the file /data/vms/cluster_storage/base-os-ubuntu-focal.qcow2
. This blocks of course the startup guest machines we have previously created in the article: Terraform and libvirtd nodes.
To fix the issue, edit the file: /etc/apparmor.d/libvirt/TEMPLATE.qemu
By default it has the following content:
# # This profile is for the domain whose UUID matches this file. # #include <tunables/global> profile LIBVIRT_TEMPLATE flags=(attach_disconnected) { #include <abstractions/libvirt-qemu> }
In order to allow libvirt
to use the guest image files, change the content to (or add a similar line if your file path is different):
# # This profile is for the domain whose UUID matches this file. # #include <tunables/global> profile LIBVIRT_TEMPLATE flags=(attach_disconnected) { #include <abstractions/libvirt-qemu> /data/vms/cluster_storage/**.qcow2 rwk, }
The added line (line 9) will allow read (r
), write (w
) and lock (k
) access to all qcow2
files in the directory /data/vms/cluster_storage
.
Once added, all libvirt guests will start up again without any (AppArmor) issues.