Manjaro stuck on boot screen: libidn2.so.4 missing

Hi, I can not boot my system anymore after doing some updates, that may not have been conpleted.

When booing with text output, I get the following message:
“udevadm: error while loading shared libraries: libidn2.so.4: cannot open shared object file: No such file or directory”

What can I do?

3 Likes

Reading the announcements ?!?

Since you bricked your system you may start it with a live media and fix it via chrooting into your system.

1 Like

Thank you @philm you saved me a lot of :sob::cold_sweat::nauseated_face::face_vomiting:
i installed arch install scripts so i could use arch-chroot because i didn’t knew that mhwd-chroot existed… now i know…

My system has been broken by an automatic update. “Can’t find libidn2.so.0”

Boot from earlier USB flash:
sudo pacman -Sy (update package databases to make it usable)
sudo pacman -S mhwd-chroot
Next:
sudo mhwd-chroot (doesn’t work, broken command that launches terminal)
sudo mhwd-chroot-shell (worked)

Then in the terminal that should be a found Manjaro installation:

sudo pacman -S systemd (reinstalls/compiles needed files)

Now it is booting OK.

UPD

I omitted that I also installed libidn2 explicitly(pacman).

3 Likes

I still can not unbrick fix the system. Booting from Live-USB worked, mhwd-chroot worked as well, but pacman does not work. Error message is

pacman: error while loading shared libraries: libidn2.so.4: cannot open shared object file: No such file or directory

What to do?

Worked for me but mhwd-chroot-(shell) failed to find the system, probly due to disk being nvme. @bongokarl perhaps that’s the case with you too and/or you didn’t actually enter chroot properly.

Here is how to do it manually:

( after booted to live system and connected to wifi/network)

sudo su -
mkdir /t
mount /dev/nvmen1p2 /t  - replace nvmen1p2 with your actual device,  representing the root partition of your system
ls -lah /t    - to ensure you actually mounted the root partition of your broken system
mount /dev/nvmen1p1 /t/boot/efi  - optional - in case you are running in UEFI mode, again, replace with the correct device name
mount -t proc proc /t/proc
mount --rbind /dev /t/dev
mount --rbind /sys /t/sys
mount --rbind /run /t/run
cp /etc/resolv.conf /t/etc/
chroot /t bash

upon success, proceed as suggested above…

BR

2 Likes

try manual chroot (https://wiki.archlinux.org/index.php/chroot#Using_chroot)

or pacman with --sysroot option (man pacman:
–sysroot
Specify an alternative system root. Pacman will chroot and chdir into the system root prior to running. This allows mounted guest
systems to be properly operated on. Any other paths given will be interpreted as relative to the system root. Requires root privileges.)

(read also here the topics regarding sysroot https://wiki.archlinux.org/index.php/pacman)

1 Like

only update in terminal and dont use gui in arch based distro for updates.
Also use pacman not some other utility

1 Like

I only update through pacman and I had the same problem.

  1. chroot
  2. pacman -U /var/cache/pacman/pkg/libidn2-2.0.5-1-x86_64.pkg.tar.xz
  3. cp /var/cache/pacman/pkg/libidn2-2.1.0-1-x86_64.pkg.tar.xz ~
    cd ~
    tar xf libidn2-2.1.0-1-x86_64.pkg.tar.xz
  4. cp usr/lib/libidn2.so.4* /usr/lib/
  5. pacman -S libidn2 --force
  6. pacman -Syu
  7. pacman -S systemd
    exit
    reboot

After successful boot run
sudo pacman -Syyuu

5 Likes

yes, you encounterd the same issue but terminal showed alot errors so you knew reboot wont work

I had the same issue by updating with “pacman -Syu” instead of “pacman -Syyuu” and rebooting without reading the output.

This is how I fixed it with a live system and arch-chroot:

  1. Boot from a live system (connected to the internet)
  2. sudo pacman -Sy
  3. Mount system disk
    a) sudo fdisk -l (find the device that contains root, mine was /dev/nvme0n1p4)
    b) sudo mount /dev/nvme0n1p4 /mnt
  4. sudo pacman -S arch-install-scripts
  5. sudo arch-chroot /mnt
  6. sudo pacman -S systemd
  7. It will ask you to downgrade to “239.6-4”, type “Y”
  8. Reboot (OS should boot normally now)
  9. sudo pacman -Syyuu

Everything should work normally now.

4 Likes

I have been using Pamac for updates since I first installed Manjaro two years ago and I never had an issue like this where I could not boot at all. Even with the botched graphic driver update I was able to at least log in using tty and fix my problem without live usb. I understand that there are reasons behind updating using the pacman directly, even though others in the thread mentioned that their non-gui updates also failed, but it is a catastrophically bad user experience if GUI package manager bundled with the distro works right 99.9% of the time, but could randomly result in the bricked system on any day.

2 Likes

Hi, already step 2 fails:

pacman -U /var/cache/pacman/pkg/libidn2-2.0.5-1-x86_64.pkg.tar.xz

Error is:

pacman -U /var/cache/pacman/pkg/libidn2-2.0.5-1-x86_64.pkg.tar.xz
pacman: error while loading shared libraries: libidn2.so.4: cannot open shared object file: >No such file or directory

How can I get pacman back to work without using pacman?

This was a life saver! Thanks.

Didn’t read the announcement!
Sorry Philm, it’s all good now.

How to fix that error:
pacman: error while loading shared libraries: libidn2.so.4: cannot open shared object file

if you dont want to take the time to quickly read the announcements, then dont update right away. theres nothing wrong with waiting a few days if you dont have time to read them first. and this is more on the fault of the user than the distro. you have many options for automated regular backups with Timeshift (in manjaro repo) or another backup software. it takes no more than 2-3 minutes to setup and then you can forget its even there and let it run a quick rsync on the schedule you set it to do so, i save 2/week and 2/month and i never even see it happen but i do know i can do just about any careless/idiotic/dumb things i want to do and i know i have that handy rewind button to make all those careless/idiotic/dumb things disappear as if i never did them.

install and the next time you feel the need to update without reading announcements, run a quick timeshift sync and know you’ll be fine no matter what. backing up is not exactly a revolutionary idea nor is it secret knowledge and should be one of those things that are done as soon as you get an OS installed.

1 Like

GNU has a technical solution to that fundamental problem: Guix
https://www.gnu.org/software/guix/

Transactional upgrades and roll-backs, reproducible build environments, unprivileged package management, and per-user profiles.
It’s based on Nix package manager that installs packages into uniquely named directories.

Whole operating system is described in one file.

Speaking of roll-back, each time you run guix system reconfigure , a new generation of the system is created—without modifying or deleting previous generations. Old system generations get an entry in the bootloader boot menu, allowing you to boot them in case something went wrong with the latest generation. Reassuring, no? The guix system list-generations command lists the system generations available on disk. It is also possible to roll back the system via the commands guix system roll-back and guix system switch-generation .

Guix is written in Guile(Scheme language), and that looks natural to any Emacs user like me.

2 Likes

ls /var/cache/pacman/pkg/libidn*

and see what packages you have.

Forum kindly sponsored by Bytemark