DeveloperWiki:usrlib
All files in the /lib directory have been moved to /usr/lib and now /lib is a symlink to usr/lib.
所有的lib下的库现在全都移到了/usr/lib下。现在前者是后者的一个软链接
During this update, pacman will identify a conflict in the /lib directory with the message:
升级期间如果出现如下错误
error: failed to commit transaction (conflicting files) glibc: /lib exists in filesystem Errors occurred, no packages were upgraded.
In the simplest case, the update can be performed by doing:
最简单的方式:
pacman -Syu --ignore glibc,curl pacman -Su
There are two possible issues that might occur during this update.
Contents[hide] |
Issue 1: glibc dependency errors
If running "pacman -Syu --ignore glibc,curl" gives:
warning: ignoring package glibc-2.16.0-2 warning: cannot resolve "glibc>=2.16", a dependency of "gcc-libs" ... :: The following packages cannot be upgraded due to unresolvable dependencies: binutils gcc gcc-libs Do you want to skip the above packages for this upgrade [y/N]
Say "y" to skipping the packages, then install them all using (e.g.):
pacman -Sd binutils gcc gcc-libs
跳过检测包依赖
Note the use of a single "-d" only ignores the versioning of dependencies and not the actual dependency itself. Then finish the update using:
pacman -Su
Issue 2: The final "pacman -Su" still has conflicts in /lib
Packages that own files in /lib
If after this the "pacman -Su" still has conflicts with /lib, this is likely because a package on your system other than glibc owns files in /lib. Such packages can be detected using:
$ grep '^lib/' /var/lib/pacman/local/*/files
These packages need rebuilding so as not to include the /lib directory. They can also simply be uninstalled and reinstalled again after upgrading glibc. The the final "pacman -Su" will successfully install glibc if there are no untracked files (see the next section).
Unpackaged files
This means that you have files or folders still in /lib or pacman thinks a package apart from glibc still own /lib. You can see which package own files in /lib by using:
$ find /lib -exec pacman -Qo -- {} +
pacman -Qo /lib/*
这个命令可以找到不被任何包依赖的文件(……)。google文件名即可。
一般只要卸载这些软件包就可以了,当然也可重装(如果软件升级了的话)。
可能还会有如下错误
error: cannot determine ownership of directory '/lib/modules'这是一些老版本kernel的驱动模块什么的,因为arch滚的特别快,所以就被抛弃了……
然后直接rm或者mv即可
If any package apart from glibc is listed as owning a file, that package needs to be updated to install its files in /usr/lib. Any files unowned by a package should either be deleted or moved to /usr/lib and any directories within /lib need deleted (after they are empty...).
One common source of files in /lib is left overs from running depmod after upgrading the kernel, but prior to reboot. The kernel modules included with the linux package in the repositories are now stored in /usr/lib/modules
.
Success
You can confirm the update is complete by looking in your root directory to see that lib is a symlink to usr/lib.
$ ls -ld /lib
lrwxrwxrwx 1 root root 7 Jul 11 21:10 lib -> usr/lib
成功升级后lib将会软链接奥usr/lib