細說Linux下軟體包的安裝與管理

zk1878發表於2011-04-12

原文:http://ixdba.blog.51cto.com/2895551/537892

一 原始碼安裝方式
      由於linux作業系統開放原始碼,因而在其上安裝的軟體大部分也都是開源軟體,例如apache、tomcat、php等軟體。開源軟體基本都提供原始碼下載,原始碼安裝的方式;原始碼安裝的好處是使用者可以自己定製軟體功能,安裝需要的模組,不需要的功能可以不用安裝,此外,使用者還可以自己選擇安裝路徑,方便管理,解除安裝軟體也很方便,只需刪除對應的安裝目錄即可。沒有windows所謂的登錄檔之說。
原始碼安裝軟體一般有以下幾個步驟組成:下載解壓原始碼、分析安裝平臺環境(ifconfigure)、編譯安裝軟體(make,make install)。下面我們分別介紹。
 

1.1 下載解壓原始碼
      linux下軟體的原始碼一般都是C或者C++語言編寫的,並且都會在軟體的官方網站上提供原始碼包下載,例如apache開源專案的官方網站為http://www.apache.org,此外在網上的很多開源社群一般也提供一些常用軟體的原始碼下載,原始碼都打包成壓縮檔案,常見的原始碼打包壓縮格式有“.tar.gz”、“.tar.baz2”等。我們可以從網站上首先下載原始碼檔案,然後在傳到所在的linux系統下,如果你的linux系統處於聯網狀態下,也可以直接在系統內通過wget之類的下載命令將原始碼包直接下載到 linux系統下。
下載完成,把相應的軟體解包即可,針對下載軟體包的不同,使用不同的方法進行解壓,解壓完畢後進入解壓生成的目錄中,在這個目錄下,一般都存在一個 REDAME檔案,這個文字檔案非常重要,它詳細的介紹了這個軟體所能完成的功能、授權許可、安裝需求、安裝注意事項、安裝方式等等,由於linux各個版本的差異,以及安裝環境的不同,軟體的安裝方式也不盡相同,所以在安裝軟體前,一定要事先閱讀這個README檔案,確保安裝的正確性。


1.2 分析安裝平臺環境
      在軟體包解壓完畢之後,我們進入原始碼目錄,一般都會存在configure和README這麼兩個檔案,README就是上面我們講到的,是對軟體的介紹和安裝說明;linux下軟體的安裝受到作業系統安裝環境的影響,比如某些軟體在安裝或者執行過程中需要呼叫作業系統本身的庫檔案,或者需要執行系統的某個工具等等,但是系統中不存在這個庫檔案或者這個工具沒有安裝,那麼安裝或者執行軟體就會失敗。
為了避免這個問題的出現,在安裝軟體的時候就需要分析作業系統環境,檢測當前系統是否擁有安裝軟體所需的所有檔案和工具,如果系統缺少某個檔案,就給出提示,直到滿足軟體的所有需求為止。這個就是configure檔案的功能,configure檔案一般是個可執行檔案,可以在當前目錄下直接輸入 “./configure”進行軟體安裝的環境測試,如果提示缺少某些安裝包,就需要進行安裝,直到測試通過。通常的,原始碼安裝都需要GCC或者CC編譯器,這些編譯器一般在安裝系統時定製安裝包中的開發工具選項下,其實這也是我們在第二章安裝linux系統中要求選擇開發工具包的原因所在。
      此外,在執行configure分析軟體需求時,還可以在“./configure”後面加上軟體的安裝路徑以及安裝所需的模組等等一些選項,來定製使用者需要的軟體功能。


1.3 編譯安裝軟體
      在驗證軟體安裝環境後,正式進入軟體的編譯步驟,在進行編譯前,首先了解下關於編譯的一些基礎知識。
      在linux系統下,make是我們經常用到的編譯命令,無論是安裝軟體還是專案開發,都會經常用到編譯安裝命令,也就是make和make install,對於一個包含很多原始檔的應用程式,使用make和makefile工具可以簡單快速的解決各個原始檔之間複雜的依賴關係,同時,make工具還可以自動完成所有原始碼檔案的編譯工作,並且可以只對上次編譯後修改過的檔案進行增量編譯,因此,熟練掌握了make和makefile 工具之後,原始碼安裝軟體就變的像windows下安裝軟體一樣簡單。
