32.2. 使用 RPM

RPM 有五個基本的操作模式(不包括套件包裝): 安裝、解除安裝、升級、查詢與校驗。 這個部份包含每一種模式的概要,如需完整的細節與選項,請使用 rpm --help,或翻閱至 菴 32.5 節 以取得更多關於 RPM 的資訊。

32.2.1. 搜尋 RPM 套件

在開始使用 RPM 之前,您必須先知道要在何處取得它們。 網際網路的搜尋將會傳回許多 RPM 的檔案庫,不過假如您要的是由 Red Hat 所建立的 RPM 套件,您可以在下列的位置找到它們:

32.2.2. 安裝中

RPM 套件典型的檔案名稱會類似 foo-1.0-1.i386.rpm,檔名中含有套件的名稱(foo)、版本(1.0)、發行(1) 以及主機架構(i386)。 只要以 root 身份登入並在 shell 提示符號下輸入下列指令便可安裝一個套件:

rpm -Uvh foo-1.0-1.i386.rpm

假如安裝成功後,您將會看到下列的安裝進度:

Preparing...                ########################################### [100%]
   1:foo                    ########################################### [100%]

如您所見,RPM 會列出套件的名稱,然後在套件安裝時印出連續的井字號當作安裝的進度。

從 RPM 4.1 版開始,當安裝或升級一個套件時,將會檢查該套件的數位簽章,假如簽章的驗證失敗,您將會看到一個如下的錯誤訊息:

error: V3 DSA signature: BAD, key ID 0352860f

假如它是新的且僅有表頭的簽章,您將會看到如下的錯誤訊息:

error: Header V3 DSA signature: BAD, key ID 0352860f

假如您沒有安裝適當的金鑰來驗證簽章,錯誤訊息將會含有 NOKEY

warning: V3 DSA signature: NOKEY, key ID 0352860f

請參考 菴 32.3 節 以取得更多關於檢查套件簽章的資訊。

注請注意
 

假如您要安裝一個核心套件,您應該要使用 rpm -ivh,如需詳細資訊,請參考 第30章

安裝套件的的背後含意是力求簡單的,不過有時候還是會有錯誤發生。

32.2.2.1. 套件已安裝

假如相同版本的套件已經安裝了,您將會看到:

Preparing...                ########################################### [100%]
package foo-1.0-1 is already installed

假如在這種情況下,您仍然想安裝該套件,您可以使用 --replacepkgs 選項來告知 RPM 忽視錯誤的存在:

rpm -ivh --replacepkgs foo-1.0-1.i386.rpm

當不小心刪除由 RPM 安裝的檔案,或者您想要來自該 RPM 的原始設定檔案,您便可以使用這個選項。

32.2.2.2. 衝突的檔案

假如您試著要安裝一個套件,而該套件含有一個由另一套件或之前版本的相同套件所安裝的檔案,您將會看到下列訊息:

Preparing...                ########################################### [100%]
file /usr/bin/foo from install of foo-1.0-1 conflicts with file from package bar-2.0.20

如要使 RPM 忽視這個錯誤,請使用 --replacefiles 選項:

rpm -ivh --replacefiles foo-1.0-1.i386.rpm

32.2.2.3. 未解決的相依性問題

RPM 套件也許會『相依』於另一個套件,也就是說,它們需要系統安裝其他套件以使它們能過順利執行。 假如您試著要安裝含有未解決之相依性問題得套件,您將會看到如下所示:

Preparing...                ########################################### [100%]
error: Failed dependencies:
        bar.so.2 is needed by foo-1.0-1
    Suggested resolutions:
        bar-2.0.20-3.i386.rpm

假如您要安裝一個 Red Hat Linux 的套件,通常會建議您所需的套件以用來解決相依性的問題。 請在 Red Hat Linux 光碟片上或從 Red Hat 的 FTP 站台(或映射網站),並且將之加入到指令:

rpm -ivh foo-1.0-1.i386.rpm bar-2.0.20-3.i386.rpm

假如兩個套件的安裝都已成功,您將會看到下列的訊息:

Preparing...                ########################################### [100%]
   1:foo                    ########################################### [ 50%]
   2:bar                    ########################################### [100%]

假如沒有建議用來解決相依性問題的套件,您可以使用 --redhatprovides 選項以決定那些套件含有所需的檔案,您需要安裝 rpmdb-redhat 套件以使用這個選項。

rpm -q --redhatprovides bar.so.2

假如包含 bar.so.2 檔案的套件是來自 rpmdb-redhat 套件所安裝的資料庫,將會顯示該套件的名稱:

bar-2.0.20-3.i386.rpm

假如您仍然想要強制進行安裝(最好不要,因為套件也許無法正常運作),您可以使用 --nodeps 選項。

32.2.3. 解除安裝

解除安裝一個套件就像安裝一個套件一樣簡單,請在 shell 提示符號下輸入下列指令:

rpm -e foo

注請注意
 

