我无法将文件系统升级到最新版本,/lib
并且/lib64
存在。
我不能只是删除链接,否则所有二进制文件都将无法运行,
任何想法?
# pacman -S filesystem
:: filesystem is in IgnorePkg/IgnoreGroup. Install anyway? [Y/n]
resolving dependencies...
looking for inter-conflicts...
Targets (1): filesystem-2013.01-3
Total Installed Size: 0.31 MiB
Net Upgrade Size: 0.21 MiB
Proceed with installation? [Y/n]
(1/1) checking package integrity [###############################] 100%
(1/1) loading package files [###############################] 100%
(1/1) checking for file conflicts [###############################] 100%
error: failed to commit transaction (conflicting files)
filesystem: /lib exists in filesystem
filesystem: /lib64 exists in filesystem
Errors occurred, no packages were upgraded.
答案1
当符号链接/lib
被移动到另一个包时,这个问题就被指出了。
一起更新 filesystem-2013.01-1 和 glibc-2.17-2
由于 /lib 符号链接从 glibc 包移动到更合适的文件系统包,因此需要一起更新 glibc-2.17-2 和 filesystem-2013.01-1。当您运行时,这会自动发生
pacman -Syu
。请记住,不支持部分更新,并且切勿使用该--force
选项。x86_64 上升级的一个潜在问题是在
/usr/lib64
.所有在此目录中包含文件的 Arch Linux 软件包都已更新,因此请先单独更新这些软件包。任何在此目录中包含文件的 AUR 包都应更新以将它们安装在/usr/lib
.
答案2
该解决方案并不完全适用于问题中描述的问题(但对于这个),但无论如何它可能会有所帮助。
通常更新失败是由一些其他软件包引起的,需要先更新这些软件包才能更新该filesystem
软件包。所以像这样更新:
$ sudo -s
# pacman -Syu --ignore filesystem,bash
# pacman -S bash
# pacman -Su
第一个命令只是为了确保我们打开了 root-shell,以防sudo
更新期间被破坏。第二个命令更新除该filesystem
包之外的所有包,最后一个命令最终更新filesystem
。
如果您使用 AUR 或自编译包:请记住,AUR 包中的文件或未维护的文件也可能导致与filesystem
!假设filesystem
更新失败并出现以下情况:
filesystem: /bin exists in filesystem
filesystem: /sbin exists in filesystem
filesystem: /usr/sbin exists in filesystem
您应该检查 AUR 包或未维护的文件/bin
,/sbin
并/usr/sbin
使用以下命令:
grep '^\(bin\|sbin\|usr/sbin\)' /var/lib/pacman/local/*/files | cut -d ":" -f 1 | uniq | cut -d "/" -f 6
列出在任何这些目录中保存文件的所有包,并且
find /bin /sbin /usr/sbin -exec pacman -Qo -- {} + >/dev/null
列出这些目录中不属于任何包的所有文件。
更新 AUR 包和/或将未维护的文件移动到 /usr/local/... ,更新filesystem
应该可以工作。
谢谢杰森·瑞恩纠正我的答案。