Makefile檔案
      make工具最主要的功能就是通過makefile檔案來實現的,makefile檔案是按照某種語法來進行編寫的,檔案中定義了各個原始檔之間的依賴關係,並說明了如何編譯原始檔並生成可執行檔案,它通過描述各個源程式之間的關係讓make工具自動完成編譯工作。
      在linux系統下,習慣用Makefile替代makefile檔案,我們在執行configure通過後,就會在當前目錄下生成這個檔案,一般情況下在命令列輸入make時,make命令會預設去尋找當前目錄下的Makefile檔案,如果我們用其它檔案作為makefile,就要在make命令選項後指定makefile檔案,例如我們設定編譯規則檔案為make_file,就需要使用以下命令指定:
[root@WEBServer ~]#make -f make_file
下面我們通過舉例瞭解下Makefile的編寫原則和內容。
      例如有一個test程式,有三個原始檔file1.c、file2.c、file3.c以及庫檔案LS編譯生成,這三個原始檔還分別包含了自己的標頭檔案 1.h、2.h、3.h。通常,C編譯器將會輸出三個目標檔案file1.o、file2.o、file3.o。假定file1.c和file3.c都要宣告用到一個apcs的檔案,但是file2.c不用,也就是在file1.c和file3.c檔案中都有類似“#include “apcs””的宣告。
下面這段程式碼就是對test程式的描述:
  1:#It is a 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
這個描述文件其實就是一個makefile檔案,第一行為註釋行,第二行指定test程式有file1.o、file2.o、file3.o連結生成,第三行描述瞭如何從test所依賴的檔案建立可執行檔案,接下來的第四、六、八行定義了三個目標檔案和它們依賴的“.c”、“.h”和“apcs”檔案。剩下的第五、七、九行定義瞭如何從目標依賴的檔案生成可執行檔案。
在瞭解Makefile檔案結構後,我們就可以控制編譯的選項,定製自己所需的軟體功能。
接下來,我們只需在命令列輸入make命令,即可進入編譯階段,根據軟體源程式的大小和系統的硬體配置,編譯時間不定,編譯完畢,會在當前目錄以及子目錄下生成相應的可執行檔案,接下來就進入最後的安裝軟體階段,在命令列輸入make install命令,開始安裝軟體,安裝程式會首先建立安裝目錄,如果我們沒有指定安裝的目錄,安裝程式預設會安裝在系統的/usr/local目錄下建立安裝目錄,然後將相應的檔案和可執行程式從原始碼目錄拷貝到安裝目錄下,這樣安裝就完畢了。

1.4 原始碼安裝Apache Http server
      下面我們通過原始碼安裝apache,例項講解linux下原始碼的安裝方式。
