我有一台 64 位 Redhat Enterprise Linux 服务器(版本 6.3),它不想让我安装 glibc.i686 模块以实现 32 位兼容性。当我以 root 身份尝试时yum install glibc.i686
,它给了我一长串这样的错误:
Transaction Check Error:
file /lib/libc.so.6 from install of glibc-2.12-1.80.el6_3.6.i686 conflicts with file from package libc6-6:2.15-1.x86_64
file /lib/libm.so.6 from install of glibc-2.12-1.80.el6_3.6.i686 conflicts with file from package libc6-6:2.15-1.x86_64
file /lib/libpthread.so.0 from install of glibc-2.12-1.80.el6_3.6.i686 conflicts with file from package libc6-6:2.15-1.x86_64
这是rpm -qa
glibc 和 libc6 的 grepping 输出:
# rpm -qa | grep glibc
glibc-common-2.12-1.80.el6_3.6.x86_64
glibc-2.12-1.80.el6_3.6.x86_64
# rpm -qa | grep libc6
libc6-2.15-1.x86_64
尽管我尽了最大的努力,谷歌并没有产生任何非常有用的东西。
为什么这两个包会发生冲突,我该如何让它们很好地协同工作?
编辑:
这是输出yum repolist
:
# yum repolist
Loaded plugins: product-id, rhnplugin, subscription-manager
Updating certificate-based repositories.
Unable to read consumer identity
repo id repo name status
rhel-x86_64-server-6 Red Hat Enterprise Linux Server (v. 6 for 64-bit x86_64) 8,824
repolist: 8,824
Red Hat Enterprise Linux中没有
libc6
软件包。相同文件的包名称是glibc
. 似乎有人从不同的 Linux 发行版在您的服务器上安装了一个软件包,并覆盖了他们在尝试这样做时会收到的错误(与您在此处看到的几乎相同)。这当然会使您的 RPM 数据库相对于实际安装的软件处于不一致的状态,并且可能会导致兼容性和依赖性问题,例如您今天遇到的问题。例如,不再可能从受支持的存储库更新包,并且难以准确确定系统上正在运行的代码。
我最好的猜测是有人(真的不知道正确的方法)试图将 glibc 升级到 Red Hat 提供的版本之外,最有可能利用的版本中不存在的新功能EL6 附带的 glibc。
如果您真的需要这个最新版本的 glibc,正确的方法是使用 Red Hat 的源 RPM,调整规范文件和任何补丁来构建新版本的 glibc,并使用新版本的新二进制 RPM。然后您负责自己维护它,可能会失去供应商支持等。因此,只有在业务需求绝对需要时,您才应该考虑这一点。(既然你失去了你的支持,你不妨切换到 CentOS ......)