20.1 源碼包程序

2022-06-01 16:44 更新

本書(shū)第1章中曾經(jīng)講到,在RPM(紅帽軟件包管理器)技術(shù)出現(xiàn)之前,Linux系統(tǒng)運(yùn)維人員只能通過(guò)源碼包的方式來(lái)安裝各種服務(wù)程序,這是一件非常繁瑣且極易消耗時(shí)間與耐心的事情;而且在安裝、升級(jí)、卸載程序時(shí)還要考慮到與其他程序或函數(shù)庫(kù)的相互依賴(lài)關(guān)系,這就要求運(yùn)維人員不僅要掌握更多的Linux系統(tǒng)理論知識(shí)以及高超的實(shí)操技能,還需要有極好的耐心才能安裝好一個(gè)源碼軟件包??紤]到本書(shū)的讀者都是剛?cè)腴T(mén)或準(zhǔn)備入門(mén)的運(yùn)維新人,因?yàn)楸緯?shū)在前面的章節(jié)中一直都是采用Yum軟件倉(cāng)庫(kù)的方式來(lái)安裝服務(wù)程序。但是,現(xiàn)在依然有很多軟件程序只有源碼包的形式,如果我們只會(huì)使用Yum軟件倉(cāng)庫(kù)的方式來(lái)安裝程序,則面對(duì)這些只有源碼包的軟件程序時(shí),將充滿(mǎn)無(wú)力感,要么需要等到第三方組織將這些軟件程序編寫(xiě)成RPM軟件包之后再行使用,要么就只能尋找相關(guān)軟件程序的替代品了(而且替代軟件還必須具備RPM軟件包的形式)。由此可見(jiàn),如果運(yùn)維人員只會(huì)使用Yum軟件倉(cāng)庫(kù)來(lái)安裝服務(wù)程序,將會(huì)形成知識(shí)短板,對(duì)日后的運(yùn)維工作帶來(lái)不利。

本著不能讓自己的讀者在運(yùn)維工作中吃虧的想法,劉遄老師接下來(lái)會(huì)詳細(xì)講解如何使用源碼包的方式來(lái)安裝服務(wù)程序。

其實(shí),使用源碼包來(lái)安裝服務(wù)程序具有兩個(gè)優(yōu)勢(shì)。

源碼包的可移植性非常好,幾乎可以在任何Linux系統(tǒng)中安裝使用,而RPM軟件包是針對(duì)特定系統(tǒng)和架構(gòu)編寫(xiě)的指令集,必須嚴(yán)格地符合執(zhí)行環(huán)境才能順利安裝(即只會(huì)去“生硬地”安裝服務(wù)程序)。

使用源碼包安裝服務(wù)程序時(shí)會(huì)有一個(gè)編譯過(guò)程,因此可以更好地適應(yīng)安裝主機(jī)的系統(tǒng)環(huán)境,運(yùn)行效率和優(yōu)化程度都會(huì)強(qiáng)于使用RPM軟件包安裝的服務(wù)程序。也就是說(shuō),可以將采用源碼包安裝服務(wù)程序的方式看作是針對(duì)系統(tǒng)的“量體裁衣”。

一般來(lái)講,在安裝軟件時(shí),如果能通過(guò)Yum軟件倉(cāng)庫(kù)來(lái)安裝,就用Yum方式;反之則去尋找合適的RPM軟件包來(lái)安裝;如果是在沒(méi)有資源可用,那就只能使用源碼包來(lái)安裝了。

使用源碼包安裝服務(wù)程序的過(guò)程看似復(fù)雜,其實(shí)在歸納匯總后只需要4~5個(gè)步驟即可完成安裝。劉遄老師接下來(lái)會(huì)對(duì)每一個(gè)步驟進(jìn)行詳解。

需要提前說(shuō)明的是,在使用源碼包安裝程序時(shí),會(huì)輸出大量的過(guò)程信息,這些信息的意義并不大,因此本章會(huì)省略這部分輸出信息而不作特殊備注,請(qǐng)大家在具體操作時(shí)以實(shí)際為準(zhǔn)。

第1步:下載及解壓源碼包文件。為了方便在網(wǎng)絡(luò)中傳輸,源碼包文件通常會(huì)在歸檔后使用gzip或bzip2等格式進(jìn)行壓縮,因此一般會(huì)具有.tar.gz與.tar.bz2的后綴。要想使用源碼包安裝服務(wù)程序,必須先把里面的內(nèi)容解壓出來(lái),然后再切換到源碼包文件的目錄中:

    [root@linuxprobe ~]# tar xzvf FileName.tar.gz


    [root@linuxprobe ~]# cd FileDirectory