1. 下載解壓apache原始碼
[root@WEBServer~]#mkdir /apache  #在根目錄下建立一個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  #顯示解壓結果
httpd-2.2.9   httpd-2.2.9.tar.bz2
2. 測試安裝環境
[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,同時指定需要編譯的apache模組。
下面分別介紹這些模組代表的含義,更詳細的請參看apache文件。
 --enable-so選項:表示讓 Apache 可以支援DSO模式,這裡採用的是 Apache2.0以後的語法。如果你的Apache 是1.3版本,應改為“--enable-module=so”。
 --enable-mods-shared=most選項:表示動態編譯大部分常用的模組,當然,也可以有選擇的載入一些模組,most意思是隻包含通常用的模組,並且以動態載入模式載入。如果用的是 Apache1.3, 改為“--enable-shared=max”即可。
 --enable-proxy-balancer=shared選項:表示讓apache支援負載均衡功能,即動態的編譯apache的負載均衡模組。
 --enable-proxy-http=shared選項:表示動態編譯apache的http代理模組。
 --enable-proxy-ajp選項:表示動態編譯apache的proxy-ajp模組。
 --enable-rewrite選項:讓apache支援地址重寫功能,即動態編譯apache的rewrite模組。
3.編譯安裝軟體
[root@WEBServer httpd-2.2.9]#make
[root@WEBServer httpd-2.2.9]#make install
安裝完畢,apache被安裝到/opt/apache2.2.9下,接下來我們就可以使用apache軟體了。

二 RPM包方式安裝
2.1 RPM包管理工具介紹
      RPM是Red Hat Package Manager的縮寫,本意就是Redhat軟體包管理,是最先由Redhat公司開發出來的linux下軟體包管理工具,由於這種軟體管理方式非常方便,逐漸被其它linux發行商所借用,現在已經成為linux平臺下通用的軟體包管理方式,例如Fedora 、Redhat、suse、Mandrake等主流linux發行版本都預設採用了這種軟體包管理方式。
      RPM包管理類似於windows下的“新增/刪除程式”但是功能卻比“新增/刪除程式”強大很多。在Linux的系統安裝光碟中,有很多以“.rpm” 結尾的軟體包,這些包檔案就是我們所說的RPM檔案。每個RPM檔案中包含了已經編譯好的二進位制可執行檔案,其實就是將軟體原始碼檔案進行編譯安裝,然後進行封裝,就成了RPM檔案,類似與windows安裝包中的“.exe”檔案。此外RPM檔案中還包含了執行可執行檔案所需的其它檔案,這點也和 windows下的軟體包類似,windows程式的安裝包中,除了“exe”可執行檔案,還有其它依賴執行的檔案。
      RPM包管理方式的優點是:安裝簡單方便,因為軟體已經編譯完成打包完畢,安裝只是個驗證環境和解壓的過程。此外通過RPM方式安裝的軟體,RPM工具都會記錄軟體的安裝資訊,這樣方便了軟體日後的查詢,升級和解除安裝。
RPM包管理方式的缺點是對作業系統環境的依賴很大,它要求RPM包的安裝環境必須與RPM包封裝時的環境相一致或相當。還需要滿足安裝時與系統某些軟體包的依賴關係,例如需要安裝A軟體,但是A軟體需要系統有B和C軟體的支援,那麼就必須先安裝B和C軟體,然後才能安裝A軟體。這也是我們在用RPM包方式安裝軟體需要特別注意的地方。


2.2 RPM包種類和命令
      RPM包的封裝格式一般有兩種,分別是RPM和SRPM,SRPM包也是一種RPM,但是它包含了編譯時的原始碼檔案和一些編譯指定的引數檔案,因而在使用的時候需要重新進行編譯,通常SRPM對應的RPM檔案類似與“xxxxxxxx.src.rpm”格式。
下面我們講述一下兩種RPM包對應的檔名含義:
例如一個rpm檔案:nxserver-2.1.0-22.i386.rpm
其中“nxserver”表示軟體的名稱,“2.1.0”表示軟體的版本號,“22”表示軟體更新發行的次數,“i386”表示適合硬體的平臺,最後的 “.rpm”是rpm軟體包的標識。
      一般的RPM封裝包的命名格式都有這五個部分組成,由於SRPM包是需要編譯才能使用的,因此沒有上面顯示項中對應的平臺選項,其它與RPM包命令格式完全一樣。
      對於RPM包的五個組成部分,我們下面介紹一些它們更詳細的含義和異同:
軟體名稱:是對軟體包的標識;
軟體的版本號:每個軟體都有自己的版本號,版本號可以說明軟體從開始到現在發行了多少了,軟體是否是新的等等。
軟體更新發行次數:由於一個版本的軟體在發行後可能出現bug或者漏洞,那麼就需要修復和重新封裝,每修復封裝一次,軟體的名稱就要更新一次。
適合的硬體平臺:由於RPM包要在各種不同的linux硬體平臺上使用,但是由於每個不同的硬體平臺RPM打包封裝的引數也各不相同,這樣就出現了針對 i386、i686、x86_64、noarch等的平臺名稱標識。
i386指這個軟體包適用於intel 80386以後的x86架構的計算機。
i686指這個軟體包適用於intel 80686以後(奔騰pro以上)的x86架構的計算機。
x86_64指這個軟體包適用於x86架構64為處理器的計算機。
noarch表示這個軟體包與硬體構架無關,可以通用。
      需要注意的是:i386軟體包可以在任意x86平臺下使用,無論是i686或是x86_64的機器,相反,i686的軟體包不一定能在i386硬體上面使用,由於i686軟體包一般都是對cpu進行了優化,所有具有向後相容性,但是不具有先前相容的特性。
RPM軟體包標識:RPM軟體包標識用於指明此檔案是rpm格式的檔案,一般有兩種字尾標識,分別是以“.rpm”結尾和以“.src.rpm”結尾。


2.3 RPM工具的使用
      RPM工具的使用分為安裝、查詢、驗證、更新、刪除等操作,下面我們分別介紹。
1. 安裝軟體包
命令格式:rpm -i [輔助選項] file1.rpm file2.rpm…..fileN.rpm 
主選項說明:
-i:install的意思,就是安裝軟體。也可以使用“--install”。
引數說明:file1.rpm file2.rpm…..filen.rpm是指定將要安裝RPM包的檔名,可以多個檔案一起安裝。
輔助選項說明:這裡的選項很多,我們只列出常用選項,詳細解釋如下:
 -v:顯示附加資訊。
 -h:安裝時輸出標記“#”。
 --test:只對安裝進行測試,並不實際安裝。
 --nodeps:不檢查軟體之間的依賴關係。加入此選項可能會導致軟體不可用。
 --force:忽略軟體包以及軟體衝突。
 --replacepkgs:強制重新安裝已經安裝的軟體包。
 --prefix:將軟體包安裝到由 指定的路徑下。
 --percent:以百分比的形式輸出安裝的進度。
 --excludedocs:不安裝軟體包中的說明檔案
 --includedocs:安裝軟體包,包含說明檔案。
舉例:
(1)我們安裝ipvsadm-1.24-6.i386.rpm,使用下面命令:
[root@localhost ~]# rpm -ivh ipvsadm-1.24-6.i386.rpm
執行結果如下:
warning:ipvsadm-1.24-6.i386.rpm:V3 DSA signature: NOKEY, key ID 44e181
Preparing...    ############################ [100%]
   1:ipvsadm  ############################[100%]
(2)下面操作顯示了安裝gcc-3.4.4-2.i386.rpm包過程,在安裝過程中,出現了安裝包依賴問題,我們的處理過程是這樣的:
[root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm
執行結果如下:
warning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
error: Failed dependencies:
        glibc-devel >= 2.2.90-12 is needed by gcc-3.4.4-2.i386
    Suggested resolutions:
        glibc-devel-2.3.4-2.13.i386.rpm
這裡顯示在安裝gcc編譯器之前需要安裝glibc-devel包的支援,這個包詳細的版本是glibc-devel- 2.3.4-2.13.i386.rpm,因此,我們需要先安裝這個軟體包。
[root@server ~]# rpm -ivh glibc-devel-2.3.4-2.13.i386.rpm
執行結果如下:
warning: glibc-devel-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
error: Failed dependencies:
        glibc-headers is needed by glibc-devel-2.3.4-2.13.i386
        glibc-headers = 2.3.4-2.13 is needed by glibc-devel-2.3.4-2.13.i386
    Suggested resolutions:
        glibc-headers-2.3.4-2.13.i386.rpm
這裡又出現依賴關係,上面的錯誤提示是說安裝glibc-devel包需要先安裝glibc-headers軟體包,並且給出了安裝建議版本,於是我們就先安裝glibc-headers包。
[root@server ~]# rpm -ivh glibc-headers-2.3.4-2.13.i386.rpm
執行結果如下:
warning: glibc-headers-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
error: Failed dependencies:
        kernel-headers is needed by glibc-headers-2.3.4-2.13.i386
        kernel-headers >= 2.2.1 is needed by glibc-headers-2.3.4-2.13.i386
    Suggested resolutions:
        glibc-kernheaders-2.4-9.1.98.EL.i386.rpm
依然報錯,資訊與上面相同,意思是說在安裝kernel-headers包之前,需要glibc-kernheaders包的支援,並且給出了建議版本,我們先安裝glibc-kernheaders包。
[root@server ~]# rpm -ivh glibc-kernheaders-2.4-9.1.98.EL.i386.rpm
執行結果如下: 
warning: glibc-kernheaders-2.4-9.1.98.EL.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing... ########################### [100%]
   1:glibc-kernheaders ###################### [100%]
這次依賴終於解除了,按照相反的順序開始安裝,下面顯示安裝步驟。
[root@server ~]# rpm -ivh glibc-headers-2.3.4-2.13.i386.rpm      
warning: glibc-headers-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing...  ########################### [100%]
   1:glibc-headers  ######################## [100%]
[root@server ~]# rpm -ivh glibc-devel-2.3.4-2.13.i386.rpm
warning: glibc-devel-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing... ########################### [100%]
   1:glibc-devel  ######################## [100%]
[root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm
warning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing...  ############################## [100%]
   1:gcc      ########################### [100%]
(3) 在上例中,如果我們在安裝gcc第一步加入“--nodeps”引數,gcc由於不檢查依賴關係,即可安裝成功:
[root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm –nodeps
執行結果如下:
warning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing...  ############################## [100%]
   1:gcc      ########################### [100%]
這裡加入了忽略依賴關係的引數,雖然可以安裝成功,但是我們不建議這麼做,因為這樣安裝的軟體很有可能是不可用的,或者使用過程中出現問題,除非我們知道忽略依賴關係對軟體本身沒有影響的話,才可使用此引數。
(4)安裝xxxxxx.src.rpm的方法,這裡我們以my-package.src.rpm名稱為例,在redhat linux i386平臺下進行介紹,常用的有兩種方法,操作步驟如下:
方法一:
1)執行rpm -i my-package.src.rpm
2) cd /usr/src/redhat/SPECS
3) rpmbuild -bp my-package.specs 一個和軟體包同名的specs檔案。
4) cd /usr/src/redhat/BUILD/my-package/ 一個軟體包同名的目錄
5) ./configure 這一步和編譯普通的原始碼軟體一樣,可以加上引數
6) make
7) make install
方法二:
1)執行rpm -i my-package.src.rpm
2)cd /usr/src/redhat/SPECS
前兩步和方法一相同
3)rpmbuild -bb my-package.specs 一個和軟體包同名的specs檔案。
此時,在/usr/src/redhat/RPM/i386/ (這裡的路徑根據具體包的不同,也可能是i686、noarch等等)
在這個目錄下,有一個或者兩個新的rpm包,這個是編譯好的二進位制檔案。
4)執行rpm -i new-package.rpm,安裝完成。
例如:利用xxxx.src.rpm格式的包安裝rsh軟體,操作方法如下:
[root@localhost ~]# rpm -i rsh-0.17-25.3.src.rpm
[root@localhost ~]#cd /usr/src/redhat/SPECS/
rsh.spec
[root@localhost SPECS]#rpmbuild  -bb rsh.spec
[root@localhost SPECS]# cd /usr/src/redhat/RPMS/i386/
rsh-0.17-25.3.i386.rpm 
rsh-debuginfo-0.17-25.3.i386.rpm 
rsh-server-0.17-25.3.i386.rpm
[root@localhost i386]#rpm -ivh rsh-*
Preparing...  ############################ [100%]
   1:rsh-server  ########################## [ 33%]
   2:rsh   ############################## [ 67%]
   3:rsh-debuginfo  ######################## [100%]
