官术网_书友最值得收藏!

5.1 源碼的安裝方式

由于Linux系統(tǒng)中使用的絕大多數(shù)軟件都是開(kāi)源軟件,軟件作者在發(fā)布軟件時(shí)直接提供的就是軟件的源代碼。用戶在取得應(yīng)用軟件的源碼文件后,可以根據(jù)自身需求對(duì)軟件進(jìn)行修改或定制,然后在自己的系統(tǒng)上重新編譯,即可生成能在該系統(tǒng)上執(zhí)行的程序文件。通過(guò)源碼安裝,用戶可以獲得最新的應(yīng)用程序,定制更靈活、豐富的功能,而且使軟件可以跨越計(jì)算機(jī)平臺(tái),在所有版本的Linux系統(tǒng)中使用。但是源碼安裝方式過(guò)于復(fù)雜,耗時(shí)長(zhǎng),對(duì)用戶的軟件開(kāi)發(fā)能力要求也比較高。源碼安裝方式的特點(diǎn)可概括如下。

Linux系統(tǒng)軟件大都是開(kāi)源軟件,這些軟件總是以源碼形式最先發(fā)布。下載應(yīng)用程序的最新源碼并編譯安裝,可在程序功能、安全補(bǔ)丁等方面得到及時(shí)更新。

對(duì)于RPM格式封裝的應(yīng)用程序,在編譯源代碼程序時(shí)綁定功能也一并安裝到Linux主機(jī)上,可能造成安全隱患。RPM軟件包的更新并沒(méi)有源代碼,而通過(guò)對(duì)程序源代碼進(jìn)行重新配置并編譯安裝后,可以定制更靈活、更豐富的功能。

當(dāng)需要對(duì)現(xiàn)有的程序源代碼進(jìn)行適當(dāng)修改,以便增加新的功能時(shí),必須釋放出該軟件的源代碼,進(jìn)行修改后再重新編譯安裝。

源碼安裝軟件一般由以下幾個(gè)步驟組成:下載解壓源碼、分析安裝平臺(tái)環(huán)境(ifconfigure)、編譯安裝軟件(make、make install)等,下面分別來(lái)介紹。

5.1.1 下載解壓源碼

Linux下軟件的源碼一般都是C或者C++語(yǔ)言編寫(xiě)的,并且都會(huì)在軟件的官方網(wǎng)站上提供源碼包下載,例如apache開(kāi)源項(xiàng)目的官方網(wǎng)站為http://www.apache.org。此外,網(wǎng)上的很多開(kāi)源社區(qū)也提供一些常用軟件的源碼供下載。源碼被打包成壓縮文件,常見(jiàn)的源碼打包壓縮格式有.tar.gz、.tar.baz2等。可以先從網(wǎng)站上下載源碼文件,然后再傳到所在的Linux系統(tǒng)下。如果Linux系統(tǒng)處于聯(lián)網(wǎng)狀態(tài)下,也可以直接在系統(tǒng)內(nèi)通過(guò)wget之類(lèi)的下載命令將源碼壓縮包直接下載到Linux系統(tǒng)中。

下載完成后,把相應(yīng)的軟件包解壓縮即可。針對(duì)下載軟件包的不同,在使用不同的方法進(jìn)行解壓。解壓完畢后進(jìn)入解壓生成的目錄中,在這個(gè)目錄下,一般都存在一個(gè)REDAME文件,這個(gè)文本文件非常重要,它詳細(xì)介紹了這個(gè)軟件所能完成的功能、授權(quán)許可、安裝需求、安裝注意事項(xiàng)、安裝方式等。由于Linux各個(gè)版本的差異以及安裝環(huán)境的不同,軟件的安裝方式也不盡相同,所以在安裝軟件前,一定要事先閱讀這個(gè)README文件,從而確保安裝的正確性。

5.1.2 分析安裝平臺(tái)環(huán)境

在軟件包解壓完畢之后,進(jìn)入源碼目錄,一般都會(huì)有configure和README這兩個(gè)文件。README是對(duì)軟件的介紹和安裝說(shuō)明。Linux下軟件的安裝受到操作系統(tǒng)安裝環(huán)境的影響,比如某些軟件在安裝或者運(yùn)行過(guò)程中需要調(diào)用操作系統(tǒng)本身的庫(kù)文件,或者需要運(yùn)行系統(tǒng)的某個(gè)工具等,但是如果系統(tǒng)中不存在這個(gè)庫(kù)文件或者這個(gè)工具,那么安裝或者運(yùn)行軟件就會(huì)失敗。