第2步:編譯源碼包代碼。在正式使用源碼包安裝服務(wù)程序之前,還需要使用編譯腳本針對(duì)當(dāng)前系統(tǒng)進(jìn)行一系列的評(píng)估工作,包括對(duì)源碼包文件、軟件之間及函數(shù)庫(kù)之間的依賴(lài)關(guān)系、編譯器、匯編器及連接器進(jìn)行檢查。我們還可以根據(jù)需要來(lái)追加--prefix參數(shù),以指定稍后源碼包程序的安裝路徑,從而對(duì)服務(wù)程序的安裝過(guò)程更加可控。當(dāng)編譯工作結(jié)束后,如果系統(tǒng)環(huán)境符合安裝要求,一般會(huì)自動(dòng)在當(dāng)前目錄下生成一個(gè)Makefile安裝文件。

    [root@linuxprobe ~]# ./configure --prefix=/usr/local/program

第3步:生成二進(jìn)制安裝程序。剛剛生成的Makefile文件中會(huì)保存有關(guān)系統(tǒng)環(huán)境、軟件依賴(lài)關(guān)系和安裝規(guī)則等內(nèi)容,接下來(lái)便可以使用make命令來(lái)根據(jù)Makefile文件內(nèi)容提供的合適規(guī)則編譯生成出真正可供用戶(hù)安裝服務(wù)程序的二進(jìn)制可執(zhí)行文件了。

    [root@linuxprobe ~]# make

第4步:運(yùn)行二進(jìn)制的服務(wù)程序安裝包。由于不需要再檢查系統(tǒng)環(huán)境,也不需要再編譯代碼,因此運(yùn)行二進(jìn)制的服務(wù)程序安裝包應(yīng)該是速度最快的步驟。如果在源碼包編譯階段使用了--prefix參數(shù),那么此時(shí)服務(wù)程序就會(huì)被安裝到那個(gè)目錄,如果沒(méi)有自行使用參數(shù)定義目錄的話(huà),一般會(huì)被默認(rèn)安裝到/usr/local/bin目錄中。

    [root@linuxprobe ~]# make install

第5步:清理源碼包臨時(shí)文件。由于在安裝服務(wù)程序的過(guò)程中進(jìn)行了代碼編譯的工作,因此在安裝后目錄中會(huì)遺留下很多臨時(shí)垃圾文件,本著盡量不要浪費(fèi)磁盤(pán)存儲(chǔ)空間的原則,可以使用make clean命令對(duì)臨時(shí)文件進(jìn)行徹底的清理工作。

    [root@linuxprobe ~]# make clean

估計(jì)有讀者會(huì)有疑問(wèn),為什么通常是安裝一個(gè)服務(wù)程序,源碼包的編譯工作(configure)與生成二進(jìn)制文件的工作(make)會(huì)使用這么長(zhǎng)的時(shí)間,而采用RPM軟件包安裝就特別有效率呢?其實(shí)原因很簡(jiǎn)單,在RHCA認(rèn)證的RH401考試中,會(huì)要求考生寫(xiě)一個(gè)RPM軟件包。劉遄老師會(huì)在本書(shū)的進(jìn)階篇中講到,其實(shí)RPM軟件包就是把軟件的源碼包和一個(gè)針對(duì)特定系統(tǒng)、架構(gòu)、環(huán)境編寫(xiě)的安裝規(guī)定打包成一起的指令集,因此為了讓用戶(hù)都能使用這個(gè)軟件包來(lái)安裝程序,通常一個(gè)軟件程序會(huì)發(fā)布多種格式的RPM軟件包(例如i386、x86_64等架構(gòu))來(lái)讓用戶(hù)選擇。而源碼包的軟件作者肯定希望自己的軟件能夠被安裝到更多的系統(tǒng)上面,能夠被更多的用戶(hù)所了解、使用,因此便會(huì)在編譯階段(configure)來(lái)檢查用戶(hù)當(dāng)前系統(tǒng)的情況,然后制定出一份可行的安裝方案,所以會(huì)占用很多的系統(tǒng)資源,需要更長(zhǎng)的等待時(shí)間。

出現(xiàn)問(wèn)題?大膽提問(wèn)!

因讀者們硬件不同或操作錯(cuò)誤都可能導(dǎo)致實(shí)驗(yàn)配置出錯(cuò),請(qǐng)耐心再仔細(xì)看看操作步驟吧,不要?dú)怵H~

Linux技術(shù)交流請(qǐng)加A群:560843(滿(mǎn)),B群:340829(推薦),C群:463590(推薦),點(diǎn)此查看全國(guó)群。

*本群特色:通過(guò)口令驗(yàn)證確保每一個(gè)群?jiǎn)T都是《Linux就該這么學(xué)》的讀者,答疑更有針對(duì)性,不定期免費(fèi)領(lǐng)取定制禮品。

以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)