Centos 7 安装 Node.js 20
操作系统版本过低,该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-rh和centos-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
