centos7.5安装Node.js 20.5.1后报段错误
缘起
开发要求安装Node.js 20.5.1以解决dependencyCheck扫描出来的各种安全问题。
安装过程
1、 下载安装Node.js 20.5.1
wget https://nodejs.org/download/release/v20.5.1/node-v20.5.1-linux-x64.tar.gztar -xzf node-v20.5.1-linux-x64.tar.gzchmod -R jenkins:jenkins node-v20.5.1-linux-x64export PATH=/opt/node-v20.5.1-linux-x64/bin:$PATH
2、 执行node --version查看版本,报错如下:
/lib64/libm.so.6: version GLIBC_2.27' not found (required by node) node: /lib64/libstdc++.so.6: version
GLIBCXX_3.4.20’ not found (required by node)
node: /lib64/libstdc++.so.6: version CXXABI_1.3.9' not found (required by node) node: /lib64/libstdc++.so.6: version
GLIBCXX_3.4.21’ not found (required by node)
node: /lib64/libc.so.6: version GLIBC_2.28' not found (required by node) node: /lib64/libc.so.6: version
GLIBC_2.25’ not found (required by node)
node: /lib64/libm.so.6: version GLIBC_2.27' not found (required by node) node: /lib64/libstdc++.so.6: version
GLIBCXX_3.4.20’ not found (required by node)
node: /lib64/libstdc++.so.6: version CXXABI_1.3.9' not found (required by node) node: /lib64/libstdc++.so.6: version
GLIBCXX_3.4.21’ not found (required by node)
node: /lib64/libc.so.6: version GLIBC_2.28' not found (required by node) node: /lib64/libc.so.6: version
GLIBC_2.25’ not found (required by node)
node: /lib64/libm.so.6: version GLIBC_2.27' not found (required by node) node: /lib64/libstdc++.so.6: version
GLIBCXX_3.4.20’ not found (required by node)
node: /lib64/libstdc++.so.6: version CXXABI_1.3.9' not found (required by node) node: /lib64/libstdc++.so.6: version
GLIBCXX_3.4.21’ not found (required by node)
node: /lib64/libc.so.6: version GLIBC_2.28' not found (required by node) node: /lib64/libc.so.6: version
GLIBC_2.25’ not found (required by node)
查询资料,出现这些错误的原因是你的系统上缺少 Node.js 20.5.3 版本所需的依赖库版本。特别是 GLIBC 和 libstdc++ 版本太低。这通常发生在较旧版本的 Linux 系统上,例如 CentOS 7 或 RHEL 7。
方法一:升级操作系统
考虑升级你的操作系统到一个较新的版本,如 CentOS 8 或 RHEL 8,这些版本自带较新的库。
方法二:安装所需的库
如果你无法升级操作系统,可以尝试手动安装所需的库版本。请注意,这可能比较复杂,并且可能需要构建这些库。
3、按照方案二进行
更新 GLIBC
下载 GLIBC 源代码:
wget http://ftp.gnu.org/gnu/libc/glibc-2.28.tar.gz
解压和编译 GLIBC:
tar -xzf glibc-2.28.tar.gz
cd glibc-2.28
mkdir build
cd build
../configure --prefix=/opt/glibc-2.28 --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin --disable-werror
make -j4
sudo make install
但是执行…/configure --prefix=/opt/glibc-2.28的时候,会由于centos7.5自带的gcc4.7.5版本低,而报错。 需要升级gcc。
安装devtoolset-9
sudo yum install centos-release-scl
sudo yum install devtoolset-9
启用devtoolset-9
scl enable devtoolset-9 bash
再次执行:
../configure --prefix=/opt/glibc-2.28 --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin --disable-werrormake -j4
sudo make install
4. 将编译后的/opt/glibc-2.28导入系统配置
export LD_LIBRARY_PATH=/opt/glibc-2.28/lib:$LD_LIBRARY_PATH
如果你只是在当前shell终端导入这个环境变量,你只是崩溃了当前终端;
如果你将这个语句写入/etc/profile,你将突然面临一次系统崩溃;
导入这个环境变量后,你成功的把系统弄崩溃了!!!! 你执行命令会看到:段错误(吐核).
除了pwd以外,其他命令都不再好用!
如果你没有开多个终端,而你又修改了/etc/profile,你此时可能是慌张的,崩溃的!
但是天无绝人之路,你还可以sfp到系统,还可以将/etc/profile下载下来再修改,然后再回传覆盖。
你是多么机智!
回过神来,你去检查资料,发现:
这个问题可能是由于在执行ls 命令时,系统尝试加载了新编译的 glibc 库,但是该库与系统原有的库存在兼容性问题,导致发生了段错误。
网上没人告诉你,他们说的centos7安装Node.js 20.xx.xx版本,他们系统可能是7.9的,而不是7.5.
5. CentOS 7.5无法直接安装Node.js 20.5.1版本
主要原因是Node.js 20及更高版本需要glibc 2.28或更高版本,而CentOS 7.5默认安装的是glibc 2.17版本。
由于这是个生产系统,jenkins还在时时刻刻被公司成员运行着,只能回头找个虚拟系统再试试了。
对于开发的需求,沟通后发现,只需要npm 8 以上就可以满足需求,安装了node 16.20.2后,需求即可满足。
记之。