本文由
標叔
在搭建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了