請特別注意,在此我們使用套件名稱 foo,而不是原始套件檔案的名稱 foo-1.0-1.i386.rpm。 如要解除安裝一個套件,您需要以原始套件的套件名稱取代 foo

假如另一個已安裝的套件相依於您正要移除的套件,您則會遇到相依性問題的錯誤。 舉例來說:

Preparing...                ########################################### [100%]
error: removing these packages would break dependencies:
        foo is needed by  bar-2.0.20-3.i386.rpm

如要使 RPM 忽視這個錯誤,並且解除安裝這個套件(不建議您如此做,因為相依於它的套件也許會無法正常運作),您可以使用 --nodeps 選項。

32.2.4. 升級

升級一個套件與安裝一個套件很類似,只需在 shell 提示符號下輸入下列指令:

rpm -Uvh foo-2.0-1.i386.rpm

在以上的例子中您所看不到的是,任何較舊版本的 foo 套件都被 RPM 自動解除安裝了。 事實上,您可以總是使用 -U 來安裝套件,因為即使沒有安裝之前版本的該套件,也可以順利運作。

因為 RPM 執行一種包括設定檔案的智慧式套件升級,您也許會看到下列的訊息:

saving /etc/foo.conf as /etc/foo.conf.rpmsave

這個訊息代表您在設定檔案所做的變更也許無法"向前相容"於套件中新的設定檔案,所以 RPM 儲存原本的設定檔案,再安裝一個新的檔案。 您應該仔細檢查兩個設定檔案的相異處,並且盡快的解決它們,也確保系統能繼續正常運作。

升級操作實際上是解除安裝與安裝的結合,所以在 RPM 升級階段,您也許會遇到解除安裝與安裝的錯誤,以及當您試著要升級到一個含有較舊版本號碼的套件時,您將會看到:

package foo-2.0-1 (which is newer than foo-1.0-1) is already installed

如要強迫 RPM 執行所謂的"升級",請使用 --oldpackage 選項:

rpm -Uvh --oldpackage foo-1.0-1.i386.rpm

32.2.5. 更新(Freshening)

Freshening 一個套件相當類似套件升級,請在 shell 提示符號下輸入下列指令:

rpm -Fvh foo-1.2-1.i386.rpm

RPM 的 freshen 選項檢查命令列上所指定的套件版本與已經安裝到您系統上的套件版本,當 RPM 的 freshen 選項處理到一個已安裝套件的較新版本,將會升級該套件到較新的版本。 然而假如之前沒有安裝相同名稱的套件,RPM 的 freshen 選項將不會安裝該套件,這是與 RPM 升級選項不同的地方,因為不管一個較舊版本的套件是否已安裝,升級選項仍將會安裝該套件。

RPM 的 freshen 選項可使用在單一的套件或群組的套件。 假如您剛剛下載很多不同的套件,而您只想要升級那些已經安裝到系統中的套件,此時您便可以使用 freshen 的選項。 假如您使用 freshening,在您使用 RPM 之前您並不需要從群組中刪除任何不想要的套件。

在這個例子,您可以執行下列的指令:

rpm -Fvh *.rpm

RPM 將只會自動升級已經安裝的套件。

32.2.6. 查詢

使用 rpm -q 指令來查詢已安裝套件的資料庫,rpm -q foo 指令將會列出已安裝套件 foo 的套件名稱、版本與發行號碼:

foo-2.0-1

注請注意
 

請留意我們使用套件的名稱 foo,如要查詢一個套件您必須以真實的套件名稱取代 foo

除了指定套件名稱之外,您可以使用下列的選項加上 -q 來指定想要查詢的套件,這些稱為套件規格選項

有許多種方式可用來指定關於套件查詢所顯示的資訊,下列的選項可使用來選擇您要搜尋的資訊種類,這些稱為資訊選擇選項

對於用來顯示檔案清單的選項,您可以加上 -v 到指令上來顯示類似 ls -l 格式的檔案清單。

32.2.7. 校驗

校驗套件將會比較從一個套件安裝之檔案的資訊與從相同的原始套件安裝的資訊,除此之外,套件的校驗將會比較每一檔案的大小、MD5 校驗值、權限設定、種類、擁有者與群組。

rpm -V 指令將會校驗一個套件,您可以使用任何所列出的套件選擇選項來查詢您所指定要做校驗的套件。 當您使用如 rpm -V foo 的簡單指令將會校驗 foo 套件中的所有檔案是否與原本安裝時的狀態一樣。 例如:

假如校驗的過程順利,將不會有任何的輸出。 如果有任何的差異存在,將會顯示出來。 輸出的格式為含有 8 個字元的字串(c 代表一個設定檔案)以及檔案名稱。 這 8 個字元中的每一個都代表檔案的一個屬性與 RPM 資料庫中所紀錄之屬性數值的比較結果。 一個單一的 . (句號)代表測試通過。 下列的字元代表某種失敗的測試:

假如您看到任何的輸出,請使用您的判斷力來決定是否您需要移除或重新安裝該套件,或者以其他方式來修復問題。