/lib 目录改为指向 /usr/lib 的软链接 (附常见问题解答)

2012 年 7 月 15 日

所有 Arch 软件包都已将 /lib 目录中的文件移入 /usr/lib ,现在要把 /lib 更改为指向 usr/lib 的链接。此次升级时,pacman 很有可能检测到 /lib 文件冲突。最简单的解决方案是:

pacman -Syu --ignore glibc
pacman -Su

千万不要--force 强制更新。

如果这样还是不行(出现依赖关系错误,依然有 /lib 文件冲突),请参照该文操作(下面有简单翻译)。

升级过程的常见问题

系统长时间未更新

对于长时间未更新的系统,建议先安装较旧版本 glibc(请将 <arch> 替换为系统平台,i686或x86_64):

pacman -U http://pkgbuild.com/~allan/glibc-2.16.0-1-<arch>.pkg.tar.xz

glibc 依赖问题

进行第一步 pacman -Syu --ignore glibc 时,部分之前未更新的用户可能遇到 gcc-libs 等软件包依赖错误。解决方法如下:
首先,询问是否跳过这些软件包时,选“y”(是),先更新其他软件包。然后忽略依赖关系,强制安装:

pacman -Sd binutils gcc gcc-libs

然后使用 pacman -Su 更新系统(更新 glibc)。

最终的 pacman -Su 仍出现 /lib 文件冲突

这表示 /lib 中仍残存不属于 glibc 的文件,或者 pacman 认为其他软件包也拥有 /lib。
首先,检查除了 glibc 还有哪些软件包拥有 /lib 下的文件:

$ find /lib -exec pacman -Qo -- {} + | grep -v "glibc"

如果出现属于其他软件包的文件,那么请升级或卸载这些软件包。至于无主文件(夹),应当把它们删除或移动进 /usr/lib
内核模块 depmod 遗留的文件是常见的无主文件。例如:

错误:没有软件包拥有 /lib/modules/3.1.9-2-ARCH/modules.*

如果 /lib/modules 内没有其他文件,那么可以安心删除该目录。
清理过 /lib 后,如果 pacman -Su 仍出现文件冲突,那么很可能是 pacman 认为其他软件包也拥有 /lib。通过以下命令检查:

$ grep '^lib/' /var/lib/pacman/local/*/files | grep -v glibc

请升级或卸载这些软件包,去除其中包含的 /lib 目录。
然后,pacman -Su 应该就正常了。升级后可以检查一下:

$ ls -ld /lib
lrwxrwxrwx   1 root root     7 Jul 11 21:10 lib -> usr/lib

系统修复

如果你已经不幸使用 –force 升级并挂掉了,那么请参考以下资料进行修复:
方法一中文翻译
方法二

新闻



© 2012-2024 Arch Linux Chinese Community | Arch Linux 中文社区
GNU FDL 1.3
Original designed by Archlinux.org · XHTML · CSS · RSS
Proudly powered by WordPress | Server by RivenCloud
The Arch Linux name and logo are recognized trademarks by Judd Vinet & Aaron Griffin. Some rights reserved.