軟件源碼包安裝背景html
接觸過Linux的人都知道要在Linux上安裝軟件一般使用rpm或yum,這兩種工具的出現確實大大減小咱們在Linux系統上安裝軟件的工做量,可是rpm及yum的安裝的軟件都是基於某種平臺事先編譯好的成品,這個成品中製做者考慮種種因素可能會對這個軟件的功能進行必定程度的剪裁,也就是說現成的rpm包或yum包不是最全的軟件包。而若是咱們想要添加這個軟件的rpm或yum中未包含的功能該怎麼辦?爲了解決這個問題,咱們就要使用軟件源碼包進行安裝。
程序員
什麼是軟件源碼包?apache
Linux軟件的源代碼分發是指提供了該軟件全部程序源代碼的發佈形式,須要用戶本身編譯成可執行的二進制碼並進行安裝。其優勢是配置靈活,能夠隨意去掉或保留某些功能/模vim
塊,適應多種硬件/操做系統平臺及編譯環境;缺點是難度較大,通常不適合初學者使用緩存
源碼包格式有兩種:bash
1.*.src.rpm形式的源代碼軟件包less
2.*.tar.gz/*.xz/*.bz2形式的源代碼軟件包ide
軟件源碼包的安裝函數
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
實驗準備:
一、確認httpd-2.2.29.tar.bz2已下載,一般會把源碼包保存在/usr/local/src路徑下
二、確認make工具存在,rpm -q make檢查便可,若不存在安裝之。
三、爲確保編譯環境沒有問題,咱們最好使用yum groupinstall "Development Tools"將開發環境部署好,新手建議安裝Development Tools,不過事實上該包的安裝只須要gcc這個組件系統中存在便可,所以也能夠只進行yum install gcc。至於yum倉庫如何設置本文在此不介紹。
……………………………………………………………………………………………………………………
實驗步驟:
一、解壓httpd-2.2.29.tar.bz2,查看源文件夾的文件及其個數。
剛加壓過的httpd-2.2.29有40個文件。
二、咱們先看看INSTALL、README文件
[root@localhost httpd-2.2.29]# cat INSTALL | less
該文件主要介紹此源碼包的安裝步驟
[root@localhost httpd-2.2.29]# cat README | less
該文件主要介紹個這個軟件,是什麼,做用,功能等信息。
三、./configure --help查看配置的使用幫助信息
這裏面的信息涉及軟件安裝位置,配置文件存放位置等等。根據須要進行選擇,這裏面比INSTALL安裝文件要全。
四、設置軟件安裝路徑爲/usr/local/apache2,配置文件路徑爲/etc/apache2,由於是實驗這裏就再也不指定其餘額外設置。現實工做中根據實際狀況進行選擇。
[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文件的部份內容。
五、編譯,以 make 這個程序並使用該目錄下的 Makefile 作爲他的參數配置文件,來進行 make (編譯或其餘)的動做。
直接鍵入make命令便可,等待幾分鐘直至編譯結束。
這步進行結束後,又多了4個文件modules.lo、modules.o、httpd、buildmark.o。
以.lo或.o結束的文件是源碼經gcc編譯後產生的目標文件。
httpd這個文件的做用是爲產生httpd的連接庫的暫時性腳本,其英文解釋以下圖。
六、make install 這就是最後的安裝步驟了,make 會依據 Makefile 這個檔案裏面關亍 install 的項目,將上一個步驟所編譯完成的數據給他安裝到預約的目錄中。
安裝到這裏源碼包安裝已經結束,只不過如今還有些問題:1)咱們沒法man apachectl這個命令;2)apachectl這個命令無法使用tab補全。怎麼辦?
看來咱們雖然安裝了,可是作的還不夠完善。
下面咱們來解決上面的兩個問題。
安裝後的配置
先按咱們指定的安裝路徑找到已安裝的軟件
要解決man問題,咱們須要將該軟件中的man目錄及其所在路徑加入/etc/man_db.conf文件。
一、man apachectl問題
編輯/etc/man_db.conf,並將軟件man目錄的路徑加入該文件。
以後咱們須要重讀/etc/man_db.conf文件
source /etc/man_db.conf便可
以後man apachectl成功顯示其幫助文檔。
二、解決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命令便可。
[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/"
源碼包的安裝至此已經結束,整個安裝過程,其實只要前期準備完善,制定好相應的安裝策略,好比安裝路徑,配置文件路徑等問題,整個安裝過程其實挺簡單。
本文查找資料
http://baike.so.com/doc/5725732-5938469.html gcc的相關資料
http://www.cnblogs.com/einyboy/archive/2012/09/13/2683015.html rpm源碼包相關資料