首頁 > 軟體

Linux軟體原始碼包的安裝(Tarball的安裝)

2020-06-16 17:34:40

軟體原始碼包安裝背景

接觸過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倉庫如何設定本文在此不介紹。

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

實驗步驟

1、解壓httpd-2.2.29.tar.bz2,檢視原始檔夾的檔案及其個數

剛加壓過的httpd-2.2.29有40個檔案。

2、我們先看看INSTALL、README檔案

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

該檔案主要介紹此原始碼包的安裝步驟

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

該檔案主要介紹個這個軟體,是什麼,作用,功能等資訊。

3、./configure --help檢視設定的使用幫助資訊

這裡面的資訊涉及軟體安裝位置,組態檔存放位置等等。根據需要進行選擇,這裡面比INSTALL安裝檔案要全。

4、設定軟體安裝路徑/usr/local/apache2組態檔路徑/etc/apache2,因為是實驗這裡就不再指定其他額外設定。現實工作中根據實際情況進行選擇。

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

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

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

.c結尾的為原始碼config.log是在檢測過程中產生的紀錄檔,config.niceconfig.status均為檢測後產生的成功及狀態資訊。

其中Makefile對於下一步的編譯至關重要,它裡面包含了編譯工作的預設行為,(比如程式之間的連結順序,哪個先執行哪個後執行)make的編譯過程就是按照Makefile檔案進行的

以上為擷取的Makefile檔案的部分內容。

5、編譯,以 make 這個程式並使用該目錄下的 Makefile 做為他的引數組態檔,來進行 make (編譯或其他)的動作。

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

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

.lo或.o結束的檔案是原始碼經gcc編譯後產生的目標檔案

httpd這個檔案的作用是為產生httpd的連結庫的暫時性指令碼,其英文解釋如下圖。

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

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

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

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

安裝後的設定

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

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

1、man apachectl問題

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

之後我們需要重讀/etc/man_db.conf檔案

source /etc/man_db.conf即可

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

2、解決tab補全命令問題

編輯檔案/etc/profile.d/NAME.sh

在此檔案中新增如下內容export PATH=$PATH:/PATH/TO/BIN/

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

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

 

有關開發的設定

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

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

編輯/etc/ld.so.conf.d/NAME.conf,將需要模組的庫檔案所在目錄新增至此檔案中,之後讓系統重新生成快取,使用ldconfig命令即可。

1
2
3
4
[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

所以為了今後開發方便,我們還會將軟體的標頭檔案夾給對映至該目錄

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

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

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-08/134667.htm


IT145.com E-mail:sddin#qq.com