[root@localhost i386]#


2. 查詢軟體包
命令格式:rpm -q [輔助選項] package1……packageN
主選項說明:
-q:query的意思,也可以使用“--query”。
引數說明:package1……packageN為已經安裝的軟體包名稱。
輔助選項說明:
 -f:查詢作業系統中某個檔案屬於哪個對應的rpm軟體包。
例如:
[root@localhost ~]# rpm -qf /bin/bash
bash-3.0-19.2
 -p:查詢以“.rpm”為字尾的軟體包安裝後對應的包名稱。
例如:
[root@server ~]# rpm -qp gcc-3.4.4-2.i386.rpm
gcc-3.4.4-2
從這裡的查詢可以得知,“gcc-3.4.4-2.i386.rpm”安裝到系統以後,對應的包名為gcc-3.4.4-2。
 -l:顯示軟體包中的所有檔案列表。此選項後面跟軟體包安裝後對應的包名,切記不是以“.rpm”為字尾的rpm包。
例如:
[root@server ~]# rpm –ql gcc-3.4.4-2
/usr/bin/c89
/usr/bin/c99
/usr/bin/cc
/usr/bin/gcc
/usr/bin/gcov
………(以下省略)………
 -i:顯示軟體包的概要資訊,例如軟體名稱、版本、適應平臺、大小等等。此選項後面跟完整的包名,切忌不是以“.rpm”為字尾的rpm包。
