點擊返回 自學Linux命令行與Shell腳本之路html
9.4-基於Red Hat系統工具包存在兩種方式之二:源碼包
本節主要介紹基於Red Had的系統(測試系統centos)apache
1. 工具包存在兩種方式:RPM包與源碼包
1.1.RPM包與源碼包區別
安裝以前的區別:概念上的區別
- 源碼包是開源的,比RPM包安裝更自由,可是它安裝更慢,更容易報錯;
- RPM包是通過編譯的,不能看到源代碼,可是它安裝更快,報錯更容易解決,只有依賴性問題。
缺點:安裝的環境必須與編譯時的環境一致或者至關;包與包之間存在着相互依賴的狀況;卸載包時須要先把依賴的包卸載掉,若是依賴的包是系統所必須的,那就不能卸載這個包,不然會形成系統崩潰。
安裝以後的區別:安裝位置不一樣
- RPM包不須要指定安裝位置,它會安裝到系統默認位置;
- 源碼包是人爲手工設置的
1.2.安裝位置
RPM包是按照在默認位置中
RPM包默認安裝路徑
- /etc/ 配置文件安裝目錄
- /usr/bin/ 可執行的命令安裝目錄
- /usr/lib/ 程序所使用的函數庫保存位置
- /usr/share/doc/ 基本的軟件使用手冊保存位置
- /usr/share/man/ 幫助文件保存位置
源碼包安裝位置
- .安裝在指定位置當中,通常是/usr/local/軟件名/
1.3 安裝位置不一樣帶來的影響編程
.RPM包安裝的服務可使用系統服務管理命令(service)來管理,例如RPM包安裝的apache的啓動方法是:
- /etc/rc.d/init.d/httpd start
- service httpd start
.而源碼包安裝的服務則不能被服務管理命令管理,由於沒有安裝到默認路徑中。因此只能用絕對路徑進行服務的管理,如:
- /usr/local/apache2/bin/apachectl start
2. 源碼包
- 開放源碼:就是程序代碼,寫給人類看的編程語言,但機器並不認識,因此沒法執行。
- 編譯程序:將程序代碼轉譯成機器看得懂的語言,就相似於翻譯者的角色。
- 可執行文件:通過編譯程序變成二進制程序後機器看得懂能夠執行的文件。
2.1 函數庫centos
相似於子程序的角色,能夠被調用來執行的一段功能函數。編程語言
2.2 make與configure函數
使用相似於gcc的編譯程序來進行編譯的過程並不簡單,我麼可使用make這個命令的相關功能來進行編譯過程的命令簡化。工具
當執行make時,make會在當前目錄下查找Maklefile文本文件,而Makefile文件裏面記載了源碼如何編譯的詳細信息。測試
Makefile文件,一般軟件開發商都會寫一個檢測程序來檢測用戶的操做環境,以及該操做環境是否有軟件開發商所須要的其餘功能,檢測程序檢測完畢後就會主動創建Makefile的規則文件。而這個檢測程序的文件名爲configure或config。ui
總結編譯過程:spa
- 執行configure來創建Maklefile,這個步驟必定要成功;
- 以make來調用所須要的數據來編輯便可。
2.3 Tarball軟件
Tarball文件其實就是將軟件的全部源碼文件現以.bar打包,而後在以壓縮技術來壓縮,一般最多見的就是以gzip來壓縮。
Tarball文件通常的擴展名會寫成*.tar.gz或者*.tgz 。
Tarball是一個壓縮包,將它解壓以後,裏面的文件一般會有:
- 源代碼文件(Source Code)
- 檢測程序文件(configure或config);
- 本軟件的簡易說明與安裝說明(INSTALL 和 README)。
Tarball是如何安裝的?基本流程以下:
- 取得原始檔:將 tarball 文件在 /usr/local/src 目錄下解壓縮;
- 取得步驟流程:進入新建立的目錄底下,去查閱 INSTALL 與 README 等相關文件內容 (很重要的步驟!);
- 相依屬性軟件安裝:根據 INSTALL/README 的內容察看並安裝好一些相依的軟件 (非必要);
- 建立 makefile:以自動偵測程序 (configure 或 config) 偵測做業環境,並建立 Makefile 這個文件;
- 編譯:以 make 這個程序並使用該目錄下的 Makefile 作爲他的參數配置檔,來進行 make (編譯或其餘) 的動做;
- 安裝:以 make 這個程序,並以 Makefile 這個參數配置檔,依據install 這個標的 (target) 的指定來安裝到正確的路徑!
Tarball 安裝的命令方式:
- ./configure
這個步驟就是在建立 Makefile 這個文件羅!一般程序開發者會寫一支scripts 來檢查你的 Linux 系統、相關的軟件屬性等等,這個步驟至關的重要,由於將來你的安裝資訊都是這一步驟內完成的!另外,這個步驟的相關資訊應該要參考一下該目錄下的README 或 INSTALL 相關的文件!
- make clean
make 會讀取 Makefile 中關於 clean 的工做。這個步驟不必定會有,可是但願運行一下,由於他能夠去除目標文件!由於誰也不肯定原始碼裏面到底有沒有包含上次編譯過的目標文件 (*.o) 存在,因此固然仍是清除一下比較穩當的。至少等一下新編譯出來的運行檔咱們能夠肯定是使用本身的機器所編譯完成的嘛!
- make
make 會依據 Makefile 當中的默認工做進行編譯的行爲!編譯的工做主要是進行gcc 來將原始碼編譯成爲能夠被運行的 object files ,可是這些 object files一般還須要一些函式庫之類的 link 後,才能產生一個完整的運行檔!使用 make就是要將原始碼編譯成爲能夠被運行的可運行檔,而這個可運行檔會放置在目前所在的目錄之下,還沒有被安裝到預約安裝的目錄中;
- make install
一般這就是最後的安裝步驟了,make 會依據 Makefile 這個文件裏面關於 install 的項目,將上一個步驟所編譯完成的數據給他安裝到預約的目錄中,就完成安裝啦!
請注意,上面的步驟是一步一步來進行的,而其中只要一個步驟沒法成功,那麼後續的步驟就徹底沒有辦法進行的!所以,要肯定每一的步驟都是成功的才能夠!舉個例子來講,萬一今天你在 ./configure 就不成功了,那麼就表示 Makefile沒法被建立起來,要知道,後面的步驟都是根據 Makefile 來進行的,既然沒法建立 Makefile,後續的步驟固然沒法成功羅!
另外,若是在 make 沒法成功的話,那就表示原始文件沒法被編譯成可運行檔,那麼 make install主要是將編譯完成的文件給他放置到文件系統中的,既然都沒有可用的運行檔了,怎麼進行安裝?因此羅,要每個步驟都正確無誤才能往下繼續作!此外,若是安裝成功,而且是安裝在獨立的一個目錄中,例如 /usr/local/packages 這個目錄中好了,那麼你就必需手動的將這個軟件的man page 給他寫入 /etc/man.config 裏面去。
舉例子: 安裝ntp
首先下載ntp: http://www.ntp.org/downloads.html #下載ntp
其次 解壓下載的ntp的Tarball,並參考README/INSTALL文件:
建議:
- 源碼要解壓到/usr/loca/src下;
- 軟件安裝到/usr/local/ntp目錄中;
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
裏面有詳細的安裝介紹。
而後 檢查configure支持參數,並實際生成makefile規則文件。
[ ntp.xxx ] ./configure --help | more #查詢可用參數有哪些
- #--prefix=PREFIX install architecture-independent files in PREFIX;
- #--prefix=/path 表示軟件要安裝到哪一個目錄去,若是沒有指定,則默認在/usr/local;
- #--enable-all-clocks + include all suitable non- PARSE clocks:
- #--enable-parse-clocks - include all suitable PARSE clocks:
- #特別要留意關於gcc的檢查,最後須要成功的創建Makefile文件才行
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
最後開始編譯與安裝:
- make clean;make
- make check
- make install
![](http://static.javashuo.com/static/loading.gif)
顯示安裝在/usr/local/src下
![](http://static.javashuo.com/static/loading.gif)
....