centos7.9安装node20的三两事
前言
博主因为博客的升级,需要在服务器上安装node v20+
,然而因为之前部署的各类服务,又不能更换服务器系统。所以只能在原系统centos7.9
上进行升级。
然而当我通过安装nvm
安装了node v20.8.1
之后才发现无法运行。原因是因为centos7.9自带的glibc
版本太低。而node v18+
至少需要glibc 2.8
才可以
于是乎只能进行升级了,然而这次升级可真是一点都不顺啊。跌宕起伏。起起落落。
升级glibc
//查看 glibc 版本
strings /lib64/libc.so.6 | grep -E "^GLIBC" | sort -V -r | uniq
//下载glibc源码
wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
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
走到这一步发现走不下去了。
提示如下**** These critical programs are missing or too old: make compiler
意思就是make
和gcc
版本太低了
那就跟着提示升级一下
升级make
说实话make
版本升级还是比较简单的,不过要注意一下后续编译 makeglibc
的时候,make 版本v>=4.4
是会卡住执行的。所以一定要安装4.4 之下的,比如我安装的就是 4.3 的
>(ps:别问我怎么知道的,有没有可能就是因为我安装了 4.4 才知道的呢。它真的 我哭死)
//查看当前的make版本
make --version
//去make官网查看版本
make官网:http://ftp.gnu.org/pub/gnu/make/
//下载 make 源码
wget http://ftp.gnu.org/pub/gnu/make/make-4.3.tar.gz
tar -xzvf make-4.4.tar.gz
cd make-4.4/
//编译
mkdir build && cd build
../configure --prefix=/usr/
make && make install
//再次查看make版本
make --version
好,既然安装好了make就来安装gcc,说实话这是个折磨人的东西
安装gcc
做好心理准备 这是耗时非常长的项目 >(ps:以小时为单位)
//下载 gcc 8.2 的源码
wget http://ftp.gnu.org/gnu/gcc/gcc-8.2.0/gcc-8.2.0.tar.gz
tar -xzvf gcc-8.2.0.tar.gz
cd gcc-8.2.0
./contrib/download_prerequisites //不管怎么这行都要执行 下载了 也要执行检查
//编译
mkdir build && cd build
../configure --prefix=/usr --enable-multilib
make //就是这一步 让我的2h2g 的服务器跑了四五个小时
make install
//重启查看版本 (ps:一定要重启)
reboot
gcc -v
继续升级glibc
//可以不需要再次编译 直接make
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make && make install
查询是否升级成功
strings /lib64/libc.so.6 | grep GLIBC
查看node
node -v
node连接代理安装pnpm
、pm2
npm config set proxy http://127.0.0.1:7890
npm install -g pnpm
npm install -g pm2
//查看版本
npm -v
pnpm -v
pm2 -v
最终遇到的问题
我主要是通过github
的action
来构建产物并把产物发送到server
并执行运行文件。但是action提示我说command not found: npm
or command not found: pm2
然后我在终端执行的是
npm -v
10.1.0
pnpm -v
9.14.4
pm2 -v
5.4.3
证明是没错的。然后我仔细回想了下。
我才想起来我的终端用的是 zsh
,而 action 走的是 bash
,所以bash
中是没有全局变量的
把.zshrc
里面的变量复制到.bashrc
就可以了
cat ~/.zshrc
找到这一段
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
写入bash
vim ~/.bashrc