请谨慎操作Ubuntu18.04升级GLIBC_2.29,解决ImportError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29‘

Posted YirongChen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请谨慎操作Ubuntu18.04升级GLIBC_2.29,解决ImportError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29‘相关的知识,希望对你有一定的参考价值。

根据大家反馈,操作可能有导致系统崩溃的风险,仅供大家参考!

问题分析

个人在搭配transformers环境(Ubuntu18.04),使用时出现如下报错:

ImportError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29’ not found (required by /home/xxxx/anaconda3/envs/xxxx/lib/python3.6/site-packages/tokenizers/tokenizers.cpython-36m-x86_64-linux-gnu.so)

分析上述报错,新版transformers的tokenizers需要2.29版本的GLIBC

查看服务器当前版本,命令如下:

strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_

返回的结果如下:

GLIBC_2.2.5
GLIBC_2.4
GLIBC_2.15
GLIBC_2.18
GLIBC_2.23
GLIBC_2.24
GLIBC_2.25
GLIBC_2.26
GLIBC_2.27
GLIBC_PRIVATE

说明服务器当前是没有GLIBC_2.29的

安装GLIBC_2.29

下载

使用以下命令下载:

cd /usr/local
wget http://ftp.gnu.org/gnu/glibc/glibc-2.29.tar.gz

更高的版本可以在http://ftp.gnu.org/pub/gnu/glibc/下载。

进入超级管理员模式

输入以下命令然后运行密码

sudo su

下面的命令需要在管理员模式下进行

解压并配置

使用以下命令解压并进入glibc-2.29,创建build目录

tar -zxvf glibc-2.29.tar.gz
cd glibc-2.29
mkdir build
cd build/
../configure --prefix=/usr/local --disable-sanity-checks

上面的命令当中,--disable-sanity-checks起到关键的作用!

安装

分别运行以下命令

make -j18
make install

安装成功后大概返回如下图所示的界面,没有报错,说明安装成功!

建立软连接

使用以下命令查看下/lib/x86_64-linux-gnu/libm.so.6的连接情况:

cd /lib/x86_64-linux-gnu
ll

在返回的结果当中,可以看到/lib/x86_64-linux-gnu/libm.so.6软连接到libm-2.27.so

由于前面配置时,设置了--prefix=/usr/local,所以libm-2.29.so被安装在/usr/local/lib位置,我们可以把文件libm-2.29.so复制到/lib/x86_64-linux-gnu下:

cp /usr/local/lib/libm-2.29.so /lib/x86_64-linux-gnu/

进行强制软连接:

ln -sf libm-2.29.so libm.so.6

查看结果:

strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_

Ubuntu 18.04 出现GLIBC_2.28 not found的解决方法(亲测有效)

关于/lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.28’ not found`出现报错,建议不要使用源码包去编译并升级。在下文有分享一个使用官方的Debian软件包去升级使用的方法。仅供参考!

环境

# uname -a
Linux Ubuntu 5.4.0-144-generic #161~18.04.1-Ubuntu SMP Fri Feb 10 15:55:22 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

分析原因

glibc是linux底层的API库。通常情况下,有些环境需要glibc更高的版本才支持,比如GLIBC_2.28

另外对它操作升级,可能有导致系统崩溃的风险。

经验与教训

使用GLIBC_xxx的源码包编译升级的惨案:

  • 提醒:在其他博客教程上,有些网友(我也不另外,后面可拯救回来)就按照教程并使用GLIBC_xxx的源码包并去升级,结果往往是系统崩溃而告终。

  • glibc库对linux系统非常重要,轻易不要更换。如果需要更换,需提前备份好原本的相关库以防万一。

  • 若在使用源码包去升级之后出现segmentation fault,命令无法使用的情况。

  • 解决方法:
    若安装失败,可能导致各指令出错,除了cd、pwd基本都不可使用,这时候千万不要关闭窗口(如果关闭将导致将无法打开,只能重装系统),比如安装libc-2.28.so出错了,需拯救系统。可尝试输入其中一条

export LD_PRELOAD=/lib64/librt-2.XX.so
export LD_PRELOAD=/lib64/libm-2.XX.so
export LD_PRELOAD=/lib64/libpthread-2.XX.so
export LD_PRELOAD=/lib64/libc-2.XX.so
export LD_PRELOAD=/lib/x86_64-linux-gnu/libc-2.XX.so

(XX指原本的版本,看文件夹有哪个就试一下),然后ls这些指令就可以用了,再使用ln -s把以前的库链接回来。

cd /lib/x86_64-linux-gnu
ll     # 文件详细信息

ln -sf libc-2.27.so libc.so.6   # libc-2.27.so是原有版本
rm  libc-2.28.so     #删除

软件包升级GLIBC_2.28

1 查看服务器当前版本,命令如下:

strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_

返回的结果如下:

GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18
GLIBC_2.22
GLIBC_2.23
GLIBC_2.24
GLIBC_2.25
GLIBC_2.26
GLIBC_2.27
GLIBC_PRIVATE

说明服务器当前是没有GLIBC_2.28

2 使用软件包升级方式

  • 参考debian网址并搜索想要的软件或者工具等,如libc6,有结果如下:

    具体就不介绍了,请浏览官网了解。

  • 添加软件源,/etc/apt/sources.list文件中像下面这样添加一行:

deb http://security.debian.org/debian-security buster/updates main 
  • 系统可用的软件包更新,刷新软件包的缓存
sudo apt update  # 更新软件源
  • apt-get update之后若出现下面提示:
    由于没有公钥,无法验证下列签名: NO_PUBKEY 112695A0E562B32A NO_PUBKEY 54404762BBB6E853
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 112695A0E562B32A 54404762BBB6E853
  • 其中后面的112695A0E562B32A 54404762BBB6E853就是上面提到的NO_PUBKEY 112695A0E562B32A NO_PUBKEY 54404762BBB6E853中的公钥,替换成对应的即可。然后重新apt-get update即可。

  • 查看软件包可更新列表

sudo apt list --upgradable   

如下图所示:

  • 安装libc6
sudo apt install libc6-dev  /sudo apt install libc6

3 查看服务器当前版本:

strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_

返回的结果如下:

GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18
GLIBC_2.22
GLIBC_2.23
GLIBC_2.24
GLIBC_2.25
GLIBC_2.26
GLIBC_2.27
GLIBC_2.28     # 多出该版本,说明安装成功,系统也能正常使用。
GLIBC_PRIVATE

如下图所示:

以上是关于请谨慎操作Ubuntu18.04升级GLIBC_2.29,解决ImportError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29‘的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu18.04手动安装二进制MySQL8.0

ubuntu18.04升级kennel 5.10失败记录 #yyds干货盘点#

ubuntu18.04升级kennel 5.10失败记录 #yyds干货盘点#

如何在线将Ubuntu 18.04升级到Ubuntu 20.04

Ubuntu18.04 升级python3后 安装pip3 后报错

Ubuntu 18.04:无法使用单个命令提取下载的 tar.xz 文件