利用rpm安裝實用程序安裝rpm包

從一般意義上說,軟件包的安裝其實是文件的拷貝,RPM安裝軟件包,也無外乎此。但RPM要更進一步、更聰明一些就需要多做些工作了。

  聰明的安裝
  從一般意義上說,軟件包的安裝其實是文件的拷貝,即把軟件所用的各個文件拷貝到特定目錄。RPM安裝軟件包,無外乎此。但RPM要更進一步,更聰明一些。在安裝前,它通常要執行以下操作:
   1.檢查軟件包的依賴(Dependency)
   RPM格式的軟件包中可包含有依賴關係的描述,如軟件執行時需要什麼動態鏈接庫,需要什麼程序存在及版本號要求等。當RPM檢查時發現所依賴的鏈接庫或程序等不存在或不符合要求時,默認的做法是中止軟件包安裝。
   2.檢查軟件包的衝突(Conflicts)
   有的軟件與某些軟件不能共存,軟件包製作者會將這種衝突記錄到RPM軟件包中。安裝時,若RPM發現有衝突存在,將會中止安裝。
   3.執行安裝前腳本程序(Preinstall)
   此類程序由軟件包製作者設定,需要在安裝前執行。通常是檢測操作環境,建立有關目錄,清理多餘文件等等,爲順利安裝作準備。
   4.處理配置文件(Configfiles)
   RPM對配置文件(Configfiles)有着特別的處理。因爲用戶常常需要根據實際情況,對軟件的配置文件做相應的修改。如果安裝時簡單地覆蓋了此類文件,則用戶又得重新手工設置,很麻煩。這種情況下,RPM做得比較明智:它將原配置文件換個名字保存了起來(原文件名後綴加上.rpmorig),用戶可根據需要再恢復,避免重新設置的尷尬。
   5.解壓軟件包並存放到相應位置
   這是最重要的部分,也是軟件包安裝的關鍵所在。在這一步,RPM將軟件包解壓縮,將其中的文件一個個存放到正確的位置,同時,文件的操作權限等屬性相應設置正確。
   6.執行安裝後腳本程序(Postinstall)
   此類程序爲軟件的正確執行設定相關資源,如修改inetd.conf、運行ldconfig程序以利新的動態鏈接庫生效等等。
   7.更新RPM數據庫
   安裝後,RPM將所安裝的軟件及相關信息記錄到其數據庫中,便於以後升級、查詢、校驗和卸載。
   8.執行安裝時觸發腳本程序(Triggerin)
   觸發腳本程序是指軟件包滿足某種條件(如已安裝軟件包sendmail,或file版本大於3.0)時才觸發執行的腳本程序,它用於軟件包之間的交互控制。觸發腳本程序有三類:一是軟件包安裝時才觸發的,稱爲安裝時觸發腳本程序(triggerin);二是軟件包卸載前觸發的,叫作卸載前觸發腳本程序(triggerun);三是軟件包卸載後才觸發執行的,稱作卸載後觸發腳本程序(triggerpostun)。這些觸發腳本程序,大大擴展了RPM軟件包管理的功能。

  命令格式
  安裝RPM格式的軟件包,可使用如下命令格式: rpm -i [安裝選項1 安裝選項2...] 包裹文件1 包裹文件2...
   注:可用--install代替-i,效果相同。

  選項列表
   包裹文件
  對於要安裝的RPM格式的包裹文件,RPM對其名字不作強制要求。用戶可以使用以下三種方式的命名樣式:

  1.典型的命名樣式(常用): 格式爲:軟件名-版本號-釋出號.體系號.rpm
   注:體系號指的是執行程序適用的處理器體系,如i386體系,sparc體系等。體系號爲src時表明爲源代碼包,否則爲執行程序包。
   如abc-3.2-1.i386.rpm爲執行程序包,軟件名爲abc,版本號爲3.2,釋出號爲1,適用體系爲i386,而abc-3.2-1.src.rpm則爲源代碼包。

  2.URL形式的命名樣式(較常用)
   * FTP方式的命名格式:ftp://[用戶名[:密碼]@]主機[:端口]/包裹文件
   注:[]括住的內容表示可選。主機可以是主機名,也可是IP地址。包裹文件可含目錄信息。如未指定用戶名,則RPM採用匿名方式傳輸數據(用戶名爲anonymous)。如未指定密碼,則RPM會根據實際情況提示用戶輸入密碼。如未指定端口,則RPM使用默認端口(一般爲21)。
   如ftp://ftp.xxx.com/yyy.rpm(使用匿名傳輸,主機ftp.xxx.com,包裹文件yyy.rpm);
  如ftp://24.109.164.55:1024/pub/yyy.rpm(匿名FTP傳輸,主機IP:24.109.164.55,使用1024端口,包裹文件在/pub目錄下);
  如ftp://[email protected]/yyy.rpm(主機ftp.xxx.com,FTP用戶名zhsoft,如有密碼,RPM將會自動提示輸入);
  如ftp://zhsoft:[email protected]/yyy.rpm(主機ftp.xxx.com,FTP用戶名zhsoft,密碼password)。

  3 HTTP方式的命名:格式爲:http://主機[:端口]/包裹文件
   注:[]括住的內容可選。主機可以是主機名,也可是IP地址。包裹文件可含目錄信息。如未指定端口,則RPM默認使用80端口。
  如http://www.xxx.com/yyy.rpm(用HTTP獲取www.xxx.com主機上的yyy.rpm文件);
  如http://www.xxx.com:8080/pub/yyy.rpm(用HTTP獲取www.xxx.com主機上/pub目錄下的yyy.rpm文件,使用端口8080)。

  3.其它形式(很少使用):
  命名格式:任意
  如將abc-3.2-1.i386.rpm改名爲abc.txt,用RPM安裝也會安裝成功,其根本原因是RPM判定一個文件是否RPM格式,不是看名字,而是看內容,看其是否符合特定的格式。
  參數:
  一、安裝指定用選項
  1.hash(或-h):以#顯示安裝進度,如果一個軟件包很大、安裝費時時,用戶若想及時瞭解安裝進度,必須用此選項。該選項以顯示#號表示進度,每個#號表示2%的進度,總共要顯示50個#號。下面安裝MySQL軟件包,如下所示:

