軟件源碼包安裝背景
接觸過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.log、config.nice、config.status、Makefile、modules.c
以.c結尾的為原始碼,config.log是在檢測過程中產生的日志,config.nice與config.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/"
源碼包的安裝至此已經結束,整個安裝過程,其實只要前期准備完善,制定好相應的安裝策略,比如安裝路徑,配置文件路徑等問題,整個安裝過程其實挺簡單。