Apache 2.4 启动/停止在使用 Shibboleth SP 3.2.0

问题描述

操作系统:Red Hat Enterprise Linux Server 7.9 (Maipo)
Apache 版本:Apache/2.4.46 (Unix)
Shibboleth 版本:3.2.0

尝试停止 Apache 时出错 (apachectl stop):

httpd: Syntax error on line 528 of <Apache>/conf/httpd.conf: Syntax error on line 13 of <Apache>/conf/myshib.conf: Cannot load /usr/lib64/shibboleth/mod_shib_24.so into server: /usr/lib64/libldap_r-2.4.so.2: undefined symbol: ber_sockbuf_io_udp

第 528 行 /conf/httpd.conf:

Include conf/myshib.conf

/conf/myshib.conf 的第 13 行

LoadModule mod_shib /usr/lib64/shibboleth/mod_shib_24.so

已尝试 - https://superuser.com/questions/1283252/slappasswd-symbol-lookup-error-undefined-symbol-ber-sockbuf-io-udp

  • 但运行“export LD_LIBRARY_PATH=/lib64:$LD_LIBRARY_PATH”并没有解决问题。

ldd /usr/lib64/libldap_r-2.4.so.2”命令的输出

    linux-vdso.so.1 =>  (0x00007ffd1c76e000)
    liblber-2.4.so.2 => /usr/lib64/liblber-2.4.so.2 (0x00007f5b3e87d000)
    libresolv.so.2 => /usr/lib64/libresolv.so.2 (0x00007f5b3e663000)
    libsasl2.so.3 => /usr/lib64/libsasl2.so.3 (0x00007f5b3e446000)
    libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f5b3e1d4000)
    libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f5b3dd71000)
    libssl3.so => /usr/lib64/libssl3.so (0x00007f5b3db14000)
    libsmime3.so => /usr/lib64/libsmime3.so (0x00007f5b3d8ec000)
    libnss3.so => /usr/lib64/libnss3.so (0x00007f5b3d5b8000)
    libnssutil3.so => /usr/lib64/libnssutil3.so (0x00007f5b3d388000)
    libplds4.so => /usr/lib64/libplds4.so (0x00007f5b3d184000)
    libplc4.so => /usr/lib64/libplc4.so (0x00007f5b3cf7f000)
    libnspr4.so => /usr/lib64/libnspr4.so (0x00007f5b3cd41000)
    libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x00007f5b3cb25000)
    libdl.so.2 => /usr/lib64/libdl.so.2 (0x00007f5b3c921000)
    libc.so.6 => /usr/lib64/libc.so.6 (0x00007f5b3c553000)
    libcrypt.so.1 => /usr/lib64/libcrypt.so.1 (0x00007f5b3c31c000)
    libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00007f5b3c0cf000)
    libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00007f5b3bde6000)
    libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00007f5b3bbb3000)
    libcom_err.so.2 => /usr/lib64/libcom_err.so.2 (0x00007f5b3b9af000)
    libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00007f5b3b79f000)
    libz.so.1 => /usr/lib64/libz.so.1 (0x00007f5b3b589000)
    librt.so.1 => /usr/lib64/librt.so.1 (0x00007f5b3b381000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f5b3eceb000)
    libfreebl3.so => /usr/lib64/libfreebl3.so (0x00007f5b3b17e000)
    libkeyutils.so.1 => /usr/lib64/libkeyutils.so.1 (0x00007f5b3af7a000)
    libselinux.so.1 => /usr/lib64/libselinux.so.1 (0x00007f5b3ad53000)
    libpcre.so.1 => /usr/lib64/libpcre.so.1 (0x00007f5b3aaf1000)

然后尝试 - https://unix.stackexchange.com/questions/193320/yum-corrupted-on-rhel-6

输出for lib in /lib64/.so.; do if nm -D $lib|grep ber_sockbuf_io_udp; then echo $lib; fi; done”命令:

000000000020e020 D ber_sockbuf_io_udp
/lib64/liblber-2.4.so.2
000000000020e020 D ber_sockbuf_io_udp
/lib64/liblber-2.4.so.2.10.7
                 U ber_sockbuf_io_udp
/lib64/libldap-2.4.so.2
                 U ber_sockbuf_io_udp
/lib64/libldap-2.4.so.2.10.7
                 U ber_sockbuf_io_udp
/lib64/libldap_r-2.4.so.2
                 U ber_sockbuf_io_udp
/lib64/libldap_r-2.4.so.2.10.7

rpm -qf /lib64/liblber-2.4.so.2”命令的输出

openldap-2.4.44-22.el7.x86_64

尝试安装“openldap”但它已经存在

yum install openldap-2.4.44-22.el7.x86_64
Loaded plugins: langpacks,product-id,search-disabled-repos
Package openldap-2.4.44-22.el7.x86_64 already installed and latest version
nothing to do

使用“yum重新安装 openldap.x86_64”命令重新启动整个服务器并重新安装“openldap”,但没有成功。

Apache 在访问 https://hostname.domain.com 使用 URL https://hostname.domain.com/Shibboleth.sso/Metadata 失败通过 Apache 下载 Shib 元数据 XML 文件时启动并返回响应。。 >

如果我没有添加任何明显的东西,我深表歉意。

更新:
使用较旧的 Shibboleth 3.1.0 版

时有效

解决方法

这里的类似主题:https://unix.stackexchange.com/questions/193320/yum-corrupted-on-rhel-6

就我而言(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/lib64 目录中。 我更换了它,现在 ./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 中是否有缺失或弃用的符号... 有什么办法可以区分这两个版本的差异吗?

更新 我注意到您可以在 Apache conf 中使用 LoadFile 命令。 在 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 解决了问题。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...