# rpm -i --hash MySQL-3.22.32-1.i386.rpm
##################################################
#

  從上看出,軟件包安裝順利完成。

  2.percent:以%(百分比)顯示安裝進度
   percent的含義是百分比,而此選項的作用就是以百分比(%)來顯示安裝進度的。同樣是安裝MySQL軟件包,下面的輸出就不一樣:

# rpm -i --percent MySQL-3.22.32-1.i386.rpm
%% 0.000000
%% 0.002600
%% 0.020586
......
%% 100.000000
#

  上例中省略了很多輸出(......表示)。因爲如果軟件包很大,則用--percent時輸出的內容會很多,所以用戶最好用--hash選項,以#號來表示安裝進度,這樣簡潔明瞭。

  3.test:安裝測試
   所謂安裝測試,意即並非真正的安裝,它不拷貝和建立任何文件。使用本選項的目的在於:檢測軟件包的依賴關係是否滿足,是否存在潛在的衝突等等。

# rpm -i --test autofs-3.1.3-2.i386.rpm
error: failed dependencies:
mktemp is needed by autofs-3.1.3-2
#

本例進行安裝測試時發現了依賴方面的錯誤,autofs所需要的mktemp包不存在,安裝中斷。

下面先安裝mktemp軟件包,再進行autofs安裝測試,看情況怎麼樣:

# rpm -i mktemp-1.5-2.i386.rpm
# rpm -i --test autofs-3.1.3-2.i386.rpm
#

由上看出,這次測試沒有出現什麼錯誤。

  4.replacepkgs:替換軟件包
   爲什麼要替換軟件包?原因可能是系統中的軟件包已經破壞了,其中一個或多個文件丟失或損毀。如果用戶想修復這個軟件包,用直接安裝的方法,RPM將報錯退出:

# rpm -V file
missing/usr/man/man1/file.1
# rpm -i file-3.26-6.i386.rpm
package file-3.26-6 is already installed
#

