RHEL 6 上的 Yum 损坏

RHEL 6 上的 Yum 损坏

。我的 yum 命令遇到了问题。看起来和这个网站描述的问题完全一样, Yum 在 CentOS 6.2 上损坏,导入 python 模块时出现问题

这是我每次执行 yum 命令时都会产生的错误。

[root@Server1~]# yum list

 There was a problem importing one of the
 Python modules required to run yum. The error leading to this problem
 was:

    /lib64/libldap-2.4.so.2: undefined symbol: ber_sockbuf_io_udp

 Please install a package which provides this module, or verify that
 the module is installed correctly.

 It's possible that the above module doesn't match the current version
 of Python, which is:
 2.6.6 (r266:84292, Nov 21 2013, 10:50:32) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)]

 If you cannot solve this problem yourself, please go to the yum faq
 at:   http://yum.baseurl.org/wiki/Faq

但是我可以运行 # python2 ,它位于/usr/bin/python2

[root@Server1~]# python2

Python 2.6.6 (r266:84292, Nov 21 2013, 10:50:32)

[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

\>>>

这些是 yum import 的模块:

yum_模块

答案1

您应该这样做ldd /lib64/libldap-2.4.so.2,检查输出中是否有“未定义的引用”,找到提供该未定义库的软件包,找到您的存储库,手动下载提供该库的 rpm,然后使用rpm -i <missing>.rpm.

您的问题很可能是由于 libldap 中的错误或您对打包系统的手动干预造成的。

我附近正好有 RHEL6,所以让我们找到您的符号for lib in /lib64/*.so.*; do if nm -D $lib|grep ber_sockbuf_io_udp; then echo $lib; fi; done

返回:

0000003e2240e460 D ber_sockbuf_io_udp
 /lib64/liblber-2.4.so.2
0000003e2240e460 D ber_sockbuf_io_udp
/lib64/liblber-2.4.so.2.5.6
                U ber_sockbuf_io_udp
/lib64/libldap-2.4.so.2
                 U ber_sockbuf_io_udp
/lib64/libldap-2.4.so.2.5.6
                 U ber_sockbuf_io_udp
/lib64/libldap_r-2.4.so.2
                 U ber_sockbuf_io_udp
/lib64/libldap_r-2.4.so.2.5.6

因此,您的符号在 /lib64/liblber-2.4.so.2 中定义,它安装在我的系统上。安装后我可以做rpm -qf /lib64/liblber-2.4.so.2这件事告诉我

openldap-2.4.23-32.el6_4.1.x86_64

所以它应该是你的包的一部分。现在你应该检查你的文件系统中是否存在这个库。如果没有 - 下载并重新安装 openldap 软件包。如果它确实存在——你的Python有问题。

答案2

就我而言(RHEL7.8 + Apache 2.4 + Shibboleth 3.2),我可以通过将/usr/lib64/libldap_r-2.4.so.2库替换为 Apache 目录中的库来解决该问题:<APACHE_ROOT>/HTTPServer/openldap/lib/libldap_r-2.4.so.2

运行: locate libldap_r-2.4.so.2 查找库的位置。就我而言,我得到:

/app/ptc/Windchill_12.0/HTTPServer/openldap/lib/libldap_r-2.4.so.2
/app/ptc/Windchill_12.0/HTTPServer/openldap/lib/libldap_r-2.4.so.2.10.12
/usr/lib/libldap_r-2.4.so.2
/usr/lib/libldap_r-2.4.so.2.10.7
/usr/lib64/libldap_r-2.4.so.2
/usr/lib64/libldap_r-2.4.so.2.10.7

我注意到错误中使用的库位于/usr/lib64dir 中。我替换了它,现在./apachectl -t报告“语法正常”

我对 Linux 了解不够,无法解释这里发生了什么或正确的解决方法是什么。这是我的观察结果,解决了这个问题,但我相信我的步骤有点儿不妥。

有人有更优雅、可升级的解决方案吗?

参考:https://groups.google.com/g/repmgr/c/TS7QfYEoNoY

cd /usr/lib64/
ll | grep libldap
lrwxrwxrwx.  1 root root       21 Feb 11 16:42 libldap-2.4.so.2 -> libldap-2.4.so.2.10.7
-rwxr-xr-x.  1 root root   352512 Jun  6  2020 libldap-2.4.so.2.10.7
lrwxrwxrwx.  1 root root       23 Feb 11 16:42 libldap_r-2.4.so.2 -> libldap_r-2.4.so.2.10.7
-rwxr-xr-x.  1 root root   381328 Jun  6  2020 libldap_r-2.4.so.2.10.7

它看起来确实/usr/lib64/libldap_r2.4.so.2只是一个符号链接libldap_r-2.4.so.2.10.7

我想知道 2.10.7 中是否缺少或已弃用的符号...有什么方法可以区分两个版本中的差异吗?

更新 我注意到您可以使用LoadFileApache conf 中的命令。在条目之前添加LoadFile <APACHE_ROOT>/HTTPServer/openldap/lib/libldap_r-2.4.so.2我的 00-shib.conf 文件LoadModule mod_shib /usr/lib64/shibboleth/mod_shib_24.so解决了问题。

对我来说,这仍然像是一种解决方法/黑客,并且库/不同版本可能存在潜在问题。

相关内容