On 2/21/23 09:47, Sánta, Márton (ext) wrote: > Dear All, > > > > I have started to work with libvirt a few weeks ago, but I have some > problem with starting a virtual machine. Currently, I am using an > *embedded arm64 device* with a *Linux* built with *Yocto*. I managed to > install *lbvirt 8.1.0* in the image and I have a *qemu user* and *qemu > and kvm groups *in the system. I am using *KVM hypervisor* and I did the > configuration in the *qemu.conf* and *libvirtd.conf* files, enabled all > the sockets and services in the system. The xml based definition of the > virtual machine is simple, but when I try to start it I get the error > message: *Failed to start domain ’XYZ’* and *Unable to set ACLs on > /dev/kvm: Invalid argument*. I cannot set ACLs on the /dev/kvm (owner is > /root/, group is /kvm/ but I have also tried to set it /root:root/) with > the /setfacl /command, but I gave /rwx/ access to user, group and others > as well so everybody can use the device. I also uncommented the relevant > lines in the /qemu.conf/ file (/cgroup_controllers = …/ and > /cgroup_device_acl = …/) and I also found that /devices/ controller is > already mounted at //sys/fs/cgroup/devices/. Can anybody help me with > this issue? Did Anybody have similar problem? I can start a virtual > machine with *qemu-system-aarch64*, but I would like to use the libvirt > library to manage the machines. > > > > Thank you in advance for an early reply. > This is a namespace issue. Basically, when starting a guest (or domain as we call it), libvirt creates a private /dev for it. It's using mount namespace to create a private mount table to replace the original /dev, hence the name of the feature. And this private /dev is populated with only a handful of nodes (some basic ones, like /dev/zero, /dev/null, ... and those which are configured in domain XML). Each individual node is created as an exact copy of the original /dev, including ACL entries. If you understand C a bit you can see the function that's responsible for creating the nodes here [1]. Now, there used to be a bug, where libvirt tried to set ACLs even though the corresponding file had none. It was fixed by the following commit [2]. unfortunately, the commit is part of newer libvirt than what you have: v8.8.0. There is a workaround though: you can disable this namespace feature by setting the following in /etc/libvirt/qemu.conf: namespaces = [] Michal 1: https://gitlab.com/libvirt/libvirt/-/blob/master/src/qemu/qemu_namespace.c#L972 2: https://gitlab.com/libvirt/libvirt/-/commit/687374959e160dc566bd4b6d43c7bf1beb470c59