注:本例先用RPM校驗命令校驗一下file軟件包,發現/usr/man/man1/file.1文件丟失。之後用安裝命令安裝,RPM提示軟件包file-3.26-6已經安裝了。(有關RPM校驗命令,<<精通RPM之六--校驗篇>>中將會有詳細的介紹)

如果採用--replacepkgs選項,結果又怎樣呢?

# rpm -i --replacepkgs file-3.26-6.i386.rpm
# rpm -V file
#

看來,RPM成功地替換了原軟件包,校驗一下該包,發現沒有錯誤輸出,所以現在的軟件包是完整的。

  5.replacefiles:替換文件
   RPM是聰明的軟件包管理器,它維護着每個已安裝軟件包的文件信息。如果在安裝一個新的軟件包時,RPM發現其中某個文件和已安裝的某個軟件包中的文件名字相同但內容不同,那麼RPM就會認爲這是一個文件衝突,會報錯退出:

# rpm -i ff-4.0-2.i386.rpm
file /root/my.a from install of ff-4.0-2 conflicts with file from package zoo-6.0-1
#

注:本例中RPM發現要安裝的軟件包ff-4.0-2與已安裝的軟件包zoo-6.0-1中,含有相同的一個文件/root/my.a,但其內容並不相同,所以提示了文件衝突的錯誤。

如果用戶想忽略這個錯誤,可使用--replacefiles選項,指示RPM發現文件衝突時,直接替換掉原文件即可。注意:除非用戶對所衝突的文件有很深的瞭解,不要輕易替換文件,以免破壞已安裝軟件包的完整性,確保其能正常運行。

# rpm -i --replacefiles ff-4.0-2.i386.rpm
#

採用該選項後,軟件包能順利安裝了。

另外,說到替換文件,若要安裝的軟件包中的文件已存在,但此文件並不屬於任何軟件包,RPM的做法是將文件換名保存(文件名後綴加.rpmorig),並且以警告信息提醒用戶。如下所示:

# rpm -i foo-6.0-1.i386.rpm
warning: /etc/foo.conf saved as /etc/foo.conf.rpmorig
#

  6.allfiles:安裝所有文件
   讀者看到此選項,也許要問:難道RPM安裝軟件包不是安裝其中所有的文件嗎? 我的回答是:如果是初次安裝的話,RPM確是將包中所有文件全部安裝。但是,如果是修復軟件包(用--replacepkgs選項),那結果就不一定了。箇中原因是:RPM包中有些配置文件可標識爲missingok屬性(missingok指的是即使丟失,照樣OK),這樣的包安裝後,若這種類型的配置文件被刪除,則修復時RPM默認的做法是不再安裝這種類型的文件,除非採用--allfiles選項。下面看個實際的例子:

# rpm -i foo-6.0-1.i386.rpm
# ls -l /etc/foo.conf
-rw-r--r-- 1 root root9 Oct 11 09:50 /etc/foo.conf
# rm -f /etc/foo.conf
# rpm -i --replacepkgs foo-6.0-1.i386.rpm
# ls -l /etc/foo.conf
ls: /etc/foo.conf: 文件或目錄不存在
# rpm -i --replacepkgs --allfiles foo-6.0-1.i386.rpm
# ls -l /etc/foo.conf
-rw-r--r-- 1 root root9 Oct 11 09:50 /etc/foo.conf

注:本例中已預先知道foo包中的配置文件/etc/foo.conf帶有missingok屬性。

(1)用rpm -i命令安裝foo包;

(2)用ls命令列一下屬於該包的配置文件/etc/foo.conf(能列出來,表明文件存在);

(3)用rm命令刪除了這個文件;

(4)用rpm -i --replacepkgs命令修復foo軟件包;

(5)因爲修復時未用--allfiles選項,所以用ls命令列文件/etc/foo.conf時出錯了:文件不存在,沒有安裝上;

(6)用rpm -i --replacepkgs --allfiles命令安裝修復foo軟件包;

(7)再度用ls命令列文件,列了出來,表明這次安裝上了。

