Centos6.5 搭建node環境踩坑記錄

本文由標叔在搭建node 線上環境遇到問題的總結。若有錯誤,請不吝指正。html

聲明文章用到一些方案或者方法來源相關博客的都在文中標明瞭文章來源,若有未標出,歡迎指出。node

背景

基於線上odp環境搭建線上node 環境,odp 環境爲gcc 4.4.7 ,centos 6.5 glic 最高支持2.12版本,git version 1.x版本。本文主要是記錄在搭建node 環境中,遇到的一系列問題,總結,但願能幫到以後有相似經歷的同窗。c++

問題列表:

  • node有些npm 包有些分發的是c++ 代碼,利用node-gpy 進行編譯,這個編譯是依賴 gcc 的版本,node 10+ 以後對gcc 版本要求4.9 + ,不然編譯不過去,ps: 在編譯xxx(內部一個模塊)在node 11 的擴展的時候,發現編譯不過去 主要緣由是gcc 版本太低(若是是編譯對node 對環境是須要升級gcc對,不須要編譯node 擴展環境,gcc4.4.7 也可使用)
  • 有些node 擴展對glibc 有要求,須要glibc 2.14 ,須要升級glic
  • 安裝nvm(對gitl/ssl/curl 都有要求,centos 6.x 坑真是不少.....)

什麼是gcc

gcc (GNU Compiler Collection,GNU編譯器套裝),能夠簡單認爲是c*模塊的編譯器git

現有環境版本查看

cat /etc/redhat-release 查看centos 版本
gcc --version | head -1

複製代碼

如何升級gcc 版本

升級gcc 版本相對來講比較容易,本文參考了這篇文章 本次編譯咱們只須要升級到4.9便可,我在咱們的一臺線上服務直接給升級6.x 能夠完成node 擴展的編譯github

升級到gcc4.9:

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

安裝nvm 環境

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 擴展吧,新問題接踵而至 ,且看下面的錯誤

解決libc.so.6: version `GLIBC_2.14' not found問題

當我滿身換新終於把c++ 的node 擴展編譯經過的時候,馬上把相關模塊在咱們另外一個線上機器跑這個node 模塊,結果又是一盆冷水啊、、、error =>libc.so.6: version `GLIBC_2.14' not found問題,這個問題嘗試了網上說的辦法都沒有解決,最終是須要經過升級glibc的來解決這個問。gcc glib glibc 關係請查看,可是升級glibc貌似很危險,並且中間升級,大概踩得坑是升級的glibc 和gcc 版本不對應。下面詳細介紹下升級glibc的過程

查看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的升級很是危險,建議作好備份工做,由於有可能升級完以後,你的系統就癱瘓了 首先先去找一個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了

相關文章
相關標籤/搜索