為了避免這類(lèi)問(wèn)題的出現(xiàn),在安裝軟件前需要分析操作系統(tǒng)環(huán)境,檢測(cè)當(dāng)前系統(tǒng)是否擁有安裝軟件所需的所有文件和工具,如果系統(tǒng)缺少某個(gè)文件,就給出提示,直到滿足軟件的所有需求為止。這就是configure文件的功能。configure文件一般是個(gè)可執(zhí)行文件,可以在當(dāng)前目錄下直接輸入“./configure”進(jìn)行軟件安裝的環(huán)境測(cè)試,如果提示缺少某些安裝包,就需要進(jìn)行安裝,直到測(cè)試通過(guò)。通常,源碼安裝都需要GCC或者CC編譯器,這些編譯器一般在安裝系統(tǒng)時(shí)定制安裝包中的開(kāi)發(fā)工具選項(xiàng)下,其實(shí)這也是第2章安裝Linux系統(tǒng)中要求選擇開(kāi)發(fā)工具包的原因所在。

此外,在執(zhí)行configure分析軟件需求時(shí),還可以在“./configure”后面加上軟件的安裝路徑以及安裝所需的模塊等選項(xiàng),來(lái)定制用戶需要的軟件功能。

5.1.3 編譯安裝軟件

在驗(yàn)證軟件安裝環(huán)境后,正式進(jìn)入軟件的編譯步驟。在進(jìn)行編譯前,首先要了解關(guān)于編譯的一些基礎(chǔ)知識(shí)。在Linux系統(tǒng)下,make是經(jīng)常用到的編譯命令。無(wú)論是安裝軟件還是項(xiàng)目開(kāi)發(fā),都會(huì)經(jīng)常用到編譯安裝命令,也就是make和make install命令。對(duì)于一個(gè)包含很多源文件的應(yīng)用程序,使用make和makefile工具可以簡(jiǎn)單快速地解決各個(gè)源文件之間復(fù)雜的依賴關(guān)系,同時(shí),make工具還可以自動(dòng)完成所有源碼文件的編譯工作,并且可以只對(duì)上次編譯后修改過(guò)的文件進(jìn)行增量編譯。因此,熟練掌握了make和makefile工具之后,源碼安裝軟件就變得像Windows下安裝軟件一樣簡(jiǎn)單。

make工具最主要的功能是通過(guò)makefile文件來(lái)實(shí)現(xiàn)的,makefile文件是按照某種語(yǔ)法來(lái)進(jìn)行編寫(xiě)的,文件中定義了各個(gè)源文件之間的依賴關(guān)系,說(shuō)明了如何編譯源文件及生成可執(zhí)行文件,通過(guò)描述各個(gè)源程序之間的關(guān)系來(lái)使make工具自動(dòng)完成編譯工作。在Linux系統(tǒng)下,一般習(xí)慣用Makefile替代makefile文件,在configure執(zhí)行通過(guò)測(cè)試后,就會(huì)在當(dāng)前目錄下生成這個(gè)文件,一般情況下在命令行輸入make時(shí),make命令會(huì)默認(rèn)去尋找當(dāng)前目錄下的Makefile文件。如果需要使用其他文件,就要在make命令選項(xiàng)后指定相應(yīng)的文件名。例如設(shè)定編譯規(guī)則文件為make_file,就需要使用以下命令來(lái)指定。

  [root@WEBServer ~]#make -f make_file

下面通過(guò)實(shí)例講解Makefile的編寫(xiě)原則和內(nèi)容。

【例5-1】 test程序由三個(gè)源文件file1.c、file2.c、file3.c及庫(kù)文件LS編譯生成,這三個(gè)源文件還分別包含了頭文件1.h、2.h和3.h。通常,C編譯器將會(huì)輸出三個(gè)目標(biāo)文件file1.o、file2.o和file3.o。假定file1.c和file3.c都要聲明用到一個(gè)apcs文件,但是file2.c不用,也就是在file1.c和file3.c文件中都有類(lèi)似#include "apcs"的聲明。

下面這段代碼就是對(duì)test程序的描述。

  1: #It is an example for describing makefile
  2: test: file1.o file2.o file3.o
  3: cc file1.o file2.o file3.o -LS -o test
  4: file1.o: file1.c 1.h apcs
  5: gcc -c file1.c
  6: file3.o: file3.c 3.h apcs
  7: gcc -c file3.c
  8: file2.o: file2.c c.h
  9: gcc -c file2.c

