环境
- 系统版本:CentOS Linux release 7.9.2009 (Core)
nvm安装记录
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
// 或者
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
安装之后会自动注入到shell配置文件中,例如上面是注入到bash的.bashrc中
之后我们执行命令来让nvm命令生效
source ~/.bashrc
如果是zsh的话就需要
source ~/.zshrc
安装指定版本node
nvm install 20.18.0
问题
安装高版本node后报错
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)
nvm current
none
原因
从node18开始都需要GLIBC_2.27支持,可是目前系统内却没有那么高的版本
查看GLIBC版本
strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
...
GLIBC_2.17
....
我们需要根据所需更新### glibc
解决问题
下载glibc-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和make版本过低,我们需要升级gcc和make版本
# 升级GCC(默认为4 升级为8)</span>
yum install -y centos-release-scl
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++
# 升级 make(默认为3 升级为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
在安装devtoolset-8-gcc*(gcc包)的时候可能会报错
Could not retrieve mirrorlist http://mirrorlist.centos.org?arch=x86_64&release=7&repo=sclo-rh error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"
原因是在 2024年6月30日时,变更了repo 的域名,导致了原来的 repo 都不能够使用了 我在一篇文章中找到了解决方法,来记录一下,具体就是更新一下yum的repo的域名:
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-SCLo*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-SCLo*
sed -i 's|# baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-SCLo*
yum clean all && yum makecache
另外如果没有安装g++ 我们还要自己手动安装一下
yum install -y g++
执行make的时候还有可能报错
configure: error:
*** These critical programs are missing or too old: bison
*** Check the INSTALL file for required versions.
这是提示我们的bison版本太老或者未安装,我这里是未安装我直接安装一下
yum install -y bison
这回我们安心执行make
cd /root/glibc-2.28/build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make && make install
时间应该比较久,执行完成之后我们查看node版本可能还会报错
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
执行wget https://cdn.frostbelt.cn/software/libstdc%2B%2B.so.6.0.26这一步可能会报错:
ERROR: cannot verify cdn.frostbelt.cn's certificate, issued by '/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=Encryption Everywhere DV TLS CA - G2':
Issued certificate has expired.
To connect to cdn.frostbelt.cn insecurely, use `--no-check-certificate'.
我们根据提示在后面添加--no-check-certificate
wget https://cdn.frostbelt.cn/software/libstdc%2B%2B.so.6.0.26 --no-check-certificate
然后顺序执行后面的操作,即可解决node安装问题
感谢
感谢大佬的文章解惑