随着越来越多的工具不再支持 Nodejs 16, 是时候将服务器的 Nodejs 版本升级到18了, 服务器本来就安装了nvm
, 所以升级也很简单, 直接
nvm install v18.18.2
nvm use 18
2
就行了, 可是已运行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)
2
3
4
5
6
根据Nodejs官方的通知, Nodejs 18 至少需要glibc v2.28
, 换其他系统似乎太麻烦了, 一大堆软件需要重新安装, 想想都怕, 所以还是考虑升级glibc
准备工作
升级 GCC
yum install -y centos-release-scl
yum install -y devtoolset-8-gcc*
scl enable devtoolset-8 bash
gcc --version
# 也可以加上软连接, 省事
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++
gcc --version
2
3
4
5
6
7
8
9
10
升级 make 到 4.3 版本
# 下载
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
2
3
4
5
6
7
8
9
10
11
安装 bison
yum install bison
编译安装 glibc-2.28
cd ~
mkdir update-nodejs18
cd update-nodejs18/
# 下载包
wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz --no-check-certificate
# 解压缩
tar -xzvf 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 j4
make install
2
3
4
5
6
7
8
9
10
11
12
13
如果编译时报undefined reference to '_nsl_default_nss@GLIBC_PRIVATE'
错误,
可以在../configure
命令最后没添加 --enable-obsolete-nsl
(注意空格)
如果编译时报nss_test2
错误, 可以修改scripts/test-installation.pl
文件的第 128 行处,增加一行 && $name ne "nss_test2"
126 if ($name ne "nss_ldap" && $name ne "db1"
127 && $name ne "thread_db"
128 && $name ne "nss_test2"
129 && $name ne "nss_test1" && $name ne "libgcc_s") {
130 $link_libs .= " -l$name";
131 $versions{$name} = $version;
132 }
2
3
4
5
6
7
查看glibc支持的版本, 如果包含GLIBC_2.28
, 则安装成功
strings /lib64/libc.so.6 | grep GLIBC
测试下 Nodejs 是否正常了
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)
2
3
则需继续往下看, 还得升级下libstdc++.so.6
文件
cd /use/lib64
# 下载文件
wget https://cdn.frostbelt.cn/software/libstdc%2B%2B.so.6.0.26
# 建立软连接
ln -snf ./libstdc++.so.6.0.26 libstdc++.so.6
2
3
4
5
再次运行node -v
, 发现nodejs
版本出来了, 说明大功告成
通过二进制包安装 NodeJS 18
如果没有使用nvm
, 也可以直接通过下载nodejs
包来安装
打开 https://registry.npmmirror.com/binary.html?path=node/
选择自己想要的版本, 进入对应目录, 复制node-v**.**.**-linux-x64.tar.gz
的下载链接
cd ~
wget https://registry.npmmirror.com/-/binary/node/v18.18.2/node-v18.18.2-linux-x64.tar.gz
tar -xzvf node-v**.**.**-linux-x64.tar.gz
mv node-v**.**.**-linux-x64 node
2
3
4
对node
, npm
, npx
建立软链接
sudo ln -s /root/node/bin/node /usr/bin/node
sudo ln -s /root/node/bin/node /usr/local/bin/node
sudo ln -s /root/node/bin/npm /usr/bin/npm
sudo ln -s /root/node/bin/npm /usr/local/bin/npm
sudo ln -s /root/node/bin/npx /usr/bin/npx
sudo ln -s /root/node/bin/npx /usr/local/bin/npx
2
3
4
5
6
测试版本是否正常
node -v // v18.18.2
npm -v // 9.8.1
npx -v // 9.8.1
2
3
第二种方法?
如果实在怕出现问题, 不敢更新glibc
, 那么可以尝试使用nodejs
的非官方构建版本
打开 https://registry.npmmirror.com/binary.html?path=node-unofficial-builds/ , 选择一个版本, 然后按上面通过二进制包安装 NodeJS 18
的步骤安装即可