這個(gè)對(duì)test程序的描述文檔其實(shí)就是一個(gè)Makefile文件,其中,第一行為注釋行,第二行指定test程序由file1.o、file2.o和file3.o鏈接生成,第三行描述了如何從test所依賴的文件來(lái)建立可執(zhí)行文件,接下來(lái)的第四行、第六行、第八行定義了三個(gè)目標(biāo)文件以及它們依賴的.c、.h和apcs文件,第五行、第七行、第九行則定義了如何從目標(biāo)依賴的文件生成可執(zhí)行文件。

在了解Makefile文件結(jié)構(gòu)后,用戶就可以控制編譯的選項(xiàng),定制自己所需的軟件功能。接下來(lái),只需在命令行輸入make命令,即可進(jìn)入編譯階段,根據(jù)軟件源程序的大小和系統(tǒng)的硬件配置進(jìn)行編譯。編譯所需的時(shí)間不定。編譯完畢,會(huì)在當(dāng)前目錄以及子目錄下生成相應(yīng)的可執(zhí)行文件。接下來(lái)就進(jìn)入最后的安裝軟件階段,在命令行輸入make install命令,開(kāi)始安裝軟件,安裝進(jìn)程首先創(chuàng)建安裝目錄,如果沒(méi)有指定安裝目錄,安裝程序默認(rèn)在系統(tǒng)的/usr/local目錄下創(chuàng)建安裝目錄,然后將相應(yīng)的文件和可執(zhí)行程序從源碼目錄復(fù)制到安裝目錄下,這樣安裝就完成了。具體的,編譯安裝步驟如下。

(1)解壓縮包——tar命令

使用tar命令解開(kāi)壓縮包,釋放出源代碼文件。

(2)配置——./configure命令

該過(guò)程主要是生成Makefile文件。配置工作通常由源代碼目錄中的configure腳本文件完成,配置結(jié)果將保存到源碼目錄中的Makefile文件中。若在配置過(guò)程中出現(xiàn)錯(cuò)誤,通常是缺少相關(guān)依賴軟件包所致,一般只需根據(jù)提示安裝相應(yīng)軟件即可。“./configure”表示執(zhí)行當(dāng)前目錄下的configure腳本文件,不同應(yīng)用程序其配置參數(shù)會(huì)存在區(qū)別,具體配置參數(shù)可在源代碼目錄中執(zhí)行“./configure –help”命令查看。但是有一個(gè)“--prefix”參數(shù)卻是大多數(shù)開(kāi)源軟件所通用的,該配置參數(shù)用于指定軟件包安裝的目標(biāo)文件夾。配置界面如圖5-1、圖5-2所示。

圖5-1 配置./configure界面1

圖5-2 配置./configure界面2

(3)編譯——make命令

執(zhí)行make命令將源代碼文件轉(zhuǎn)變?yōu)槎M(jìn)制可執(zhí)行程序。編譯的過(guò)程主要是根據(jù)makefile文件中的配置信息,將源代碼編譯、連接成可執(zhí)行程序。

(4)檢測(cè)——make test/make check命令

顧名思義,這一步就是對(duì)上一步make命令的檢查。要確保make是沒(méi)有錯(cuò)誤的,也就是這一步的test、check要全部是通過(guò),error為0。這一步可省略。

(5)安裝——make install命令

編譯完成后,就可以執(zhí)行“make install”命令將軟件的執(zhí)行程序、配置文件等相關(guān)文件復(fù)制到Linux系統(tǒng)中了,即應(yīng)用程序最后的“安裝”過(guò)程。如圖5-3所示為編譯安裝ntfs- 3g包。

圖5-3 編譯安裝ntfs-3g

5.1.4 源碼編譯安裝程序的卸載

如果要重新安裝源碼編譯安裝包,以上一節(jié)編譯安裝的ntfs-3g為例,若打算重新安裝,則需要先刪除,直接運(yùn)行下面的命令就可以了:

  #make uninstall
  #make clean

如果是編譯過(guò)程出錯(cuò),要重新編譯,命令如下:

  make clean

然后再執(zhí)行如下命令即可:

  ./configure
  make && make install

5.1.5 源碼安裝實(shí)例

