如何在Centos7 安装 Node 18 以上的版本

729 阅读2分钟
  1. 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

这时候会因为网络不通,造成下载失败

解决办法

vim /etc/hosts

添加以下内容
185.199.110.133 raw.githubusercontent.com

这时候就能成功下载了

  1. 安装 node 20.8
NVM_NODEJS_ORG_MIRROR=http://nodejs.org/dist nvm install 20.8

这时候用node -v 会报错

node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.28' 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.20' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)

这时候就需要升级 glibc 版本了

  1. 下载 glibc
wget http://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
  1. 解压 glibc
tar -xzvf glibc-2.28.tar.gz
  1. 安装 glibc
cd glibc-2.28/ && mkdir build  && cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make && make install

这时候 make install 会报错,需要升级 gcc

  1. 升级 gcc
yum install -y centos-release-scl
yum install -y devtoolset-8-gcc*

这时候又会报错

Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64

这是因为 centos 官方的源不维护了,这里我们换成阿里的源

  1. 更换源
cp -r /etc/yum.repos.d /etc/yum.repos.d.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 将 CentOS-SCLo-scl.repo 中的 baseUrl 替换为 https://mirrors.aliyun.com/centos/7/sclo/x86_64/sclo/
# 将 CentOS-SCLo-scl-rh.repo 中的 baseUrl 替换为 https://mirrors.aliyun.com/centos/7/sclo/x86_64/

yum celan all
yum makecache
  1. 接着升级 gcc 就不会报错了
yum install -y devtoolset-8-gcc*
# 设置软链接
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc
mv /usr/bin/g++ /usr/bin/g++-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++
  1. 升级 make
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
  1. 这时所有的问题都解决了之后,就可以装 glibc2.28 了
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
make && make install

最后有个错误可以忽略

You should restart this script from your build directory after you've
fixed all problems!
Btw. the script doesn't work if you're installing GNU libc not as your
primary library!
make[1]: *** [Makefile:111: install] Error 1
make[1]: Leaving directory '/opt/module/mysql-lib/glibc-2.28'
make: *** [Makefile:12: install] Error 2
ls -l /lib64/libc.so.6
# 查询是否有了2.28
strings /lib64/libc.so.6 | grep GLIBC
  1. 这时候用 node -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)

# 更新 lib libstdc++.so.6.0.26

wget http://cdn.frostbelt.cn/software/libstdc%2B%2B.so.6.0.26
# 替换系统中的 libstdc++.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

# 这时候再 node -v 就什么问题都没有了了