centos7安装node11一次艰难的升级之旅

起因在jenkins中设置了node21,随后jenkins开始自动下载nodejs,但正当使用时发现nodejs报错了,如下所示:21:47:24node:/lib64/libm.so.6:vers

by
江江
on
2025/09/17
centos7安装node11一次艰难的升级之旅
运维

起因

在jenkins中设置了node21,随后jenkins开始自动下载nodejs,但正当使用时发现nodejs报错了,如下所示:
21:47:24 node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
21:47:24 node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
21:47:24 node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
21:47:24 node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)
21:47:24 node: /lib64/libc.so.6: version `GLIBC_2.27' not found (required by node)
21:47:24 node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node)
21:47:24 node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by node)
21:47:24 node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
21:47:24 node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
21:47:24 node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
21:47:24 node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)
21:47:24 node: /lib64/libc.so.6: version `GLIBC_2.27' not found (required by node)

异常解决

根据错误提示内容,需要安装GLIBC_2.28以上版本,查阅文章内容得知,需要先升级gcc

1.升级GCC

升级前需要安装scl源
yum install -y centos-release-scl bison
然后开始升级gcc
yum install -y devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils
安装后需要配置环境变量
echo "source /opt/rh/devtoolset-11/enable" >> /etc/profile
source /etc/profile
 

2.升级cmake

gun官方仓库下载慢,可使用阿里云地址 https://mirrors.aliyun.com/gnu/

make -v
cd ~
wget https://mirrors.aliyun.com/gnu/make/make-4.3.tar.gz
tar -xzvf make-4.3.tar.gz && cd make-4.3/
./configure  --prefix=/usr/local/make
make && make install
cd /usr/bin/ && mv make make.bak
ln -sv /usr/local/make/bin/make /usr/bin/make
make -v

3.升级mpc

wget https://mirrors.aliyun.com/gnu/mpc/mpc-1.3.1.tar.gz
tar -zxvf mpc-1.3.1.tar.gz
cd mpc-1.3.1
./configure --prefix=/usr
make -j4
sudo make install

4.升级mpfr

wget https://mirrors.aliyun.com/gnu/mpfr/mpfr-4.2.0.tar.gz
tar -zxvf mpfr-4.2.0.tar.gz
cd mpfr-4.2.0
./configure --prefix=/usr
make -j4
sudo make install
sudo ln -s /mpfr-4.2.0/src/.libs/libmpfr.so.6 /usr/lib64/libmpfr.so.6

5.升级gmp

wget https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz
tar -Jxvf gmp-6.2.1.tar.xz
cd gmp-6.2.1
./configure --prefix=/usr
make -j4
sudo make install

6.升级libffi

wget https://mirrors.aliyun.com/centos-vault/7.6.1810/os/x86_64/Packages/libffi-3.0.13-18.el7.x86_64.rpm
rpm -ivh libffi-3.0.13-18.el7.x86_64.rpm
wget https://mirrors.aliyun.com/centos-vault/7.8.2003/os/x86_64/Packages/libffi-devel-3.0.13-19.el7.x86_64.rpm
rpm -ivh libffi-devel-3.0.13-19.el7.x86_64.rpm

7.升级到python3

wget https://mirrors.aliyun.com/python-release/source/Python-3.8.0.tgz
tar -zxf Python-3.8.0.tgz
cd Python-3.8.0
mkdir build
cd build
../configure --enable-optimizations
make -j4
make install
/usr/bin/python -v
ll /usr/bin/python*
mv /usr/bin/python /usr/bin/python2.7
ln -s /root/Python-3.8.0/build/python /usr/bin/python
python -v

参考文章:
升级到Python-3.8.0

8.升级glibc

wget https://mirrors.aliyun.com/gnu/glibc/glibc-2.34.tar.gz
tar -xf glibc-2.34.tar.gz
cd glibc-2.34
mkdir build
cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin --disable-sanity-checks --disable-werror --enable-obsolete-nsl
make -j4
make install

参考文章:
Centos7 升级 Glibc-2.28
CentOS 7.9 升级 GLibc 2.34

9.升级libstdc++.so.6

wget https://cdn.frostbelt.cn/software/libstdc%2B%2B.so.6.0.26
cp libstdc++.so.6.0.26 /usr/lib64/
cd /usr/lib64/
ln -snf ./libstdc++.so.6.0.26 libstdc++.so.6

参考文章:
CentOS7升级glibc至2.28
验证

strings /lib64/libc.so.6 | grep ^GLIBC
find / -name "libstdc++.so*" 
strings /usr/lib64/libstdc++.so.6 | grep CXXABI 
strings /lib64/libstdc++.so.6 | grep GLIBCXX

可能会遇到下面问题

gcc: relocation error: /lib64/libc.so.6: symbol __tunable_get_val, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference

查看/lib64目录下的libc-2.17.so,此时可能ls已经无法使用
sln /lib64/libc[按下Tab键]
系统会提示补全文件名
libc-2.**.so
完成替换
LD_PRELOAD=/lib64/libc-2.28.so sln /root/glibc-2.34/build/libc.so.6                 /lib64/libc.so.6
LD_PRELOAD=/lib64/libc-2.28.so sln /root/glibc-2.34/build/dlfcn/libdl.so.2          /lib64/libdl.so.2
LD_PRELOAD=/lib64/libc-2.28.so sln /root/glibc-2.34/build/nptl/libpthread.so.0      /lib64/libpthread.so.0
LD_PRELOAD=/lib64/libc-2.28.so sln /root/glibc-2.34/build/elf/ld-linux-x86-64.so.2  /usr/lib64/ld-linux-x86-64.so.2

/usr/bin/ld: cannot find -lnss_test2

修改源码glibc-2.34/scripts/test-installation.pl找到下面代码位置,增加nss_test2等代码
#add $name ne “nss_test2”
vim glibc-2.34/scripts/test-installation.pl

next if ($build_mathvec == 0 && $name eq "mvec");
    if ($name ne "nss_ldap" && $name ne "db1"
        && $name ne "thread_db"
        && $name ne "nss_test1" && $name ne "nss_test2" && $name ne "libgcc_s") {
 
江江江江于 2026-10-15 08:53:32 修改阅读 467评论 2点赞 1