pacman error failed to commit transaction

pacman -Syu 升级的时候遇到了错误 error: failed to commit transaction
error: failed to commit transaction (conflicting files)
js52: /usr/lib/libmozjs-52.so.0 exists in filesystem
Errors occurred, no packages were upgraded.

随后查询了 pacman的文档 原文解释如下

发生了什么事: pacman 检测到文件冲突,而且按照设计,pacman 不会覆盖文件。这是设计功能,不是缺陷。

先用 (pacman -Qo 文件的完整路径 检查哪个软件包提供了文件。如果是其它软件包,请报告问题。如果不是其它软件包提供,将已经存在的文件重命名并重新升级。如果一切顺利,可以删掉备份文件。

如果是通过 make install 等非 pacman 方式安装的软件,安装的文件不属于任何软件包!需要先手动删除这些文件,这样就可以正常安装软件了。不属于任何软件包的文件列表一文中提供了查找这些文件的脚本。

每一个安装的软件包都会提供一个 /var/lib/pacman/local/_$package-$version_/files 文件,包含此软件包的元数据。如果文件损坏或者丢失,将会导致升级时出现file exists in filesystem 错误。此错误通常只会影响一个软件包,除了手动删除或移动所有的问题文件,可以作为特例使用pacman -S --force $packagepacman 强制覆盖这些文件。

-- https://wiki.archlinux.org/index.php/Pacman\_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#.E5.8D.87.E7.BA.A7.E6.97.B6.E9.81.87.E5.88.B0.E9.97.AE.E9.A2.98:\_.22file\_exists\_in\_filesystem.22.28conflicting\_files.29.21

然后 我到/usr/lib/下查看libmozjs-52.so.0是一个ln的软链接,指向libmozjs-52.so,把/usr/lib/libmozjs-52.so.0重命名 /usr/lib/libmozjs-52.so.0.bak

然后再pacman -Syu 升级成功。查看的时候,发现新的/usr/lib/libmozjs-52.so.0是一个真实的文件不再是一个软链接,与以前是冲突的所以才报的这个错误。

error: failed to commit transaction (conflicting files)
js52: /usr/lib/libmozjs-52.so.0 exists in filesystem
Errors occurred, no packages were upgraded.

改一下名就好了

上一篇
下一篇