由本例看出,若用戶確實想安全恢復(修復)某個軟件包,最好使用--allfiles選項。一般情況下則不必這麼做,因爲帶有missingok屬性的配置文件本來就是可以丟失的嘛,不必太在意了。

  7.force:強制執行
   force的含義是強制。--force選項的作用就是強制安裝軟件包,不考慮軟件包是否已安裝,也不考慮有沒有文件衝突。其效果相當於同時選用--replacepkgs與--replacefiles選項進行安裝。

  8.excludedocs:不安裝說明文檔
   RPM有多個好功能,其中之一就是:它將文件分爲配置文件,說明文檔和其它文件三種,這樣便於區別對待,靈活處理。

基於RPM安裝的LINUX發行版中包括5000多個說明文檔,有50M字節,佔用的空間不小。如果想節省空間,可使用--excludedocs選項以排除安裝說明文檔。

如軟件包file中包含/usr/man/man1/file.1和/usr/man/man4/magic.4兩個說明文檔。安裝時若使用--excludedocs選項,這兩個文檔就不會被安裝。

# rpm -i --excludedocs file-3.26-6.i386.rpm
# ls -l /usr/man/man1/file.1
ls: /usr/man/man1/file.1: 文件或目錄不存在
# ls -l /usr/man/man4/magic.4
ls: /usr/man/man4/magic.4: 文件或目錄不存在
#

如果用戶想讓RPM默認不安裝說明文檔,則可以這麼做:編輯~/.rpmmacros文件(用戶主目錄HOME下的RPM宏文件),加入下面一行:

%_excludedocs 1

其作用是定義RPM內部的_excludedocs宏爲1,確認不安裝說明文檔。

這樣的話,就不用在命令行使用--excludedocs選項了。

# rpm -i file-3.26-6.i386.rpm
# ls -l /usr/man/man1/file.1
ls: /usr/man/man1/file.1: 文件或目錄不存在
# ls -l /usr/man/man4/magic.4
ls: /usr/man/man4/magic.4: 文件或目錄不存在
#

  9.includedocs:安裝說明文檔
   RPM一般情況下是安裝說明文檔的,但是如果用戶自行修改了設定(象上面的例子),則RPM就不再安裝說明文檔了,除非特別指定,這就用到--includedocs選項。這種情況下,只有用此選項才能確保安裝說明文檔。

# rpm -i --includedocs file-3.26-6.i386.rpm
# ls -l /usr/man/man1/file.1
-rwxr-xr-x 1 root root12023 Mar 23 1999 /usr/man/man1/file.1
# ls -l /usr/man/man4/magic.4
-rwxr-xr-x 1 root root 6625 Mar 23 1999 /usr/man/man4/magic.4
#

  10.noscripts:不執行腳本程序
   一個RPM軟件包中可包含五種腳本程序,即:安裝前腳本程序,安裝後腳本程序,卸載前腳本程序,卸載後腳本程序和校驗腳本程序。安裝時使用--noscripts選項,可禁止安裝前與安裝後腳本程序的執行。

# rpm -i foo-6.0-1.i386.rpm
preinstall is running ... done
postinstall is running ... done
#

上面不禁止腳本程序的執行,下面不執行腳本程序,請看輸出結果:

# rpm -i --noscripts foo-6.0-1.i386.rpm
#

看,因爲沒有安裝前與安裝後腳本程序的執行,所以沒有什麼輸出了。

注意:一般用戶不要使用此選項。此選項主要提供給軟件包製作者使用的。通過禁止執行腳本程序,可以防止因安裝帶有BUG的軟件包而宕掉整個系統。當軟件包去掉了BUG後,此選項就不必使用了。

  11.nodeps:不檢查依賴
   RPM管理軟件包,不僅管理包中的所有文件,還同時管理着軟件包之間的依賴關係。如A依賴於B運行,若B不存在了,則A也就運行不了了。RPM維護着這種關係,儘量避免破壞,以保證軟件的正常運行。

# rpm -i autofs-3.1.3-2.i386.rpm
error: failed dependencies:
mktemp is needed by autofs-3.1.3-2
#

本例安裝中出現了依賴方面的錯誤(autofs依賴mktemp,但mktemp不存在),安裝過程中斷了。如果要RPM不管依賴關係是否正常都安裝,就要用--nodeps選項,指示RPM不檢查依賴,這樣就能正常安裝了。

# rpm -i --nodeps autofs-3.1.3-2.i386.rpm
#

