在 CentOS 7 上安全升级 glibc

在 CentOS 7 上安全升级 glibc

我在我的 CentOS 机器上尝试了一个 python 应用程序,它给出了以下错误:

ImportError: /usr/lib64/libc.so.6: version `GLIBC_2.18' not found (required by /tmp/_MEI2BYIr4/libstdc++.so.6)

我一直想升级 GLIBC,但读过一些论坛后,我觉得这可能会破坏系统。你知道还有其他方法吗?

谢谢

答案1

检查是否确实需要

首先检查 python 应用程序,因为它可能已过期,并且可能误读了版本glibc。CentOS 显示基本版本已安装,并已打补丁以跟上变化,这可能只是修复代码中正在寻找的版本作为快速修复的情况,但如果应用程序正在积极开发中,您需要让开发人员知道或自己 fork 它(如果可以的话)。

CentOS 7 的最新版本glibc应该是2.17-196.el7_4.2

如果需要,可以使用容器

如果绝对有必要运行此应用程序,官方的 RHEL 方法将是容器化,但您仍然需要提供一个可运行的 glibc,而这在普通的 CentOS 7 中是不可能的。

作为最后的手段,安装glibc在非标准位置

如果这不可行,并且作为最后的手段,可以安装glibc比 2.18 更新的版本,因为它已经有 9 年的历史了,并且glibc已经针对几个漏洞进行了更新,而且我不确定它是否可以使用makeCentOS 7 中的版本构建,但任何较新的版本都应该按如下方式工作:

  • 这可能会影响你的计算机的功能,因此请确保你知道自己在做什么

glibc您可以在服务器上的其他地方构建所需的版本,并将其添加到LD_LIBRARY_PATH应用程序中。请注意,这只能针对应用程序执行。

wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
tar zxvf glibc-2.18.tar.gz
cd glibc-2.18
mkdir build
cd build
../configure --prefix=/opt/glibc-2.18
make -j4
sudo make install

然后运行二进制文件,你需要使用它patchelf来更新它的解释器

patchelf --set-interpreter /opt/glibc-2.18/lib/ld-linux-x86-64.so.2 program_you_are_running

你需要让它找到新的 glibc 库,方法是

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/glibc-2.18/lib

或者您可以使用patchelf来更新二进制文件的 rpath(您可以将其与上一个pathelf命令结合使用)

patchelf --set-rpath /opt/glibc-2.18/lib:/usr/lib64 program_you_are_running

如果您进行更改,LD_LIBRARY_PATH请不要将其导出到整个系统,因为所有未修改的二进制文件patchelf都会出现段错误。

/opt是安装第三方应用程序和库的标准位置,但您可以使用远离系统路径的任何路径。

答案2

最后,我不需要升级 GLIBC。gdc-client我通过 R 下载的工具似乎是针对 Ubuntu 而不是 CentOS 的,尽管我在 CentOS 7 上进行了升级。然后我下载了适用于 CentOS 的 gdc-client,它运行良好。

答案3

在 CentOS 7 上,我将/usr/lib64文件夹包含rpath如下内容

patchelf --set-interpreter /opt/glibc-2.18/lib/ld-linux-x86-64.so.2 --set-rpath /opt/glibc-2.18/lib:/usr/lib64 pydio-agent

这对我有用

相关内容