Centos 7 安装 Node.js 20

2026-01-04 Views1519字8 min read

操作系统版本过低,该Node版本不兼容此操作系统

由于 Centos 停止维护,而一些 Node 项目需要使用 Node.js 20或更高版本,本文详细介绍如何在 Centos7 下手动安装Node.js 20,强制兼容低版本系统

初步安装 node

1.下载 node.js 的 Linux 版本

cd ~
curl -O https://nodejs.org/dist/v20.11.1/node-v20.11.1-linux-x64.tar.xz

2.解压缩

tar -xf node-v20.11.1-linux-x64.tar.xz
mv node-v20.11.1-linux-x64 ~/nodejs

3.在命令行中生效
只在当前终端生效

export PATH=~/nodejs/bin:$PATH

永久生效

echo 'export PATH=~/nodejs/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

4.检查是否生效

node -v
npm -v

不出意外的话,这一步会报一个类似的错:

​ 原因是因为 node18 开始,都需要 2.27以上的版本支持,但是 centos7.6 老系统默认没有那么高的版本,因此接下来我们去安装glibc_2.28

安装 glib.c 2.28

wget http://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
tar xf glibc-2.28.tar.gz 
cd glibc-2.28/ && mkdir build  && cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

这一步会报一个错:

configure: error:
*** These critical programs are missing or too old: make bison compiler
*** Check the INSTALL file for required versions.

就是提示我们的工具集太老了,经过测试,我们需要把服务器上的 gcc 升级到 8,然后 make 要升级到 4

安装GCC8

首先安装RedHat的软件集合(SCLs)

yum install centos-release-scl -y

如果安装了GCC4.8就先卸载掉吧,防止冲突(会同步移除g++):

yum remove gcc -y

接下来就是安装GCC8以及对应的C++编译器:

yum install devtoolset-8 -y

这一步会报一个错:

找不到 gcc 源的解决方案

运行

yum repolist | grep -E "centos-sclo-scl|centos-sclo-rh"

检查是不是有centos-sclo-rhcentos-sclo-scl
如果没有上面这两个,运行一下

yum install centos-release-scl*

会生成默认的两个文件,在/etc/yum.repos.d/文件夹下可以找到这两个文件

如何仍然找不到文件,可以自行创建对应缺失文件(⚠️注意大小写,建议直接复制)

CentOS-SCLo-scl.repo

# CentOS-SCLo-sclo.repo
#
# Please see http://wiki.centos.org/SpecialInterestGroup/SCLo for more
# information

[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=http://mirror.centos.org/centos/7/sclo/$basearch/sclo/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-sclo-testing]
name=CentOS-7 - SCLo sclo Testing
baseurl=http://buildlogs.centos.org/centos/7/sclo/$basearch/sclo/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-sclo-source]
name=CentOS-7 - SCLo sclo Sources
baseurl=http://vault.centos.org/centos/7/sclo/Source/sclo/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-sclo-debuginfo]
name=CentOS-7 - SCLo sclo Debuginfo
baseurl=http://debuginfo.centos.org/centos/7/sclo/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

CentOS-SCLo-scl-rh.repo

# CentOS-SCLo-rh.repo
#
# Please see http://wiki.centos.org/SpecialInterestGroup/SCLo for more
# information

[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=http://mirror.centos.org/centos/7/sclo/$basearch/rh/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-testing]
name=CentOS-7 - SCLo rh Testing
baseurl=http://buildlogs.centos.org/centos/7/sclo/$basearch/rh/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-source]
name=CentOS-7 - SCLo rh Sources
baseurl=http://vault.centos.org/centos/7/sclo/Source/rh/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-debuginfo]
name=CentOS-7 - SCLo rh Debuginfo
baseurl=http://debuginfo.centos.org/centos/7/sclo/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

解决方法
修改CentOS-SCLo-scl.repo

vi /etc/yum.repos.d/CentOS-SCLo-scl.repo

修改此部分的baseurl

[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/sclo/
# mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-sclo
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

修改CentOS-SCLo-scl-rh.repo

vi /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo

修改此部分的baseurl

[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
# mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-rh
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

刷新缓存

yum repolist
yum clean all
yum makecache

如仍然报错No package devtoolset-8-gcc* available
运行yum clean all,然后运行yum makecache

临时生效,执行:

scl enable devtoolset-8 bash

会新创建一个bash会话,键入exit即可退出。

如果想要永久生效,可以执行:

echo 'source scl_source enable devtoolset-8' >> ~/.bashrc

添加环境变量到当前用户的bash配置里,也就是.bashrc文件。仅对当前登陆的用户生效。

卸载的话需要手动编辑.bashrc文件,删除

source scl_source enable devtoolset-8

这行就行

执行:

source ~/.bash_profile

可以刷新当前登陆用户的环境变量,然后控制台输入:

gcc -v

安装 make 4

wget http://ftp.gnu.org/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

这时,所有的问题都已经解决完毕,再重新执行上一步更新glibc即可

cd /root/glibc-2.28/build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

## 安装 bison
yum install -y bison

## 安装软件(过程较长,耐心等待)
make && make install

验证一下

npm -v

如果还是出现下面的问题,要连接新的动态库

node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' 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 `GLIBCXX_3.4.21' not found (required by node)

用下面命令查看

strings /usr/lib64/libstdc++.so.6 | grep CXXABI

更新libstdc++.so.6.0.26

# 更新lib libstdc++.so.6.0.26
wget https://cdn.frostbelt.cn/software/libstdc%2B%2B.so.6.0.26
 
# 替换系统中的/usr/lib64
cp libstdc++.so.6.0.26 /usr/lib64/
cd /usr/lib64/
ln -snf ./libstdc++.so.6.0.26 libstdc++.so.6

验证

npm -v

主要参考

EOF