前言
用了 manjaro 两个多月,一直很稳定,一大早看到了 168 个包要更新,想也没想就点了 yes,结果就遇到了传说中的滚挂,由于头一次遇到这种问题,花了一天的时间才解决,中间也走了不少弯路,一定要记录一下这次难得的经历。
解决:pacman: error while loading shared libraries: libidn2.so.4: cannot open shared object file: No such file or directory
这个错误的意思是:libidn2.so.4 这个共享文件缺失。
解决思路
所以最简单的解决方法就是:
缺失的这个文件原来在哪个目录下?
去哪找找到这个缺失的文件?
一、
先解决第一个问题,我用的方法比较暴力,tty 下在根目录用 find 查询 libidn2
sudo -i // 进入 root 模式
cd / // 进根目录
find -name libidn2* // 查询以 libidn2 为开头的文件或目录
在众多的搜索结果里,我锁定了这个目录:/usr/lib/
cd 到这个目录后发现果然没有 libidn2.so.4 这个文件
二、
在网上搜索“libidn2”, 找到官网后下载最新版本的安装包, 根据自己的系统版本选择相应文件进行下载 -> 传送门 我下载的是.gz 格式的,由于我是在别的系统下载包到 U 盘然后拷到这个系统的,所以还需要一些操作 U 盘的指令。
1. 未插入 u 盘前,检查自己的硬盘分区情况
fdisk -l
2. 插入以后,再执行上述命令,会发现多了一个设备,记住这个 /dev/sdb1
3. 在 /mnt 下新建 usb 目录作为 u 盘的挂载点
mkdir /mnt/usb
4. 然后将 /dev/sdb1 挂载到 /mnt/usb 目录下
mount /dev/sdb1 /mnt/usb/
5. cd 到 /mnt/usb 下就能看到 u 盘里的文件了
cd /mnt/usb/
三、
1. 将 u 盘里预先下载好的压缩包解压缩
tar -xf libidn2-latest.tar.gz
2. 进入 u 盘里的 /usr/lib, 注意,不是根目录下的那个
cd /usr/lib
3. 拷贝缺失的文件到 /usr/lib
cp libidn2.so.4 /usr/lib/
4. 重新运行 pacman 进行中更新,此步需要联网进行
pacman -S libidn2 –force
pacman -Syu
附:我的 libidn 文件 github 地址参考博客
总结
这次修复系统的体验还是很难得的,学到了很多命令,也感谢臧琛与李宜衡的无私帮助。
更新系统前一定要去官网看看 log,无脑点 yes,滚挂是早晚的事,这次更新我也是在官网的论坛上发现有不少人遇到了同样的问题,才在评论区找到了解决办法 -> 传送门