注:除非用戶對軟件包有足夠了解,或只想看看軟件,否則不要使用本選項,以維護軟件間正常的依賴關係。

  12.notriggers:不執行觸發程序
   爲了軟件包間的交互控制,RPM設計了三種觸發程序:安裝時觸發程序,卸載前觸發程序和卸載後觸發程序。爲了防止因某一軟件包的安裝而引發安裝時觸發程序的執行,可以使用--notriggers選項。

  13.ignorearch:忽略體系與ignoreos :忽略操作系統
   何謂體系?體系就是CPU的類別,有Intel的x86(如i386,i486系列)體系,有Sun的sparc體系等等。當一個軟件包建立時,RPM就爲其指定了所適用的CPU體系,也爲其指定了所適用的操作系統。這樣做的好處就是,RPM容易知道爲一臺計算機所建立的軟件包是否適用於兼容於另一臺計算機。RPM的資源配置文件(默認爲/usr/lib/rpm/rpmrc)中,就定義了體系的兼容關係(arch_compat表達)和操作系統的兼容關係(os_compat表達)。RPM安裝一個包裹文件時,要做這樣一個兼容方面的檢查。如果用戶想忽略體系,不管其是否兼容,請用--ignorearch選項安裝。如果也不管操作系統是否兼容,可用--ignoreos選項。需要指出的是,若非知道自己這樣的目的,否則不要試圖這樣做。

  14.ignoresize:不檢查空間大小
   RPM安裝軟件包前,首先要檢查當前系統是否有足夠的剩餘空間,如果空間不足的話,安裝將無法完成。使用本選項的目的,在於指示RPM不做空間大小方面的檢查,意即不管系統是否有容納要安裝的軟件包的空間,照直安裝就行了。

  15.relocate:重定位
   RPM軟件包在製作過程中,可以定義一個或多個重定位前綴,以此方便軟件的重定位(即把軟件包中的文件放到自定義的目錄下面),從而增加軟件包安裝的靈活性。

本選項用於更換指定的重定位目錄,如果一個包有多個重定位前綴,可以使用本選項多次。

# rpm -qpl file-3.26-6.i386.rpm
/usr/bin/file
/usr/man/man1/file.1
/usr/man/man4/magic.4
/usr/share/magic
# rpm -i --relocate /usr=/tmp file-3.26-6.i386.rpm
# rpm -ql file
/tmp/bin/file
/tmp/man/man1/file.1
/tmp/man/man4/magic.4
/tmp/share/magic
#

注:本例中先用rpm -qpl列出包裹文件file-3.26-6.i386.rpm當中的文件,可以看到其中的文件均是以/usr開頭的。之後進行重定位安裝,將/usr換作/tmp。最後從列出已安裝的file包的文件列表可以看出,原來的/usr目錄前綴換作指定的前綴/tmp了,這樣實現了軟件的重定位。(關於RPM查詢命令,詳見<<精通RPM之五--查詢篇>>)

  16.badreloc:強制重定位
   RPM軟件包的重定位,依賴於製作時重定位前綴的定義。如果沒有定義重定位前綴,或者用戶安裝時所指定的重定位前綴不存在,則RPM會報錯退出,中斷安裝。此時,若用本選項,則RPM會不管這些錯誤,進行強制的重定位安裝。注:本選項和--relocate選項同時使用時纔有意義。

如上例,採用並不存在的重定位前綴/usr/man進行安裝:

# rpm -i --relocate /usr/man=/tmp file-3.26-6.i386.rpm
path /usr/man is not relocateable for package file-3.26-6
#

RPM提示了錯誤:/usr/man目錄在file-3.26-6包中是不可重定位的。

如加上--badreloc選項,結果怎麼樣:

# rpm -i --relocate /usr/man=/tmp --badreloc file-3.26-6.i386.rpm
# rpm -ql file
/usr/bin/file
/tmp/man1/file.1
/tmp/man4/magic.4
/usr/share/magic
#

