Virtual Machine Manager on Manjaro ARM

Hi guys!

I’ve installed Manjaro ARM on my Raspberry Pi 4B (8 gigs RAM), and I would like to use Virtual Machine Manager to use other OS’s within Manjaro ARM. I’ve installed Virtual Machine Manager, as well as qemu, dnsmasq, iptables, and ebtables, and am able to launch Virtual Machine Manager into it’s main screen.

However if I click on the QEMU/KVM option and try to make the device active (to complete it’s virtualization connection), it just gives me an error saying it “Failed to initialize a valid firewall backend”. Here is what it says if I click “Details” under the error:
Traceback (most recent call last):
File “/usr/share/virt-manager/virtManager/asyncjob.py”, line 65, in cb_wrapper
callback(asyncjob, *args, **kwargs)
File “/usr/share/virt-manager/virtManager/asyncjob.py”, line 101, in tmpcb
callback(*args, **kwargs)
File “/usr/share/virt-manager/virtManager/object/libvirtobject.py”, line 57, in newfn
ret = fn(self, *args, **kwargs)
File “/usr/share/virt-manager/virtManager/object/network.py”, line 69, in start
self._backend.create()
File “/usr/lib/python3.9/site-packages/libvirt.py”, line 3174, in create
if ret == -1: raise libvirtError (‘virNetworkCreate() failed’, net=self)
libvirt.libvirtError: internal error: Failed to initialize a valid firewall backend

Anyways, much love and any help on this would be greatly appreciated! Apologies if I used any terminology wrong or if anything was unclear in the post, I’m still kind of a noob at this!

Hello,
have you tried?
systemctl restart libvirtd.service

Found someone who might have a solution, by searching the internets:

Suggestion is to install a couple of things:

sudo pacman -Syu ebtables dnsmasq
sudo systemctl restart libvirtd

Thank you guys for the answers! Unfortunately I’ve trued running those commands and am still getting the problem. Also if it helps, here is what I get when I run the command:

sudo systemctl status libvirtd.service

● libvirtd.service - Virtualization daemon
Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2021-03-30 19:14:28 PDT; 2min 6s ago
TriggeredBy: ● libvirtd-admin.socket
● libvirtd-ro.socket
● libvirtd.socket
Docs: man:libvirtd(8)
Deleted Link because it wouldn’t let me post it!!!
Main PID: 1762 (libvirtd)
Tasks: 19 (limit: 32768)
CGroup: /system.slice/libvirtd.service
└─1762 /usr/bin/libvirtd --timeout 120

Mar 30 19:14:28 MainDesktop systemd[1]: Started Virtualization daemon.
Mar 30 19:14:28 MainDesktop libvirtd[1762]: libvirt version: 7.0.0
Mar 30 19:14:28 MainDesktop libvirtd[1762]: hostname: MainDesktop
Mar 30 19:14:28 MainDesktop libvirtd[1762]: ebtables not available, firewall backend will not function: No such fil>
Mar 30 19:14:28 MainDesktop libvirtd[1762]: internal error: Failed to initialize a valid firewall backend
Mar 30 19:14:39 MainDesktop libvirtd[1762]: internal error: Failed to initialize a valid firewall backend
Mar 30 19:14:39 MainDesktop libvirtd[1762]: internal error: Failed to initialize a valid firewall backend

Are there any special settings that need to be enabled to allow virtualization on an ARM OS? I have read that you used to not be able to do this on ARM, but you can now as far as I can tell.

Maybe there is just a setting that I haven’t enabled yet?

FYI, I have the same issue so this seems a general issue with the current Manjaro release on ARM64.

I didn’t debug it in more detail, as a workaround you can create a bridge manually on your system, and this works fine with libvirt.

I finally got some time to debug this issue…

The issue on my system is that libvirt seems to use a relative path for “EBTABLES_PATH” instead of an absolute one. This means that ebtables needs to be in the working directory of libvirt.

A quick test is to stop the systemd service systemctl stop libvirt and start it manually in the /tmp/ directory.

# cd /tmp
# /usr/bin/libvirtd

Then try to do the same in the /usr/sbin directory - make sure that you have ebtables in this directory .

# cd /usr/sbin/
# /usr/bin/libvirtd

If this works fine you can resolve this by change the systemd unit for this service with a overwrite. Use “systemctl edit libvirtd” or create /etc/systemd/system/libvirtd.service.d/override.conf.

[Service]
WorkingDirectory=/usr/sbin

reload the systemd config with systemctl daemon-reload.

And this should fix the issue, not sure way this only seems to be an issue on Manjaro/Arch Linux ARM not and x86…

Hope this helps…

Hello, I had your same issue and searching in internet everywhere the solution seems to be:

But also for me me this didn’t solved the problem. Thanks to your suggestion, I inserted in the file /usr/lib/systemd/system/libvirtd.service the entry:

Then I reloaded the systemd config, restarted libvirt, and now the issue is not any longer present.

Many thanks!

1 Like