例如:在得到一個軟體,安裝之前一般都需要看下軟體包有什麼內容,可以使用以下命令:
[root@server ~]# rpm -qi gcc-3.4.4-2.i386
或者使用
[root@server ~]# rpm -qpi gcc-3.4.4-2.i386.rpm
這裡由於用到了“-p”選項,首先顯示出了安裝後的軟體包名,所以“-i”選項後可跟“.rpm”結尾的軟體包。
 -g:查詢系統有哪些軟體包屬於指定的類別,RPM工具根據軟體功能的不同,將軟體分了很多種類,分別如下,括弧內為註釋說明:
Amusements/Games (娛樂/遊戲)
  Amusements/Graphics(娛樂/圖形)
  Applications/Archiving (應用/檔案)
  Applications/Communications (應用/通訊)
  Applications/Databases (應用/資料庫)
  Applications/Editors (應用/編輯器)
  Applications/Emulators (應用/模擬器)
  Applications/Engineering (應用/工程)
  Applications/File (應用/檔案)
  Applications/Internet (應用/因特網)
  Applications/Multimedia (應用/多媒體)
  Applications/Productivity (應用/產品)
  Applications/Publishing (應用/印刷)
  Applications/System (應用/系統)
  Applications/Text (應用/文字)
  Development/Debuggers (開發/偵錯程式)
  Development/Languages (開發/語言)
  Development/Libraries (開發/函式庫)
  Development/System (開發/系統)
  Development/Tools (開發/工具)
  Documentation (說明文件)
  System Environment/Base (系統環境/基礎)
  System Environment/Daemons (系統環境/守護)
  System Environment/Kernel (系統環境/核心)
  System Environment/Libraries (系統環境/函式庫)
  System Environment/Shells (系統環境/介面)
  User Interface/Desktops (使用者介面/桌面)
  User Interface/X (使用者介面/X視窗)
  User Interface/X Hardware Support (使用者介面/X硬體支援)