由上可以看到,這樣的強制重定位獲得通過,之後再用查詢命令rpm -ql列一下file包的文件,就會發現原來的/usr/man/man1/file.1定位成了/tmp/man1/file.1,而/usr/man/man4/magic.4則成了/tmp/man4/magic.4。怎麼樣?神奇吧!

  17.excludepath:不安裝指定目錄下的文件
   利用此選項,可以禁止RPM安裝某些指定目錄下的文件。如不想安裝file軟件包中的說明文檔,除了可使用--excludedocs選項外,還可使用本選項。因爲file的說明文檔均在目錄/usr/man下面。

# rpm -i --excludepath /usr/man file-3.26-6.i386.rpm
# rpm -qls file
normal/usr/bin/file
not installed /usr/man/man1/file.1
not installed /usr/man/man4/magic.4
normal/usr/share/magic
#

注:例子中先安裝file軟件包,並用--excludepath禁止安裝/usr/man下的文件,再用RPM查詢命令rpm -qls列出file包的文件及狀態,可以看到:/usr/man下的兩個文件均未安裝(not installed)。

  18.justdb:僅更新數據庫
  安裝軟件包使用此選項後,RPM將只更新其數據庫數據,文件系統不更新,意即並不拷貝和建立包中的文件。

# rpm -i --justdb file-3.26-6.i386.rpm
# rpm -qls file
normal/usr/bin/file
normal/usr/man/man1/file.1
normal/usr/man/man4/magic.4
normal/usr/share/magic
# ls -l /usr/bin/file
ls: /usr/bin/file: 文件或目錄不存在
#

注:例子中安裝file包但指明只更新數據庫,結果是:雖然用查詢命令查到該軟件包中所有文件狀態均正常(normal),但用ls命令列包中所含文件/usr/bin/file,該文件卻不存在。這表明包中文件並未建立。

  19.prefix:指定重定位前綴
   如前所述,可重定位的軟件包可含一個或多個重定位前綴,可用--relocate選項來改變某個重定位前綴之值。--prefix選項僅能用來改變默認的重定位前綴(默認是第一個重定位前綴),它不需要說明原重定位前綴。下面的例子同樣將file包安裝到/tmp目錄:

# rpm -qpl file-3.26-6.i386.rpm
/usr/bin/file
/usr/man/man1/file.1
/usr/man/man4/magic.4
/usr/share/magic
# rpm -i --prefix /tmp file-3.26-6.i386.rpm
# rpm -ql file
/tmp/bin/file
/tmp/man/man1/file.1
/tmp/man/man4/magic.4
/tmp/share/magic
#

  20.ftpproxy:指定FTP代理主機
  本選項指定FTP代理主機,主機可以是主機名,也可以是IP地址。

  21.ftpport:指定FTP端口
   本選項指定FTP協議使用的TCP端口,系統默認是21。

請看下面的例子:

# rpm -iv --ftpport 8888 ftp://root@xwboc/tmp/file-3.26-6.i386.rpm
Password for root@xwboc:
Password for root@xwboc:
Retrieving ftp://root@xwboc/tmp/file-3.26-6.i386.rpm
file-3.26-6
#

本例中用FTP方式安裝file軟件包,數據傳輸使用8888端口。執行中,RPM先提示輸入root用戶的密碼兩次,之後下載(retrieve)軟件,最後成功安裝。

  22.httpproxy:指定HTTP代理主機
   本選項指定HTTP代理主機,主機可以是主機名,也可以是IP地址。

  23.httpport:指定HTTP端口
   本選項指定HTTP協議使用的TCP端口,系統默認是80。下面的例子就指定了80端口來安裝autofs軟件,當然不指定也行,因爲系統默認的就是這個端口。

# rpm -iv --httpport 80 http://24.109.164.55/rpms/autofs-3.1.3-2.i386.rpm
Retrieving http://24.109.164.55/rpms/autofs-3.1.3-2.i386.rpm
autofs-3.1.3-2
#

注:同FTP方式一樣,RPM都是下載再安裝。

  二、通用選項
  所謂通用選項,就是不管是安裝,升級,卸載還是其它軟件包操作,統統適用的選項。 這樣的選項主要以下幾個:

  1.-v:顯示附加信息
   一般情況下,RPM和不少LINUX命令(如cp,rm,mv等)一樣,都本着儘可能少輸出信息的原則(除非必要,否則不要輸出),這樣做是爲了避免浪費CPU資源。所以,當用戶使用某個命令後沒有什麼輸出,這就意味着命令執行成功了。如果有什麼錯誤,程序會提示的。RPM也是這個樣子。爲了使RPM輸出多一點的信息,可以使用-v選項。

