Linux基礎之軟件源碼包的安裝(Tarball的安裝)

軟件源碼包安裝背景

    接觸過Linux的人都知道要在Linux上安裝軟件通常使用rpm或yum,這兩種工具的出現確實大大減少我們在Linux系統上安裝軟件的工作量,但是rpm及yum的安裝的軟件都是基於某種平臺事先編譯好的成品,這個成品中製作者考慮種種因素可能會對這個軟件的功能進行一定程度的剪裁,也就是說現成的rpm包或yum包不是最全的軟件包。而如果我們想要添加這個軟件的rpm或yum中未包含的功能該怎麼辦?爲了解決這個問題,我們就要使用軟件源碼包進行安裝。




什麼是軟件源碼包?

    Linux軟件的源代碼分發是指提供了該軟件所有程序源代碼的發佈形式,需要用戶自己編譯成可執行的二進制碼並進行安裝。其優點是配置靈活,可以隨意去掉或保留某些功能/模

塊,適應多種硬件/操作系統平臺及編譯環境缺點是難度較大,一般不適合初學者使用


源碼包格式有兩種:

1.*.src.rpm形式的源代碼軟件包

2.*.tar.gz/*.xz/*.bz2形式的源代碼軟件包




軟件源碼包的安裝

1.*.src.rpm形式的源代碼軟件包

    (該類型由於還是以rpm功能實現的軟件安裝,這裏只是簡單介紹下其方法,具體如何實驗就不再演示。

    假設此*.src.rpm文件在/usr/local/src下,在該目錄下執行rpmbuild --rebuild  *.src.rpm,若命令順利執行則會在/usr/src/dist/RPMS下出現*.rpm

大致過程如下:

安裝

  rpm -rebuild *.src.rpm會自動根據所在平臺轉換成相應的平臺rpm包


  cd /usr/src/dist/RPMS


  rpm -ivh *.rpm

卸載

  rpm -e packagename


2.*.tar.gz/*.xz/*.bz2形式的源代碼軟件包

    以tar.gz或tgz或tar.bz2等格式結尾的軟件包一般都是以源代碼方式發佈的軟件,安裝這類軟件首先需要對軟件進行解壓:


  # tar -zxvf filename.tar.gz


  # tar -Jxvf filename.tar.xz


  # tar -jxvf filename.tar.bz2


  解壓以後,就可以進入解壓後的目錄:


  # cd filename/


  對於這類文檔,常見的安裝步驟是:配置、編譯和安裝3步,其中最麻煩的就是配置,因爲所有和軟件安裝相關的配置都是在這一步指定的:比如軟件安裝位置等。


  配置./configure


  編譯make


  安裝make install


  卸載make uninstall 或手動刪除


  說明:建議解壓後先閱讀說明文件(ReadMe和Install),瞭解安裝的需求,有必要時還需改動編譯配置。有些軟件包的源代碼在編譯安裝後可以用make uninstall命令來進行卸載,如果不提供此功能,則軟件的卸載必須手動進行。由於軟件可能將文件分散地安裝在系統的多個目錄中,往往很難把它刪除乾淨,那你應該在編譯前進行配置,指定軟件將要安裝到目標路徑:./configure --prefix=目錄名,這樣可以使用“rm -rf 軟件目錄名”命令來進行乾淨徹底的卸載。




Tarball形式的源代碼軟件包安裝實驗詳解


該實驗以httpd-2.2.29.tar.bz2爲例進行實驗

實驗環境CentOS 7.2

實驗準備

1、確認httpd-2.2.29.tar.bz2已下載,通常會把源碼包保存在/usr/local/src路徑下

2、確認make工具存在,rpm -q make檢查即可,若不存在安裝之。

3、爲確保編譯環境沒有問題,我們最好使用yum groupinstall "Development Tools"將開發環境部署好,新手建議安裝Development Tools,不過事實上該包的安裝只需要gcc這個組件系統中存在即可,因此也可以只進行yum install gcc。至於yum倉庫如何設置本文在此不介紹。

wKiom1e-ovKwfoBmAAAckf9DEXI841.gif

……………………………………………………………………………………………………………………

實驗步驟

1、解壓httpd-2.2.29.tar.bz2,查看源文件夾的文件及其個數

wKioL1e-o7HQQ3mbAABCxzion4Y424.gif

剛加壓過的httpd-2.2.29有40個文件。


2、我們先看看INSTALL、README文件

[root@localhost httpd-2.2.29]# cat INSTALL | less


wKiom1e-pKfxiyxhAABDh3a9K88085.gif

該文件主要介紹此源碼包的安裝步驟

[root@localhost httpd-2.2.29]# cat README | less


wKioL1e-pQahONsgAABEG28bAIg262.gif

該文件主要介紹個這個軟件,是什麼,作用,功能等信息。


3、./configure --help查看配置的使用幫助信息

這裏面的信息涉及軟件安裝位置,配置文件存放位置等等。根據需要進行選擇,這裏面比INSTALL安裝文件要全。

wKioL1e-pnHSRnw1AABSp_QGL7I394.gif


4、設置軟件安裝路徑/usr/local/apache2配置文件路徑/etc/apache2,因爲是實驗這裏就不再指定其他額外設置。現實工作中根據實際情況進行選擇。

[root@localhost httpd-2.2.29]# ./configure --prefix=/usr/local/apache2 --sysconfdir=/etc/apache2


等待幾分鐘,環境檢測結束。

wKiom1e-qCujIz-aAAA-r8ijuck674.gif

首先我們echo $?可以知道第一步的命令成功執行,在命令成功執行後,源文件多了5個文件分別爲:config.logconfig.niceconfig.statusMakefilemodules.c

.c結尾的爲原始碼config.log是在檢測過程中產生的日誌,config.niceconfig.status均爲檢測後產生的成功及狀態信息。

其中Makefile對於下一步的編譯至關重要,它裏面包含了編譯工作的預設行爲,(比如程序之間的鏈接順序,哪個先執行哪個後執行)make的編譯過程就是按照Makefile文件進行的

wKioL1e-qs6jGVRYAABRL-fJpNM258.gif

以上爲截取的Makefile文件的部分內容。


5、編譯,以 make 這個程序並使用該目錄下的 Makefile 做爲他的參數配置文件,來進行 make (編譯或其他)的動作。

直接鍵入make命令即可,等待幾分鐘直至編譯結束。

wKioL1e-xAeRL2fuAAA-rAOMbCU843.gif

這步進行結束後,又多了4個文件modules.lo、modules.o、httpd、buildmark.o

.lo或.o結束的文件是源碼經gcc編譯後產生的目標文件

httpd這個文件的作用是爲產生httpd的鏈接庫的暫時性腳本,其英文解釋如下圖。

wKiom1e-sMSiHkZpAABU6KbbLu0711.gif


6、make install 這就是最後的安裝步驟了,make 會依據 Makefile 這個檔案裏面關亍 install 的項目,將上一個步驟所編譯完成的數據給他安裝到預定的目錄中。


安裝到這裏源碼包安裝已經結束,只不過現在還有些問題:1)我們無法man apachectl這個命令2)apachectl這個命令沒法使用tab補全。怎麼辦?

看來我們雖然安裝了,但是做的還不夠完善


下面我們來解決上面的兩個問題。

安裝後的配置

先按我們指定的安裝路徑找到已安裝的軟件

wKiom1e-sp-AfxRpAAASlsM7aMQ452.gif

要解決man問題,我們需要將該軟件中的man目錄及其所在路徑加入/etc/man_db.conf文件。

1、man apachectl問題

編輯/etc/man_db.conf,並將軟件man目錄的路徑加入該文件

wKiom1e-s1_jP7OTAABZSn3CsLc035.gif

之後我們需要重讀/etc/man_db.conf文件

source /etc/man_db.conf即可

之後man apachectl成功顯示其幫助文檔。


2、解決tab補全命令問題

編輯文件/etc/profile.d/NAME.sh

在此文件中添加如下內容export PATH=$PATH:/PATH/TO/BIN/

wKioL1e-tIqBLQIOAAARF7dhYQg989.gif

之後重讀此文件即可解決tab補全命令問題。


看樣子,我們的安裝到此已經圓滿結束,不過還有一點的小缺憾,不過對於現在這種實驗環境確實無關緊要,如果是在實際工作中,我們還要考慮庫文件,及頭文件問題。因爲實際工作中這個服務並不是以個體出現的而是與很多服務協同工作,因此免不了會涉及開發問題,及函數庫讀取效能問題。


有關開發的配置

如何提升函數庫讀取效能?

將常用的動態函數庫先加載至內存當中可以解決函數庫讀取效能問題,不過如何將其加載到內存中?這兩步就涉及到ldconfig命令及/etc/ld.so.conf.d/目錄

編輯/etc/ld.so.conf.d/NAME.conf,將需要模塊的庫文件所在目錄添加至此文件中,之後讓系統重新生成緩存,使用ldconfig命令即可。

[root@localhost ld.so.conf.d]# vim apache2.conf 
[root@localhost ld.so.conf.d]# ldconfig 
[root@localhost ld.so.conf.d]# cat apache2.conf 
/usr/local/apache2/lib

對於開發人員他們會用到各種各樣的頭文件,系統爲了方便期間會將頭文件統一到一個目錄便於程序員調用,這個目錄一般爲/usr/include

所以爲了今後開發方便,我們還會將軟件的頭文件夾給映射至該目錄

[root@localhost ld.so.conf.d]# ln -sv /usr/local/apache2/include/ /usr/include/
"/usr/include/include" -> "/usr/local/apache2/include/"

wKiom1e-uWfSnUorAAAoxjYp9RM292.gif

源碼包的安裝至此已經結束,整個安裝過程,其實只要前期準備完善,制定好相應的安裝策略,比如安裝路徑,配置文件路徑等問題,整個安裝過程其實挺簡單。




本文查找資料

http://baike.so.com/doc/5725732-5938469.html gcc的相關資料

http://www.cnblogs.com/einyboy/archive/2012/09/13/2683015.html  rpm源碼包相關資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章