例如:檢視當前系統屬於“開發/偵錯程式”類別的包有多少,使用以下命令:
[root@server ~]# rpm -qg "Development/Debuggers"    
lsof-4.72-1.1
crash-4.0-2
sysreport-1.3.15-5
ltrace-0.3.36-2.EL4
strace-4.5.13-0.EL4.1
valgrind-2.2.0-5.EL4
valgrind-callgrind-0.9.9-1
gdb-6.3.0.0-1.63
pstack-1.2-6
 -d:顯示軟體包中的說明檔案列表,RPM將軟體包中的檔案分為三類,一類是配置檔案,一類是說明檔案,一類是可執行檔案。後面跟完整的包名,切忌不是以“.rpm”為字尾的rpm包。
例如:檢視file軟體包中的說明檔案,使用以下命令:
[root@server108 cicro]# rpm -qd  file-4.10-2
/usr/share/doc/file-4.10/LEGAL.NOTICE
/usr/share/doc/file-4.10/README
/usr/share/man/man1/file.1.gz
/usr/share/man/man3/libmagic.3.gz
/usr/share/man/man5/magic.5.gz
 -s:與“-l“選項類似,除了顯示軟體包中的所有檔案列表資訊,而且還顯示每個檔案的狀態。RPM已安裝的軟體包中各個檔案擁有四種狀態,分別是 normal(正常狀態,表示檔案沒有被其它軟體包修改過)、not installed(未安裝狀態,表示檔案沒有安裝)、replaced(已替換狀態,表明此檔案已經被其它軟體包修改替換過了)、net shared(網路共享狀態,表示此檔案處於網路共享狀態)。
例如:檢視ipvsadm-1.24-6包中每個檔案的狀態,使用以下命令:
[root@localhost ~]# rpm -i --excludedocs ipvsadm-1.24-6.i386.rpm
[root@localhost ~]# rpm -qs ipvsadm-1.24-6                        
normal        /etc/rc.d/init.d/ipvsadm
normal        /sbin/ipvsadm
normal        /sbin/ipvsadm-restore
normal        /sbin/ipvsadm-save
not installed /usr/share/doc/ipvsadm-1.24
not installed /usr/share/doc/ipvsadm-1.24/README
not installed /usr/share/man/man8/ipvsadm-restore.8.gz
not installed /usr/share/man/man8/ipvsadm-save.8.gz
not installed /usr/share/man/man8/ipvsadm.8.gz
      從上面可以看到,我們在安裝ipvsadm-1.24-6.i386.rpm的時候指定不安裝說明文件,然後通過“-s”命令檢視檔案狀態時,軟體包的說明文件狀態均為“not installed”。
 -R (或--requires):顯示軟體包所需的功能,所謂功能,可以是軟體包標識,也可以是共享動態庫檔案等等,軟體包的依賴關係就是依靠功能來實現的,如果所需的功能不存在,則依賴關係一定得不到滿足,軟體安裝就會失敗。
 --provides:顯示軟體包提供的功能,這個功能可以是動態庫檔案,也可以是虛擬軟體的包名等等。
例如:檢視nxclient-2.1.0-17.i386.rpm提供的功能,使用以下命令:
[root@localhost ~]# rpm -qp --provides nxclient-2.1.0-17.i386.rpm                  
nxclient = 2.1.0-17
可以看到這個軟體提供了nxclient的功能。
3. 驗證軟體包
      驗證已經安裝的軟體包
      校驗軟體包比較的是某軟體包安裝的檔案和原始軟體包中的同一檔案的資訊是否一致。它校驗每個檔案的大小、許可權、MD5 值、型別、所有者、以及組群。
命令格式:rpm -V [輔助選項] package1……packageN
主選項說明:
-V:verify的意思,也可以用“--verify”代替。此引數主要校驗已經安裝的軟體包內的檔案和最初安裝時是否一致。
引數說明:package1……packageN 表示需要校驗的且已經安裝的軟體包名。
輔助選項說明:
 -p:驗證軟體包檔案
例如:下面是驗證rsh包的安裝狀態,操作過程如下:
[root@localhost ~]# rpm -V rsh-0.17-25.3
package rsh-0.17-25.3 is not installed
[root@localhost ~]# rpm -Vp rsh-0.17-25.3.i386.rpm
warning: rsh-0.17-25.3.i386.rpm: V3 DSA signature: NOKEY, key ID db2a6e
missing     /usr/bin/rcp
missing     /usr/bin/rexec
missing     /usr/bin/rlogin
missing     /usr/bin/rsh
missing   d /usr/share/man/man1/rcp.1.gz
missing   d /usr/share/man/man1/rexec.1.gz
missing   d /usr/share/man/man1/rlogin.1.gz
missing   d /usr/share/man/man1/rsh.1.gz
[root@localhost ~]# rpm -ivh rsh-0.17-25.3.i386.rpm   
warning: rsh-0.17-25.3.i386.rpm: V3 DSA signature: NOKEY, key ID db2a6e
Preparing...   ########################### [100%]
   1:rsh     ######################## [100%]
