天天看點

Linux 編譯安裝源代碼包優點缺點一般步驟注意事項

在Linux系統管理中,通過本地編譯源代碼的方式安裝軟體包,是普遍采用的一種方式。

優點

這種方式以靈活定制著稱,主要具備以下優點:

  • 定制軟體包版本

在一些情況下,我們對軟體包的版本有定制化的要求:

  1. 安裝最新版本的軟體包以使用其新特性
  2. 安裝特定版本的軟體包以滿足特殊開發需要
  3. 安裝過時版本的軟體包以使用較老的開發管理工具

雖然像apt-get/yum這樣基于deb/rpm的軟體包管理器也提供定制軟體包版本等功能,但由于deb/rpm中收錄的軟體包版本有限(最新/過舊的沒有),直接通過編譯源代碼來安裝特定版本的軟體包仍是不可替代的。

  • 安裝軟體庫中沒有的軟體

deb/rpm軟體庫中的軟體并不是一應俱全的,要安裝軟體庫中沒有的軟體隻能通過編譯源代碼的方式進行。這種軟體一般是小衆的開源軟體、待發行的開源社群工具、處于開發測試階段的軟體等。

  • 完美比對本地環境

誰也無法保證異地編譯的軟體能在本地環境完美運作,在發行版林立、定制性極強的Linux世界裡更是如此。是以,最穩妥的辦法就是本地編譯,本地編譯至少能夠保證軟體包運作所依賴的環境完整,進而最大程度地減少軟體運作不正常情況的發生。

  • 多版本并存

Linux中,軟體包多版本并存是支援且不可避免的。

以python為例,vim等工具需要依賴較舊的python版本,此時,若舍棄舊版本盲目提升python版本,就會導緻vim等工具無法正常使用。

在這種情況下,安裝多個版本的python是一個很好的選擇。(對于python而言,更好的選擇應該是virtualenv)

  • 脫機安裝

出于安全等因素考慮,企業網絡一般會限制對外網的通路,在這種網絡環境下,本地編譯源代碼進行脫機安裝是迫不得已的選擇。

缺點

  • 複雜

毋庸置疑,這種方式操作較為複雜,需要較多的Linux系統管理知識。

  • 依賴性關系

Linux中,軟體包的依賴關系特别複雜,安裝某一軟體包往往意味着一系列依賴性軟體包的安裝。

apt-get/rpm會自行分析處理軟體包依賴關系,進而簡化安裝過程。

本地編譯安裝源代碼包就需要自己處理這些依賴關系了,事無巨細,親力親為。

一般步驟

1.下載下傳待安裝源代碼軟體包

wget url
           

2.解壓縮

tar -jxvf xx.tar.bz2
 tar -zxvf xx.tar.gz
           

3.進入解壓縮後目錄

cd xx
           

4.編譯環境檢查與軟體安裝配置

./configure
           

檢查編譯環境和軟體包依賴關系,同時配置軟體安裝選項。

--prefix=軟體要安裝的路徑
           

指定軟體安裝路徑,預設路徑為/usr/local。

5.編譯源代碼

編譯源代碼,生成目标檔案,依賴gcc即其他編譯環境。

6.安裝到本機

注意事項

  • 安裝說明高于一切

編譯源代碼包本身就是一種定制性很強的操作,具體的安裝步驟直接與軟體包相關。

标準的發行版軟體源代碼包内都會有安裝說明檔案,README/INSTALL。

該檔案内一般會寫明軟體安裝配置的具體步驟,以及軟體依賴關系。該檔案在安裝過程中具有絕對地位,高于任何教程。所謂教程,包括我部落格中的那些,不過是結合實踐,對README/INSTALL檔案做的簡化和歸納。

  • 善用echo $?

echo $?

用于檢查上一條指令的退出狀态,正常退出傳回值為0。

編譯安裝的過程很複雜,不便直接看出執行結果,在每個步驟執行完畢後用

echo $?

是最為經濟的辦法。

  • 提前處理軟體包依賴

軟體包依賴關系需要在安裝前處理完畢,即先安裝依賴性軟體包再安裝目标軟體。

軟體包依賴一般沒有補救的機會。

  • 多版本并存

編譯安裝軟體包之前,推薦檢查Linux是否已經安裝有該軟體包的其他版本。

rpm -qa
           

列出所有安裝的rpm package,通過其他方式安裝的軟體包不在範圍内。

which xx
           

查找xx指令的位置,軟體包一般會提供配套的指令,通過查找這些指令也可以判斷軟體包是否已存在。

thanks

繼續閱讀