通常的安裝方法是在安裝包的目錄下執(zhí)行以下命令。

  gunzip soft1.tar.gz;
  cd soft1
  #. /configure         #配置
  make                  #調(diào)用make
  make install          #安裝源代碼
  #make clean                   #刪除安裝時(shí)產(chǎn)生的臨時(shí)文件
  #make uninstall               #卸載軟件

【例5-2】在Linux下以源碼安裝方式安裝Apache Http server。

(1)下載及解壓apache源碼

  [root@WEBServer~]#mkdir /apache               #在根目錄下創(chuàng)建一個(gè)apache目錄
  [root@WEBServer~]#cd /apache                  #切換到apache目錄
  [root@WEBServer apache]#wget \                #下載apache源碼
  >http://apache.mirror.phpchina.com/httpd/httpd-2.2.9.tar.bz2
  [root@WEBServer apache]#tar -jxvf httpd-2.2.9.tar.bz2 #解壓apache源碼
  [root@WEBServer apache]#ls            #顯示解壓結(jié)果
  httpd-2.2.9   httpd-2.2.9.tar.bz2

(2)測(cè)試安裝環(huán)境

  [root@WEBServer apache]#cd httpd-2.2.9 #切換到httpd-2.2.9目錄下
  [root@WEBServer httpd-2.2.9]#./configure  --prefix=/opt/apache2.2.9\
  >--enable-so\
  >--enable-mods-shared=most\
  >--enable-proxy-balancer=shared\
  >--enable-proxy-http=shared\
  >--enable-proxy-ajp\
  >--enable-rewrite

上面的代碼中指定apache的安裝目錄為/opt/apache2.2.9,同時(shí)指定了需要編譯的apache模塊。

下面分別介紹這些模塊代表的含義(更詳細(xì)的介紹參看apache說(shuō)明文檔)。

--enable-so選項(xiàng):表示使apache支持DSO模式。

--enable-mods-shared=most選項(xiàng):表示動(dòng)態(tài)編譯大部分常用模塊,當(dāng)然也可以有選擇地加載一些模塊。most的意思是只包含通常用的模塊,并且以動(dòng)態(tài)加載模式加載。

--enable-proxy-balancer=shared選項(xiàng):表示使apache支持負(fù)載均衡功能,即動(dòng)態(tài)編譯apache的負(fù)載均衡模塊。

--enable-proxy-http=shared選項(xiàng):表示動(dòng)態(tài)編譯apache的http代理模塊。

--enable-proxy-ajp選項(xiàng):表示動(dòng)態(tài)編譯apache的proxy-ajp模塊。

--enable-rewrite選項(xiàng):表示使apache支持地址重寫(xiě)功能,即動(dòng)態(tài)編譯apache的rewrite模塊。

(3)編譯安裝軟件

  [root@WEBServer httpd-2.2.9]#make
  [root@WEBServer httpd-2.2.9]#make install

安裝完畢后,apache被安裝到/opt/apache2.2.9下,接下來(lái)就可以使用apache軟件了。

【例5-3】將Linux圖形中文軟件fcitx源碼安裝到/opt/fcitx目錄中。

完整的安裝步驟如下:

  [root@localhost fcitx]# tar jxvf fcitx-3.2-050827.tar.bz2
  [root@localhost fcitx]#cd fcitx
  [root@localhost fcitx]# ./configure --prefix=/opt/fcitx
  [root@localhost fcitx]# make
  [root@localhost fcitx]# make install

調(diào)用fcitx命令如下。

  [root@localhost]#/opt/fcitx/bin/fcitx

如果希望只要執(zhí)行fcitx命令就能調(diào)用fcitx,可配置環(huán)境變量,或者在/usr/bin中增加一個(gè)fcitx的鏈接。

主站蜘蛛池模板: 诏安县| 乃东县| 吉木乃县| 犍为县| 东山县| 山阴县| 扬州市| 巴林左旗| 河东区| 根河市| 四子王旗| 洮南市| 东乡族自治县| 崇仁县| 华安县| 夏津县| 富平县| 蓬莱市| 依安县| 康乐县| 榆社县| 峨眉山市| 北宁市| 新平| 孟津县| 呼玛县| 棋牌| 宁都县| 英吉沙县| 闸北区| 和平县| 博乐市| 大同县| 福建省| 兴文县| 博客| 大渡口区| 怀安县| 永新县| 荥阳市| 湖口县|