[root@localhost ~]# rpm -Vp rsh-0.17-25.3.i386.rpm 
warning: rsh-0.17-25.3.i386.rpm:V3 DSA signature: NOKEY, key ID db2a6e
[root@localhost ~]# rpm -V rsh-0.17-25.3
#上面操作中,我們首先驗證rsh,可以知道rsh沒有在系統中安裝,接著我們安裝了rsh軟體包,再次檢視rsh包狀態時,沒有任何輸出了,表示軟體包檔案全部正常。
 -f:校驗檔案在所屬的軟體包的狀態,此選項後面跟相應的檔名。
例如:檢查mysqlclient包中各個檔案的狀態,我們的操作如下:
[root@localhost ~]# rpm -ql mysqlclient10-3.23.58-4.RHEL4.1
/etc/ld.so.conf.d/mysqlclient10-i386.conf
/usr/lib/mysql/libmysqlclient.so.10
/usr/lib/mysql/libmysqlclient.so.10.0.0
/usr/lib/mysql/libmysqlclient_r.so.10
/usr/lib/mysql/libmysqlclient_r.so.10.0.0
[root@localhost ~]# mv \
>/usr/lib/mysql/libmysqlclient.so.10  /usr/lib/mysql/libmysqlclient.so.10.d
[root@localhost ~]# rpm –V mysqlclient10-3.23.58-4.RHEL4.1
missing     /usr/lib/mysql/libmysqlclient_r.so.10
[root@localhost ~]# rpm -Vf  /usr/lib/mysql/libmysqlclient_r.so.10
missing     /usr/lib/mysql/libmysqlclient_r.so.10
#這裡我們首先檢查了mysqlclient包中包含的所有檔案,然後模擬刪除mysqlclient包中一個檔案,然後檢視這個檔案的狀態,可以看到顯示為“missing”,如果我們通過“-Vf”選項檢查某個檔案,沒有任何輸出時,表示這個檔案狀態正常。
 -a:檢驗所有的軟體包。
 -g:檢驗所有屬於組的軟體包。
驗證未安裝的軟體包檔案
發行的RPM格式的軟體包是否值得信任,是否損壞,我們可以通過RPM提供的選項進行驗證。RPM軟體包一般使用 Gnu 隱私衛士(或稱 GPG)來簽名,從而幫助使用者肯定下載軟體包的可信任性。
命令格式:rpm -K file1.rpm……fileN.rpm
主選項說明:
-K: checksig的意思,也可以用“--checksig”代替。這個選項用來檢查 RPM 軟體包檔案的md5校驗和GPG簽名。
引數說明:file1.rpm……fileN.rpm表示需要校驗軟體包名。
例子:如果想要校驗某個軟體包是否被篡改或者是否損壞,可以使用如下命令檢查:
 [root@localhost ~]# rpm -K nxserver-2.1.0-22.i386.rpm
