Node.js 安装笔记

本文记录了第一次安装 Node.js 的详细过程,以及遇到的一些问题。

系统环境

  • 操作系统:CentOS 7.4 64位
  • CPU:1核
  • 内存:2GB
  • 服务商:腾讯云

安装过程

  1. 下载 Node.js 源码。打开 https://nodejs.org/en/download/ (稳定版)或 https://nodejs.org/en/download/current/ (最新版),拉到下方选择“All download options”,选择目标版本和适合当前平台的安装文件,这里我们选择安装最新版本 9.10.0:

    1
    2
    cd /usr/local/src/
    wget -c https://nodejs.org/dist/v9.10.0/node-v9.10.0.tar.gz
  2. 解压 Node.js 源码:

    1
    tar -zxvf node-v9.10.0.tar.gz
  3. 编译安装:

    1
    2
    3
    4
    cd -v9.10.0
    ./configure --prefix=/usr/local/node/9.10.0
    make
    make install

    执行 ./configure 可能出现以下错误:

    1
    Node.js configure error: No acceptable C compiler found!

    这里需要下载 gcc-c++:

    1
    yum install gcc-c++

    然后再执行 ./configure ,就会收到以下警告…

    1
    WARNING: C++ compiler too old, need g++ 4.9.4 or clang++ 3.4.2 (CXX=g++)

    emmm… 好吧,yum 是不行了,那就手动安装吧,参考下方『手动安装 gcc』。

  4. 配置 NODE_HOME,进入 profile 编辑环境变量:

    1
    vim /etc/profile

    设置 Node.js 环境变量,在 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 一行的上面添加如下内容:

    1
    2
    3
    # set for nodejs
    export NODE_HOME=/usr/local/node/9.10.0
    export PATH=$NODE_HOME/bin:$PATH

    :wq 保存并退出,编译 /etc/profile 使配置生效:

    1
    source /etc/profile
  5. 验证是否安装配置成功,输出版本号表示配置成功:

    1
    2
    3
    4
    node -v

    # output
    v9.10.0

    🍻至此 Node.js 安装完成~

  6. npm 模块安装路径:

    1
    /usr/local/node/9.10.0/lib/node_modules

手动安装 gcc

  1. 获取安装文件。打开 https://ftp.gnu.org/gnu/gcc/ 选择一个版本,这里我们选择最新版本 7.3.0:

    1
    2
    3
    cd /usr/local/src
    wget -c https://ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz
    tar -zxvf gcc-7.3.0.tar.gz
  2. 下载依赖项:

    1
    2
    cd gcc-7.3.0
    ./contrib/download_prerequisites

    这里可能会卡一下,稍等片刻。

  3. 生成编译文件:

    1
    2
    3
    mkdir gcc-build-7.3.0
    cd gcc-build-7.3.0
    ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
  4. 执行编译,生成 Makefile 文件。

    1
    make

    这个过程炒鸡久,我这花了大概一个小时,你可以去放松下吃两把鸡再回来 orz…

  5. 终于可以安装了…

    1
    sudo make install
  6. 重启服务器后,验证版本:

    1
    gcc -v

    我这里是:

    1
    2
    3
    4
    5
    6
    7
    使用内建 specs。
    COLLECT_GCC=gcc
    COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/7.3.0/lto-wrapper
    目标:x86_64-pc-linux-gnu
    配置为:../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
    线程模型:posix
    gcc 版本 7.3.0 (GCC)

    完了吗?

    emmm… 不会有无缘无故的问句的对吧… 实际上,升级 gcc 生成的动态库并没有替换老版本的动态库,我们去手动替换一下。

  7. 查找编译 gcc 时生成的最新动态库:

    1
    find / -name "libstdc++.so*"
  8. 将找到的动态库 libstdc++.so.6.0.24 复制到 /usr/lib64 :

    1
    cp /usr/local/src/gcc-7.3.0/gcc-build-7.3.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.24 /usr/lib64
  9. 切换工作目录至 /usr/lib64,删除原来的软链接, 将默认库的软链接指向最新动态库:

    1
    2
    3
    cd /usr/lib64
    rm -rf libstdc++.so.6
    ln -s libstdc++.so.6.0.24 libstdc++.so.6

    🐔好了,收工…

参考资料

关于