天天看點

做死的Centos-Atom興高采烈的去下Atom

layout: post

title: "做死的Centos-Atom"

date: 2016-05-10 20:37:45 +0800

comments: true

categories: [Linux]

昨天晚上突然冒出一個念頭在我的Centos6.5的虛拟機上裝Atom并且裝上那個炫酷的插件來裝波大逼。然後很悲催,軟體沒裝上不說,系統也被搞壞了。

興高采烈的去下Atom

在github上找到了Atom的開源項目,根據指引下載下傳好了rpm包。

然後

sudo yum localinstall atom.x86_64.rpm

不出意外出現了問題。

當時忘了截圖,不過我大概都還記得出了哪些問題。

這裡有個極度懵逼的事情
我最開始在Centos中下Atom由于網絡不好,時斷時續就沒管,後來切過去看。
咦~為什麼這麼快就下好了,開心的安裝。恩,問題來了 libnode.so 找不到。
恩,有問題嘛很正常。度娘之。

度娘好像并不能告訴我什麼,是時候翻牆了。翻出去過後的答案也是牛頭不對馬嘴。

憂郁了好一會,突然發現尼瑪,這個包隻有20+MB啊!!!!
           

這次包下好了完全沒問題

安裝中也出了一些問題。

但是我記不太清楚了0。0

其實是因為出的問題太多了,本來想安裝成功過後做一個總結,之前查得解決方案的網頁也都存了書簽。

可是,後來軟體沒裝好,系統被玩壞了。。書簽和曆史記錄全部丢失了,,我就有點懵逼了。。。
           

解決了一些問題過後,安裝完成了。

開心的atom想打開atom

恩,提莫的。

error! error!!

version GLIBCXX_3.4.9 not found

因為我解決問題的博文已經搞丢了,剛剛重新找了一篇大概差不多

傳送門

ll /lib64/libc.so.6  
lrwxrwxrwx 1 root root 19 Sep 23 08:29 /lib64/libc.so.6 -> /lib64/libc-2.12.so  
           

libc.so.6是一個軟連接配接,目前的glibc是2.12版本,我遇到的事GLIBC_2.15找不到的問題,是以需至少更新到2.15

首先,從網上下載下傳glibc 2.15的rpm安裝包,但這個不容易,因為.rpm針對的是centOS和redhat,高版本安裝包很少見。也可以直接從其他系統上好一個編譯好的檔案

libc.so.6(對應glibc 2.15或者更高的),不過最保險的方式就是下載下傳源代碼在本地編譯一次(有的人實在編譯不成功,那也隻能從别的地方找一份了)

各個版本的glibc可以從下載下傳位址找,包括其插件glibc-port

最新到2.20,我保守的選擇2.15

對于低版本glibc,還有glibc-linuxthreads-2.x需要編譯,可參考很多網上文檔,但2.15沒有,是以不用了

wget http://ftp.gnu.org/gnu/glibc/glibc-2.15.tar.gz   
wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.15.tar.gz   
tar -xvf  glibc-2.15.tar.gz  
tar -xvf  glibc-ports-2.15.tar.gz   
mv glibc-ports-2.15 glibc-2.15/ports   
mkdir glibc-build-2.15    
cd glibc-build-2.15   
../glibc-2.15/configure  --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin  
make   
make install
           

如果提示install成功,去看glibc所在的共享庫:

ll /lib64/libc* 
           

可以看到2.12的舊庫檔案還在,多了2.15版本的庫檔案,而且軟連結檔案全部指向了2.15版本。

<pre class="prettyprint linenums">

-rwxr-xr-x 1 root root 1921096 Aug 30 02:16 /lib64/libc-2.12.so

-rwxr-xr-x 1 root root 9801632 Sep 25 13:46 /lib64/libc-2.15.so

lrwxrwxrwx. 1 root root 18 May 19 18:51 /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 May 19 18:51 /lib64/libcap.so.2 -> libcap.so.2.16

-rwxr-xr-x 1 root root 19016 Dec 8 2011 /lib64/libcap.so.2.16

lrwxrwxrwx. 1 root root 19 May 19 18:57 /lib64/libcgroup.so.1 -> libcgroup.so.1.0.40

-rwxr-xr-x 1 root root 97016 Dec 9 2013 /lib64/libcgroup.so.1.0.40

-rwxr-xr-x 1 root root 197064 Aug 30 02:16 /lib64/libcidn-2.12.so