如不帶此選項安裝file包,沒有輸出:

# rpm -i file-3.26-6.i386.rpm
#

而採用-v選項後安裝時輸出了包名:

# rpm -i -v file-3.26-6.i386.rpm
file-3.26-6
#

  2.-vv:顯示調試信息
   選用-vv選項,可以使RPM輸出更多的信息。這些信息,主要供RPM軟件開發者研究使用的,一般用戶也可以看看,從中可以知道RPM究竟幹些什麼。

下面採用此選項安裝file包,同時使用管道線(|)將輸出數據送nl命令,以帶行號輸出每行數據。


從執行結果看,輸出的信息很多,其中以D:開頭的行均是調試信息。現在逐行解釋:

第1行:統計要安裝的軟件包個數;

第2行:RPM找到1個包;

第3行:查看哪些包需要下載(這些要下載的包,都是以FTP或HTTP形式書寫的包名);

第4行:下載了0個包;

第5-10行:取包裹文件的文件頭信息,算出軟件包占用的空間68019(字節),以利檢查

系統是否有足夠空間。

第11行:打開RPM數據庫;

第12行:找到0個源代碼包,1個執行代碼包;

第13-18行:檢查軟件包的依賴關係。其依賴(requires)的東西均得到滿足(satisfied)。

第19行:準備安裝執行代碼包;

第20行:取得已安裝文件系統的列表;

第21-26行:再度取包裹文件頭信息,算出軟件包占用空間;

第27-31行:列出包中文件及要執行的操作,第27行的test=0表示不是進行安裝測試,

file包中的文件均要執行創建操作(create)。

第32行:如果有安裝前執行腳本程序的話,執行它;

第33行:安裝軟件包file-3.26-6;

第34行:如果有安裝後執行腳本程序的話,執行它。

  3.root:指定根目錄
   指定根目錄ROOT,其作用在於將系統所有操作限定在指定的目錄下面,這樣RPM操作的數據庫位置變了,軟件包的安裝位置也變了。它是通過chroot系統調用實現的。RPM默認的數據庫目錄是/var/lib/rpm,如果指定根目錄爲/usr,則RPM的數據庫目錄將變爲/usr/var/lib/rpm。同樣,如果包中有個文件爲/etc/zhsoft.txt,則安裝後爲/usr/etc/zhsoft.txt。

看下面的例子:

# rpm -i --root /usr file-3.26-6.i386.rpm
failed to open /usr/var/lib/rpm/packages.rpm

error: 不能打開 /usr/var/lib/rpm/packages.rpm
#

注:指定RPM根目錄爲/usr安裝file出現錯誤,RPM打不開/usr/var/lib/rpm/packages.rpm文件,這是因爲實際上在/usr/var/lib/rpm目錄下沒有任何RPM數據庫。如果想成功安裝,可用初始化RPM數據庫命令來建立RPM數據庫,命令是rpm --initdb --root /usr(這些功能將在以後講到)。

  4.rcfile:指定RPM資源配置文件
   RPM的資源配置文件裏,存放着RPM的默認設置,有編譯選項optflags,體系定義arch_canon,兼容定義arch_compat,宏文件定義macrofiles等。RPM默認的資源配置文件(按讀取順序)爲:/usr/lib/rpm/rpmrc,/etc/rpmrc,~/.rpmrc。(後兩個文件現在意義不大了,如今一般換作RPM宏文件了。較之資源配置文件,宏文件有更大的靈活性。)

如果想讓RPM使用用戶指定的資源配置文件,就用--rcfile來設定,可同時設定多個文件,文件間以冒號(:)分隔,如/usr/lib/rpm/rpmrc:/etc/rpmrc:~/.rpmrc這種形式。

  5.dbpath:指定RPM數據庫目錄
   本選項不同於--root選項,它僅僅是指定RPM數據庫的目錄,並不改變安裝文件的位置。
 
 

發佈了24 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章