nxserver-2.1.0-22.i386.rpm: md5 OK
這裡的“md5 OK”表示檔案在下載中沒有被損壞或者沒有被篡改。即這個檔案是安全的。
[root@localhost ~]# rpm -K ipvsadm-1.24-6.i386.rpm
ipvsadm-1.24-6.i386.rpm: (SHA1) DSA sha1 md5 (GPG) NOT OK (MISSING KEYS: GPG#443e1821)
上面的輸出表示這個軟體沒有被授權簽名,在安裝未被linux發行商授權的軟體包時,請務必謹慎,因為這些軟體包內可能包含有害的程式碼。
4. 更新軟體包
命令格式:rpm -U [輔助選項] file1.rpm……fileN.rpm
主選項說明:
-U:upgrade的意思,可以使用“--upgrade”代替。
引數說明:file1.rpm……fileN.rpm表示需要升級的rpm檔案包。
輔助選項說明:
--oldpackage 表示允許"升級"到一個老版本,即軟體版本降級。
其它選項與安裝RPM軟體包輔助引數完全相同,這裡不再講述。
例子:我們將rsh從rsh-0.17-25.3升級到rsh-0.17-37.el5,步驟如下:
[root@localhost ~]# rpm  -q rsh
rsh-0.17-25.3
[root@localhost ~]# rpm  -Uvh rsh-0.17-37.el5.i386.rpm   
warning: rsh-0.17-37.el5.i386.rpm: V3 DSA signature: NOKEY, key ID 37017186
Preparing... ######################### [100%]
   1:rsh    ########################### [100%]
[root@localhost ~]# rpm  -q rsh
rsh-0.17-37.el5
5. 刪除軟體包
命令格式:rpm -e [輔助選項] package1……packageN
主選項說明:
-e:erase的意思,也可以用“--erase”代替。
引數說明:package1……packageN表示已經安裝的軟體包名稱。
輔助選項說明:
 --test:只執行刪除的測試。
 --nodeps:不檢查依賴性。
舉例:
(1) 刪除rsh軟體包,使用以下命令:
[root@localhost ~]# rpm  -q rsh   
rsh-0.17-37.el5
[root@localhost ~]# rpm  -e rsh-0.17-37.el5
[root@localhost ~]# rpm  -q rsh
package rsh is not installed
(2)刪除gcc軟體包,但是存在依賴關係,操作過程如下:
[root@server ~]# rpm -e gcc                   
error: Failed dependencies:
gcc = 3.4.4-2 is needed by (installed) gcc-c++-3.4.4-2.i386
gcc = 3.4.4-2 is needed by (installed) gcc-g77-3.4.4-2.i386
gcc = 3.4.4-2 is needed by (installed) gcc-java-3.4.4-2.i386
gcc = 3.4.3 is needed by (installed) libtool-1.5.6-4.EL4.1.i386
gcc is needed by (installed) systemtap-0.4-0.EL4.i386
這裡又出現了刪除依賴性了,根據上面的提示可知,要刪除gcc軟體包,必須刪除與gcc相互依賴的五個軟體包,這個操作要非常慎重,除非知道刪除後對系統沒有影響,否則一定不要盲目執行刪除操作,因為這樣可能導致系統的崩潰。
其實我們也可以加入“--nodeps”引數,忽略依賴關係,但是這樣可能會導致相關依賴軟體的不可用。

三 二進位制軟體安裝方式
      Linux下二進位制格式的軟體是指事先已經在各種平臺編譯安裝好相關軟體,然後壓縮打包,在安裝時只需解壓或者執行安裝可執行檔案即可。這種軟體發行格式類似與windows系統,這樣做的原因是保護原始碼程式不對外洩露,保護智慧財產權。二進位制軟體包的優點是安裝簡單、容易,缺點是缺乏靈活性,相應的軟體包執行在對應平臺下安裝,離開這個環境軟體就無法執行。
      二進位制軟體包提供了很多型別的打包方式,最常見的就是我們上節講到的RPM格式的包,還有以“*.tar.gz、*.tgz、*.bz2“等形式的二進位制軟體包,最後還有一個就是提供安裝程式進行安裝的二進位制軟體包。下面分別介紹:

3.1 安裝“*.tar.gz、*.bz2”二進位制軟體包
      這種格式的軟體包,安裝其實就是簡單的解壓過程,根據不同的軟體打包格式,我們用相應的解壓命令解壓即可。
      對於*.tar.gz軟體格式解壓:tar –zxvf xxxxxx.tar.gz
      對於*.bz2軟體格式解壓:  tar  -jxvf xxxxxx.tar.gz
      這類軟體的解除安裝,對於解壓後只有單一目錄的軟體,可以直接刪除對應軟體目錄即可,如果解壓後檔案分散在幾個目錄中,需要一一手動刪除目錄。
例如:我們常用的應用伺服器容器tomcat軟體就是基於這種打包壓縮格式發行的。我們只需下載後解壓即可完成安裝,如果需要解除安裝,直接刪除對應的 tomcat目錄即可。


3.2 提供安裝程式的軟體包
      這種軟體包都提供了安裝指令碼或者安裝嚮導程式,只需在下載此類軟體包後解壓,然後進入安裝目錄,找到類似的setup、install、 install.sh之類的可執行檔案執行即可,然後根據提示(比如安裝路徑,引數設定等等)進行相應的設定,接著安裝就自動完成。
      這類軟體的解除安裝也提供了相應的解除安裝指令碼或者解除安裝嚮導,根據提示即可完成軟體解除安裝。
      例如:經常使用的sun jdk就是這種安裝方式,從網路下載下來的jdk是個二進位制可執行檔案,首先設定檔案的可執行許可權(例如chmod 755  jdk1.6.0_07.bin,許可權操作本書後面會有詳細講述) ,然後執行軟體(也即是./ jdk1.6.0_07.bin)即可完成安裝。安裝完成會在當前目錄產生一個對應的jdk程式目錄。
Linux下一些大型的軟體安裝,比如weblogic、oracle等軟體都提供了安裝嚮導程式,使用者可以根據安裝提示,順利完成此類軟體的安裝。

相關文章