本文由
标叔
在搭建node 线上环境遇到问题的总结。若有错误,请不吝指正。html
声明文章用到一些方案或者方法来源相关博客的都在文中标明了文章来源,若有未标出,欢迎指出。node
基于线上odp环境搭建线上node 环境,odp 环境为gcc 4.4.7 ,centos 6.5 glic 最高支持2.12版本,git version 1.x版本。本文主要是记录在搭建node 环境中,遇到的一系列问题,总结,但愿能帮到以后有相似经历的同窗。c++
gcc (GNU Compiler Collection,GNU编译器套装),能够简单认为是c*模块的编译器git
cat /etc/redhat-release 查看centos 版本
gcc --version | head -1
复制代码
升级gcc 版本相对来讲比较容易,本文参考了这篇文章 本次编译咱们只须要升级到4.9便可,我在咱们的一台线上服务直接给升级6.x 能够完成node 扩展的编译github
wget https://copr.fedoraproject.org/coprs/rhscl/devtoolset-3/repo/epel-6/rhscl-devtoolset-3-epel-6.repo -O /etc/yum.repos.d/devtoolset-3.repo
yum -y install devtoolset-3-gcc devtoolset-3-gcc-c++ devtoolset-3-binutils
scl enable devtoolset-3 bash
复制代码
须要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。若果下次还须要编译的话,执行scl enable devtoolset-3 bash 长期的话,能够详细看下上面的文章,安装步骤很详细shell
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
复制代码
报错clone error,一直觉得是访问权限的问题,后来各类查找资料是nvm 这个脚本里对git的版本有要求 接着去升级git,在centos6 直接yum update git 很差用npm
yum install http://opensource.wandisco.com/centos/6/git/x86_64/wandisco-git-release-6-1.noarch.rpm
yum install git
复制代码
git 也更新到新版本,这下应该没问题了,在来安装一次centos
新错误又来了。。。bash
fatal: unable to access 'https://github.com/creationix/nvm.git/': SSL connect error
Failed to clone nvm repo. Please report this!
复制代码
兵来将挡水来土掩,报啥错就来升级啥curl
yum update -y nss curl libcurl
复制代码
nvm安装完以后,安装node 就很容易了,接下来开始测试以前编译的node 扩展吧,新问题接踵而至 ,且看下面的错误
当我满身换新终于把c++ 的node 扩展编译经过的时候,马上把相关模块在咱们另外一个线上机器跑这个node 模块,结果又是一盆冷水啊、、、error =>libc.so.6: version `GLIBC_2.14' not found问题,这个问题尝试了网上说的办法都没有解决,最终是须要经过升级glibc的来解决这个问。gcc glib glibc 关系请查看,可是升级glibc貌似很危险,并且中间升级,大概踩得坑是升级的glibc 和gcc 版本不对应。下面详细介绍下升级glibc的过程
strings /lib64/libc.so.6 | grep GLIBC_ | head -20
复制代码
以ipxxx.53我升级以后的为例,看到目前支持最高到2.14
[root@xxxxxxxx.53 downloads]# strings /lib64/libc.so.6 | grep GLIBC_ | head -20
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_PRIVATE
___sys_nerr_GLIBC_2_1
___sys_nerr_GLIBC_2_4
复制代码
strings /lib64/libc.so.6 | grep GLIBC_ | head -20
以14.53我升级以后的为例,看到目前支持最高到2.14
[root@xxxxxxxx.53 downloads]# strings /lib64/libc.so.6 | grep GLIBC_ | head -20
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_PRIVATE
___sys_nerr_GLIBC_2_1
___sys_nerr_GLIBC_2_4
复制代码
看下lib64下libc 的软链指向(这是我升级以后的)
[root@xxxxxxxxxxxxx.53 downloads]# ll /lib64/libc**
-rwxr-xr-x 1 root root 1924768 Apr 9 16:59 /lib64/libc-2.12.so
lrwxrwxrwx 1 root root 32 May 27 13:49 /lib64/libc.so.6 -> /opt/glibc-2.14/lib/libc-2.14.so
lrwxrwxrwx. 1 root root 18 Sep 1 2014 /lib64/libcap-ng.so.0 -> libcap-ng.so.0.0.0
-rwxr-xr-x. 1 root root 18672 Jun 25 2011 /lib64/libcap-ng.so.0.0.0
lrwxrwxrwx. 1 root root 14 Sep 1 2014 /lib64/libcap.so.2 -> libcap.so.2.16
-rwxr-xr-x. 1 root root 16600 Dec 7 2011 /lib64/libcap.so.2.16
lrwxrwxrwx. 1 root root 19 Sep 1 2014 /lib64/libcgroup.so.1 -> libcgroup.so.1.0.40
-rwxr-xr-x. 1 root root 94408 Dec 9 2013 /lib64/libcgroup.so.1.0.40
-rwxr-xr-x 1 root root 201632 Apr 9 16:59 /lib64/libcidn-2.12.so
lrwxrwxrwx 1 root root 15 May 27 13:05 /lib64/libcidn.so.1 -> libcidn-2.12.so
lrwxrwxrwx 1 root root 17 Aug 16 2016 /lib64/libcom_err.so.2 -> libcom_err.so.2.1
-rwxr-xr-x 1 root root 14664 Jul 24 2015 /lib64/libcom_err.so.2.1
-rwxr-xr-x 1 root root 40872 Apr 9 16:59 /lib64/libcrypt-2.12.so
lrwxrwxrwx 1 root root 16 May 27 13:05 /lib64/libcrypt.so.1 -> libcrypt-2.12.so
lrwxrwxrwx 1 root root 22 Dec 25 2014 /lib64/libcryptsetup.so.1 -> libcryptsetup.so.1.1.0
-rwxr-xr-x 1 root root 94312 Jun 22 2012 /lib64/libcryptsetup.so.1.1.0
复制代码
glibc的升级很是危险,建议作好备份工做,由于有可能升级完以后,你的系统就瘫痪了 首先先去找一个glibc 214 版本的包 glibc-2.14.tar.xz
wget your_find_glibc-2.14.tar.xz_http_address
tar -xvf glibc-2.14.tar.xz
cd glibc-2.14
mkdir build
cd build
../configure --prefix=/opt/glibc-2.14 // 配置glibc并设置当前glibc-2.14安装目录
这一步,有可能会出现config error ,version old 一个报错
这个cd .. && cat INSTALL 看下里面推荐对gcc依赖的版本,2.14 推荐的版本应该是4.8
按照对应的升级gcc 就好
make && make install // 编译安装glibc-2.14库
耗时可能好久,耐心等待便可
rm -rf /lib64/libc.so.6 // 先删除先前的libc.so.6软链
ln -s /opt/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6
这一步大几率会出错,没关系,用下面的命令去创建软链便可
LD_PRELOAD=/opt/glibc-2.14/lib/libc-2.14.so ln -s /opt/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6
若是上面仍是不行,考虑还原到以前2.12版本吧
LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6 // libc-2.12.so 此项是系统升级前的版本
复制代码
网上大部分都是这么执行的,可是一直configure以后,是没有make 的,configure的过程一直 报错,这个时候能够cat INSTALL 看下这个包推荐或者支持的gcc 版本,这个仍是咱们这个一个以前搞过c++ 开发的产品的给出的建议去查看下INSTALL文档,卧槽牛逼,,,,insatll 文档代表了推荐和支持的版本,个人gcc 以前已经升到到6.x ,glibc.2.14这个须要gcc 不能过高,因此我把gcc 降级到4.x ,编译了半天终于ok了,(下次这种编译仍是首先去看下人家软件包的安装说明吧),至此glbic 升级ok了