先看一个错误:
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/service/webapps/urls.py", line 13, in <module>
from webapps.utils.auth import BlacklistUsersAuthFrom
File "/service/webapps/utils/auth.py", line 11, in <module>
from mozilla_django_oidc.auth import OIDCAuthenticationBackend
File "/service/webapps/py38env/lib/python3.8/site-packages/mozilla_django_oidc/auth.py", line 16, in <module>
from josepy.b64 import b64decode
File "/service/webapps/py38env/lib/python3.8/site-packages/josepy/__init__.py", line 40, in <module>
from josepy.json_util import (
File "/service/webapps/py38env/lib/python3.8/site-packages/josepy/json_util.py", line 14, in <module>
from OpenSSL import crypto
File "/service/webapps/py38env/lib/python3.8/site-packages/OpenSSL/__init__.py", line 8, in <module>
from OpenSSL import crypto, SSL
File "/service/webapps/py38env/lib/python3.8/site-packages/OpenSSL/crypto.py", line 8, in <module>
from cryptography import utils, x509
File "/service/webapps/py38env/lib/python3.8/site-packages/cryptography/x509/__init__.py", line 6, in <module>
from cryptography.x509 import certificate_transparency
File "/service/webapps/py38env/lib/python3.8/site-packages/cryptography/x509/certificate_transparency.py", line 10, in <module>
from cryptography.hazmat.bindings._rust import x509 as rust_x509
ImportError: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by /service/webapps/py38env/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust.abi3.so)
原因就是,libc.so.6里面缺乏 GLIBC_2.18造成的。
[root@59610a7283d8 lib64]# strings 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_PRIVATE
再看一眼,当下是个啥版本。
[root@59610a7283d8 lib64]# ll | grep "libc.so.6"
lrwxrwxrwx 1 root root 12 Mar 25 2019 libc.so.6 -> libc-2.17.so
所以,就等于说,要安装更高版本的libc库,从当前错误看至少得是 libc-2.18版本。
现在总结下安装命令:
这里注意,我在第一次搞定后,总结了如下命令,但是后面删除了容器,所以搞的这些东西都没了,在第二次再搞的时候,按照如下命令,却无法成功更新libc.so.6 ,然后总结了下原因,就是以下命令,不是在哪执行都可以的,最好先在根目录下创建一个自己的文件夹,然后再执行下面的命令就可以了。
cd /
mkdir my_package
cd my_package # 完成这几步后,再执行下面的命令就可以了
# 下载包
wget http://mirror.bjtu.edu.cn/gnu/libc/glibc-2.18.tar.xz
or
wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.xz
# 解压
tar -xvf glibc-2.18.tar.xz
# 进入包
cd glibc-2.18
# 制作构建目录
mkdir build
cd build
# 配置,这一步很重要,这关系到后面 libc.so.6 的软连接能不能自动更新,网上好多关于这步的命令都是错的
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
# 编译
make
make install
# 完成,接下来,看看结果
cd /lib64/
ll | grep "libc."
[root@51225b1a8232 webapps]# ll /lib64/ | grep "libc." -rwxr-xr-x 1 root root 2156592 Oct 13 2021 libc-2.17.so -rwxr-xr-x 1 root root 10228968 Aug 10 06:33 libc-2.18.so -rw-r--r-- 1 root root 22237936 Aug 10 06:33 libc.a -rw-r--r-- 1 root root 253 Aug 10 06:33 libc.so lrwxrwxrwx 1 root root 12 Aug 10 06:33 libc.so.6 -> libc-2.18.so
这下就变过来了。
千万注意,没事别对原先的 libc.so.6 这个软连接直接采用 mv xx xx.bac 的方法处理。这样会把系统给搞坏的。网上的好多操作都是直接这么干,这就是坑。
再强调一遍,变更 libc.so.6 的软连接的关键是在安装 libc-2.18 时的 ..configure 这个命令,务必按照上述命令执行。