-rwxr-xr-x 1 root root 267972 Sep 25 13:46 /lib64/libcidn-2.15.so

lrwxrwxrwx 1 root root 15 Sep 25 13:52 /lib64/libcidn.so.1 -> libcidn-2.15.so

lrwxrwxrwx. 1 root root 17 May 19 18:51 /lib64/libcom_err.so.2 -> libcom_err.so.2.1

-rwxr-xr-x 1 root root 17256 Nov 22 2013 /lib64/libcom_err.so.2.1

-rwxr-xr-x 1 root root 40400 Aug 30 02:16 /lib64/libcrypt-2.12.so

-rwxr-xr-x 1 root root 142947 Sep 25 13:46 /lib64/libcrypt-2.15.so

lrwxrwxrwx. 1 root root 22 May 19 18:57 /lib64/libcryptsetup.so.1 -> libcryptsetup.so.1.1.0

-rwxr-xr-x 1 root root 97072 Jun 22 2012 /lib64/libcryptsetup.so.1.1.0

lrwxrwxrwx 1 root root 16 Sep 25 13:52 /lib64/libcrypt.so.1 -> libcrypt-2.15.so

lrwxrwxrwx 1 root root 12 Sep 25 13:52 /lib64/libc.so.6 -> libc-2.15.so

</pre>

有些人會在make install後出現error。這兒error我沒去細究,經過網友提醒,可能是因為沒有sudo造成的,因為make install就是把檔案拷貝到幾個受保護的系統目錄下。

如果還是不行,可以檢視一下系統此時的GLIBC版本,參考一開始的做法。如果版本未更新,我們隻能手動安裝一下:

首先make是成功了,那麼我們會發現build目錄下編譯出了一個新的libc.so.6 (/glibc-build-2.15/libc.so.6, 我們會發現這實際上也是一個軟連接配接,真實的lib檔案時libc.so, 輸出

$ ll  libc.so.6  
lrwxrwxrwx 1 root root 7 Sep 23 07:41 libc.so.6 -> libc.so  
$ strings libc.so | grep GLIBC  
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_2.15  
GLIBC_PRIVATE  
           

這是我們需要的lib了,然後去更新系統的庫。

這裡要注意,更新系統裡的連結(我的是/lib64/libc.so.6) 很容易出錯,我不清楚有沒有更好的辦法,一般都是删除舊連結,建立新連結

但删除舊連結後,很多指令直接不能用了,因為此時中不到glibc的庫了。這個時候就需要臨時指定一個glibc庫,方法如下(libc.so改個名以便好以後更新的其他版本區分)

cp /****/glibc-build-2.15/libc.so /lib64/libc-2.15.so  

rm -rf /lib64/libc.so.6  
LD_PRELOAD=/lib64/libc-2.15.so ln -s/lib64/libc-2.15.so  lib64/libc.so.6  
           

連接配接更新成功,再編譯的話,GLIBC_2.15及以下版本的依賴問題就不會出現了。

恩,到這裡我也有話要說,我當時也是耿直,在這一步我重複了兩三次!!!我耿直到從低版本一個一個往高版本安裝啊。我真傻,真的。。。

** /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found**

傳送門

出現這種問題就是因為編譯庫的編譯器和編譯目前程式的編譯器版本是不一樣的,在具體一點就是因為,目前程式的編譯器的版本是比較低的,隻要更新一下就可以了。可以用如下指令檢視一下目前GCC版本:

<pre class="prettyprint linenums">

strings /usr/lib/libstdc++.so.6 | grep GLIBCXX

GLIBCXX_3.4

GLIBCXX_3.4.1

GLIBCXX_3.4.2

GLIBCXX_3.4.3

GLIBCXX_3.4.4

GLIBCXX_3.4.5

GLIBCXX_3.4.6

GLIBCXX_3.4.7

GLIBCXX_3.4.8

GLIBCXX_3.4.9

GLIBCXX_3.4.10

GLIBCXX_3.4.11

GLIBCXX_3.4.12

GLIBCXX_3.4.13

GLIBCXX_FORCE_NEW

GLIBCXX_DEBUG_MESSAGE_LENGTH

</pre>

并沒有動态庫中要求的GCC版本 “GLIBCXX_3.4.14”,是以需要進行更新一下我們的GCC版本,更新過程如下:

下載下傳新版本的GCC,位址為點選打開連結 (這裡也有一個坑,今天真的是傻!!!)

下載下傳下來之後,用如下指令開始解壓

<pre class="prettyprint linenums">

ar -x libstdc++6_4.7.2-5_i386.deb && tar xvf data.tar.gz

如果你的檔案目錄為GCC(如果不是,把GCC改為相應的目錄即可),依次執行下面指令:

cd GCC/usr/lib/i380-linux-gun

su root

cp libstdc++.so.6.0.17 /usr/lib

cd /usr/lib

rm libstdc++.so.6

ln -s libstdc++.so.6.0.17 libstdc++.so.6

strings /usr/lib/libstdc++.so.6 | grep GLIBCXX

GLIBCXX_3.4

GLIBCXX_3.4.1

GLIBCXX_3.4.2

GLIBCXX_3.4.3

GLIBCXX_3.4.4

GLIBCXX_3.4.5

GLIBCXX_3.4.6

GLIBCXX_3.4.7

GLIBCXX_3.4.8

GLIBCXX_3.4.9

GLIBCXX_3.4.10

GLIBCXX_3.4.11

GLIBCXX_3.4.12

GLIBCXX_3.4.13

GLIBCXX_3.4.14

GLIBCXX_3.4.15

GLIBCXX_3.4.16

GLIBCXX_3.4.17

GLIBCXX_DEBUG_MESSAGE_LENGTH

</pre>

到這裡其實就改結束了。可是回去atom

恩。不錯,不是原來的錯誤了,重新報了一個錯誤。(具體的錯誤我忘了)

後來在解決的時候才發現這個錯誤是因為我之前下載下傳安裝的libstdc是32位的,但是我的Atom是64位的就出錯了。然後再這個過程中,我之前以為是我建立軟連結的時候建立錯誤,我把lib和lib64裡面的

libstdc++.so.6

都删了重新建立了一次。然後就GG了,這個時候連firefox浏覽器都跟着崩潰了。後來意識到這個問題過後重新安裝了64位的

libstdc++.so.6

解決了這個問題。

undefined symbol g_bytes_unref

這是遇到的最後的問題,也是徹底解決我的問題。。

在國内的網站上很少有這個問題的解決方法,後來找到一個論壇說是因為

GBytes is relatively new, only since glib-2.32

準備更新glib庫

博文

檢查系統目前的版本

rpm -qi glibc
           

在CentOS中用更新指令到2.5已經是最新版本了,隻好手動下載下傳 glibc的源碼包編譯安裝更新。

可以在 http://ftp.gnu.org/pub/gnu/glibc/看到目前的最新版本,

我看到的最新版本是glibc-2.22。

cd /usr/src 
 mkdir glibc-2.22-build 
 wget http://ftp.gnu.org/pub/gnu/glibc/glibc-2.22.tar.gz
 tar zxvf glibc-2.22.tar.gz 
 cd /usr/src/glibc-2.22-build/ 
 export CFLAGS="-g -O2 -march=i686" 
  網上有些地方加優化開關 -O2  時(大寫字母O),寫的是 -02 (數字零),
  是以拷貝過來仍然出現3中的錯誤,是以請注意。
 /usr/src/glibc-2.22-build/glibc-2.22/configure --prefix=/usr/src/glibc-2.22-build/ --with-headers=/usr/include
 make 
 make install
           

報錯

*** These critical programs are missing or too old: as ld compiler
*** Check the INSTALL file for required versions.

解決辦法:
問題原因: 
缺少autoconf或版本太低


下載下傳安裝新版本


 wget ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.68.tar.gz
 tar zxvf autoconf-2.68.tar.gz
 cd autoconf-2.68
 ./configure --prefix=/usr/
 make && make install

           

我進行到了這一步,然後虛拟機卡住了,卡了好久。。

然後我幹出了今天幹過最蠢的事我直接用VM重新開機了它(我的Windows卡住就是這樣幹的(尴尬臉))

然後再開機我就懵逼了,我firefox的書簽沒了,曆史記錄沒有,系統還報錯。運作幾分鐘就一直卡住。。

然後我就決定果斷棄坑!!!!!

PS:

這篇博文還很不完整,以後有機會再在Centos上裝Atom成功的話在回來補充

<pre class="prettyprint linenums">

多麼痛的領悟

絕對不要随便強制重新開機!!!!

用浏覽器一定要登入,書簽和曆史記錄才能同步啊!!!

下次更新東西别再一個版本一個版本的往上裝了,耿直過頭啊!!!

</pre>