所有 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 升级并挂掉了,那么请参考以下资料进行修复:
方法一 (中文翻译)
方法二