Skip to main content
Topic: [SOLVED] Latest update broke Libvirt/Nettle? (Read 1325 times) previous topic - next topic
0 Members and 2 Guests are viewing this topic.

[SOLVED] Latest update broke Libvirt/Nettle?

I was using virt-manager with QEMU about 15 hours ago and was having no problems using my virtual machines. I went to sleep and when I woke up today I ran the command 'pacman -Syu' and saw there were some updates available, which I promptly downloaded and installed. After this, I ran the command 'libvirtd' to start the libvirt daemon (required for virt-manager to work).

However, I got the following error:

2020-05-07 01:05:51.214+0000: 29841: error : qemuProcessQMPLaunch:8541 : internal error: Failed to start QEMU binary /usr/bin/qemu-system-x86_64 for probing: /usr/bin/qemu-system-x86_64: error while loading shared libraries: libnettle.so.7: cannot open shared object file: No such file or directory

I uninstalled virt-manager, libvirt and QEMU, deleted the packages from the cache under var/cache/pacman and did a clean install of virt-manager, libvirt and QEMU, but nothing changed. After this I tried going to the directory 'usr/bin' and starting the qemu-system-x86_64 file manually, which gave me the following error:

./qemu-system-x86_64: error while loading shared libraries: libnettle.so.7: cannot open shared object file: No such file or directory

I referred back to the previous terminal and realized that I should have read the output more carefully - specifically about libnettle not being able to be opened. So I went to have a look in the directory /usr/lib and sure enough, the file that the libvirt daemon was/is trying to refer to, libnettle.so.7, had vanished. Instead, there is now a file called libnettle.so.8 in that directory, which seems to have replaced libnettle.so.7

After doing a bit of thinking, I figured "hey, maybe I can just downgrade Nettle and that will get rid of libnettle.so.8, bring back libnettle.so.7 and then the libvirt daemon will have something to refer to". So I tried downgrading Nettle from 3.6-1 (the version I currently have installed) to 3.5.1 by downloading it from https://www.lysator.liu.se/~nisse/nettle/ but I kept having errors so I gave up. I should add that I did uninstall Nettle 3.6-1 before attempting to install Nettle 3.5.1. I only used the 'pacman -Rdd' command to uninstall it though, rather than uninstalling all of the other software that depends on nettle. So I'm not sure if that may have caused the errors while trying to install Nettle 3.5.1

After this, I figured that since the libvirt daemon is referring to libnettle.so.7 but I instead have libnettle.so.8, that maybe I should try updating libvirt itself. I did discover that libvirt devs appear to have updated libvirt in the last couple of days and that the version of libvirt that is currently in the Artix official repositories is out of date, so I tried updating to the new version of libvirt by cloning the files from the AUR and using the 'makepkg' command to build a more up to date package for libvirt. But I had the following error while building it:

autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal -I m4 --output=aclocal.m4t
Can't exec "aclocal": No such file or directory at /usr/share/autoconf/Autom4te/FileUtils.pm line 326.
autoreconf: failed to run aclocal: No such file or directory
==> ERROR: A failure occurred in build().

I have no idea what aclocal is but I can't seem to build libvirt from the AUR. Also, I did uninstall the version of libvirt I already had before attempting to build from the AUR. But this time instead of using 'pacman -Rdd' I just uninstalled virt-manager (which depends on libvirt), then uninstalled libvirt.

And that's where I'm up to now. I'm really not sure why the libnettle.so.7 vanished from my usr/lib directory but my guess is that when dnsmasq updated when I ran 'pacman -Syu' earlier today, that it somehow caused it to remove nettle.so.7 and replaced it with nettle.so.8 but now I can't run the libvirt daemon and therefore can't use virt-manager.

If anyone has any ideas, I would greatly appreciate it. For the time being, I can't access any of my virtual machines :(

But I guess I will just have to wait for the package managers to update libvirt in the Artix repositories so that it will refer to the new libnettle.so.8 file - I'm guessing that's what the fix will end up being.

Re: Latest update broke Libvirt/Nettle?

Reply #1
##### UPDATE #####

I accidentally figured out how to solve this issue. I was trying to work out how to configure libvirtd to refer to libnettle.so.7 instead of libnettle.so.8 and while trying to do that, I discovered that there was a file called libnettle.so.7 sitting in my usr/local/lib directory. So I simply copied and pasted it (along with another called libnettle.so.7.0) into my usr/lib directory. All of a sudden, the libvirt daemon seems to have no problem running now. I've tested virt-manager and I'm now able to open my virtual machines again and can use them with seemingly no issues.

However, this solution seems to have brought with it another problem, although it's a pretty minor problem in my opinion so I'm not too worried about it. When I copied the libnettle.so.7 file from usr/local/lib to usr/lib, I also noticed that there was a file called libnettle.so in there. So I deleted the already existing libnettle.so in usr/lib and replaced it with this libnettle.so I discovered in /usr/local/lib because I assumed that the already existing libnettle.so file would be incompatible with libnettle.so.7

Deleting the already existing libnettle.so file turned out to probably not be a good move. All of a sudden, I couldn't open any terminals, so I decided to restart my computer, thinking that doing so might solve that issue. Instead, my computer restarted with no GUI and instead would only boot into a CLI. Luckily I was able to use bash commands, so I just ran the command 'pacman -S nettle' which seems to have put a new libnettle.so file into my usr/lib directory. Then I ran a command to power off my computer and turned it back on. Like magic, my computer could once again boot into a GUI.

But now...well like I said before, the libvirt daemon can now run with no problems, so I can run virtual machines again now. So that issue is fixed. But now when I open up any application, nothing appears on the panel. So for example if I open a terminal, then the terminal will open just fine and I can use it with no problems (that I've observed so far), but if I look down at the panel, there is no button for it that should appear on the panel once I open it - meaning that if I click the minimize button for any application then I will be unable to restore it by clicking on it's button on the panel.

I don't personally consider this that big of a deal since I can still use alt + tab to navigate between windows. It's a minor inconvenience that I'll probably just get used to. If anyone did have an idea on how to maybe fix that though then it would be appreciated. But for now, alt + tab seems to work just fine and ultimately I'm just glad that I can access my virtual machines again.

I think I will install timeshift and start making regular snapshots...I don't know why I didn't do that when I first installed artix, since that's usually a software I install very soon after installing any distro...

Re: Latest update broke Libvirt/Nettle?

Reply #2
Thanks for long text, but your note is a little confused. You talk about libvirt in the title, but qemu doesn't work, which another user reported yesterday and was fixed.

Make an update and if everything works, mark it as "solved".

Linking old versions of libraries can break your system, be careful with that.

Have a nice day! ;-)