歡迎您光臨本站 註冊首頁

RedHat Linux 9軟體包管理

←手機掃碼閱讀     火星人 @ 2014-03-24 , reply:0

原貼由yo發表

[Hl.y]成員
UID: 861
精華: 28
積分: 961
帖子: 338
現金: 2376 圓
魅力: 9
閱讀許可權: 200
註冊: 2005-8-1



RedHat Linux 9軟體包管理

Red Hat Linux 系統上的所有軟體都被分成可被安裝、升級、或刪除的 RPM 軟體包。這個部分描述了如何使用圖形化和命令行工具來管理 Red Hat Linux 系統上的 RPM 軟體包。

32. 使用 RPM 來管理軟體包
RPM 軟體包管理器(RPM)是開放打包系統,任何人都可以使用。它在 Red Hat Linux,以及其它 Linux 和 UNIX 系統上運行。Red Hat, Inc. 鼓勵其它銷售商在他們自己的產品上使用 RPM 技術。RPM 按照 GPL 條款被發行。

對於終端用戶來說,RPM 簡化了系統更新。安裝、刪除安裝、升級 RPM 軟體包可以使用簡短的命令就可完成。RPM 維護一個已安裝軟體包和它們的文件的資料庫,因此,你可以在系統上使用功能強大的查詢和校驗。如果你更喜歡圖形化界面,你可以使用 軟體包管理工具來執行許多 RPM 命令。詳情請參閱 第33章 。

在升級中,RPM 處理配置文件時非常謹慎,因此你決不會丟失你定製的配置 — 這是你用普通的 .tar.gz 文件所無法達到的。

對於開發者來說,RPM允許你把軟體編碼和程序打包,然後提供給終端用戶。這個進程非常簡單,它能從你創建的單個文件或補丁中驅動。這種對你的「純凈」源碼、補丁和建構指令的清晰描述減輕了發行軟體新版本所帶來的維護負擔。

註記:因為 RPM 要對你的系統做適當改變,你必須是根用戶才能安裝、刪除、或升級某個 RPM 軟體包。


32.1. RPM 的設計目標
為了理解如何使用 RPM,我們應該先來了解 RPM 的設計目標:

可升級性
使用 RPM,你可以不必全盤重裝就可以在系統上升級個別組件。當你得到一個基於 RPM 的操作系統的新發行版本(如 Red Hat Linux),你不必重新安裝你的系統(基於其它打包系統的操作系統需要重裝)。RPM 允許智能化、自動化地就地升級你的系統。軟體包中的配置文件在升級中被保留,因此你不會丟失定製的設置。你不需要特殊的升級文件來升級某軟體包,因為在系統上安裝和升級軟體包使用同樣的 RPM 文件。

強大的查詢功能
RPM 被設計來提供強大的查詢功能。你可以在整個資料庫中搜索軟體包或某些特定文件。你還可以輕易地了解到哪個文件屬於哪個軟體包,軟體包來自哪裡。RPM 軟體包的文件包括在被壓縮的歸檔中,其中有定製的二進位檔頭,該檔頭內包含關於軟體包及其內容的信息,允許你快速簡捷地查詢個體軟體包。

系統校驗
另一項強大的功能是軟體包校驗。如果你擔心你可能刪除了某軟體包上的一個重要文件,只需校驗該軟體包即可。任何異常情況都會向你通知。到時,你可以在必要時重裝該軟體包。你修改過的配置文件在重裝中會被保留。

純凈源碼
一個重要的設計目標是允許使用與軟體的原創者所發行源碼一致的「純凈」軟體源碼。使用 RPM,你會有純凈源碼、使用過的補丁、以及完整的建構指令。這是一個重要的優越性。首先,如果程序的新版本被推出,你不必從頭開始編譯。你可以看一看補丁來判定你 可能 需要做什麼。使用這種技術,所有內編譯的默認值,以及為正確建構軟體而進行的任何改變都一目了然。

保持源碼純凈的目的似乎只對開發者來說是重要的,但是它也會給終端用戶帶來高質量的軟體。我們想在此感謝 BOGUS 的發行人員,感謝他們最先開創了純凈源碼這一概念。

32.2. 使用 RPM
RPM 有五種基本操作模式(不包括軟體包建構):安裝、刪除安裝、升級、查詢和校驗。本章節包括對每一模式的總覽。想了解完整的選項和細節,請使用 rpm --help 命令,或閱讀 第 32.5 節 中關於 RPM 的信息。

32.2.1. 尋找 RPM 軟體包
在使用 RPM 之前,你必須知道要到哪裡去尋找它們。在互聯網上搜索會返回許多 RPM 倉庫,但是如果你要找的是由 Red Hat 建構的 RPM 軟體包,你可以在下面幾個地方找到它們:

Red Hat Linux 光碟

Red Hat 勘誤網頁: http://www.redhat.com/apps/support/errata/

Red Hat FTP 鏡像網站: http://www.redhat.com/download/mirror.html

Red Hat 網路 — 關於 Red Hat 網路的詳情,請參閱第34章。

32.2.2.安裝
典型的 RPM 軟體包名稱類似於 foo-1.0-1.i386.rpm 。該文件名包括軟體包名稱( foo )、版本( 1.0 )、發行版本( 1 )、以及體系( i386 )。安裝軟體包簡單之極,登錄為根用戶,然後在 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,它通常會向你建議解決依賴關係所需的軟體包。在 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

你在上面的例子里看不到的是,RPM 自動刪除 foo 軟體包的任何老版本。事實上,你可能想一直使用 -U 來安裝軟體包,因為即便沒有安裝軟體包的任何先前版本,它也可以用來安裝該軟體包。

因為 RPM 對軟體包和配置文件執行智能升級,你可能會看到和下面相似的消息:

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

這條消息意味著你對配置文件所作的改變可能不會和軟體包中的新配置文件「前向兼容」,因此,RPM 保存了你的原始文件,並安裝了一個新文件。你應該調查一下這兩個配置文件的區別,然後儘快地解決這些區別來確保系統繼續正確運行。

升級實際上是刪除和安裝的組合,因此,在 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.刷新
刷新軟體包和升級軟體包相似。在 shell 提示下鍵入以下命令:

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

RPM 的刷新選項比較在命令行上指定的軟體包的版本和你的系統上已安裝的版本。當 RPM 的刷新選項處理的版本比你已安裝的版本更新,它就會被升級到更新的版本。然而,如果某軟體包先前沒有安裝,RPM 的刷新選項將不會安裝該軟體包。這和 RPM 的升級選項不同,因為不管該軟體包的老版本是否已被安裝,升級選項 都會 安裝該軟體包。

RPM 的刷新選項可以用於單個軟體包或一組軟體包。如果你剛剛下載了大量不同的軟體包,你只想升級那些已安裝在你的系統上的軟體包,刷新即可達到目的。如果使用刷新,你不必在使用 RPM 前從下載的軟體包組中刪除不必要的軟體包。

在這種情況下,你單使用下面的命令就可以了:

rpm -Fvh *.rpm

RPM 將只會自動升級那些已經在系統上安裝的軟體包。

32.2.6.查詢
使用 rpm -q 命令來查詢安裝的軟體包的資料庫。 rpm -q foo 命令會顯示安裝的軟體包 foo 的名稱、版本、和發行號碼:

foo-2.0-1
註記:注意,我們使用的是軟體包 名稱 foo 。要查詢軟體包,你需要把 foo 換成實際軟體包名稱。


與其指定軟體包名稱,你可以和 -q 一起使用下列選項來指定你要查詢的軟體包。它們叫做 軟體包指定選項 。

-a 查詢所有已安裝的軟體包。

-f 會查詢擁有 的軟體包。當指定文件時,你必須指定文件的完整路徑(如 /usr/bin/ls )。

-p 查詢軟體包

指定被查詢的軟體包要顯示哪些信息的方法多種多樣。以下選項用來選擇你要搜索的信息類型。它們叫做 信息選擇選項 。

-i 顯示軟體包信息,包括名稱、描述、發行版本、大小、製造日期、生產商,以及其它雜項。

-l 顯示軟體包所含的文件列表。

-s 顯示軟體包中所有文件的狀態。

-d 顯示被標記為文檔(man 頁、info 頁、README 等等)的文件列表。

-c 顯示被標記為配置文件的文件列表。你在安裝后改變這些文件來使軟體包適用於你的系統(譬如, sendmail.cf 、 passwd 、 inittab 等等)。

對於用來顯示文件列表的選項,你可以在命令后添加 -v 來用你熟悉的 ls -l 格式來顯示文件列表。

32.2.7.校驗
校驗軟體包比較從某軟體包安裝的文件和原始軟體包中的同一文件的信息。它校驗每個文件的大小、MD5 值、許可權、類型、所有者、以及組群。

rpm -V 命令校驗軟體包。你可以查詢任何 軟體包選擇選項 列舉的條目來指定要校驗的軟體包。校驗的最簡單用法是 rpm -V foo ,它校驗所有在 foo 軟體包內的文件是否和最初安裝時一樣。例如:

要校驗包含某一特定文件的軟體包:

rpm -Vf /bin/vi

要校驗所有安裝了的軟體包:

rpm -Va

要根據 RPM 軟體包文件來校驗安裝了的軟體包:

rpm -Vp foo-1.0-1.i386.rpm

如果你懷疑 RPM 資料庫已被損壞,該命令就會很有用。

如果一切都被校驗正確,就不會有輸出。如果出現矛盾,它們就會被顯示。輸出的格式為包括八個字元的字元串( c 代表配置文件),然後是文件名稱。這八個字元的每個字元都代表一種文件屬性的比較結果,所比較的是文件的屬性和 RPM 資料庫中記錄的屬性。單用一個 . (點)意味著測試通過。下列字元代表某類測試失敗:

5 — MD5 校驗和

S — 文件大小

L — 符號鏈接

T — 文件修改時間

D — 設備

U — 用戶

G — 組群

M — 模式(包括許可權和文件類型)

? — 不可讀文件

如果你看到任何輸出,最好開動腦筋來判斷是應該刪除還是重新安裝該軟體包,或用另一種方法來解決這個問題。

32.3.檢查軟體包的簽名
如果你想校驗某軟體包是否被損壞或篡改過,只需檢查 md5sum。在 shell 提示下鍵入下面的命令(把 coolapp 換成 RPM 軟體包的文件名):

rpm -K --nogpg

你會看到消息「 : md5 OK 」。這條消息意味著文件在下載中沒有被損壞。要看到更詳細的消息,把命令中的 -K 換成 -Kvv 。

另一方面,創建軟體包的開發者是不是值得信任?如果該軟體包使用開發者的 GnuPG 鑰匙(key) 被 簽名(signed) ,你就會知道這位開發者的身份確實如他們所言。

RPM 軟體包可以使用 Gnu 隱私衛士 (或稱 GnuPG )來簽名,從而幫助你肯定下載軟體包的可信任性。

GnuPG 是安全通訊工具;它是 PGP(一種電子隱私程序)加密技術的完全和免費的替換品。使用 GnuPG,你可以驗證文檔的有效性,在其它通訊者之間加密或解密數據。GnuPG 還具有解密和校驗 PGP 5. x 文件的能力。

在 Red Hat Linux 的安裝過程中,GnuPG 被默認安裝。這樣,你便可以立即開始使用 GnuPG 來校驗你從 Red Hat 收到的軟體包。首先,你需要導入 Red Hat 的公鑰。

32.3.1.導入鑰匙
要校驗 Red Hat 軟體包,你必須導入 Red Hat GPG 公鑰。要導入公鑰,在 shell 提示下執行以下命令:

rpm --import /usr/share/rhn/RPM-GPG-KEY

要顯示用來校驗 RPM 而安裝的鑰匙列表,執行以下命令:

rpm -qa gpg-pubkey*

對於 Red Hat 公鑰而言,其輸出應包括:

gpg-pubkey-db42a60e-37ea5438

要顯示關於某一指定鑰匙的細節,使用 rpm -qi ,其後跟隨前一命令的輸出:

rpm -qi gpg-pubkey-db42a60e-37ea5438

32.3.2.校驗軟體包的簽名
導入了建構者的 GnuPG 公鑰后,要檢查 RPM 文件的 GnuPG 簽名,使用以下命令(把 換成 RPM 軟體包的名稱):

rpm -K

如果一切順利,你會看到這條消息: md5 gpg OK 。這意味著軟體包的簽名已被校驗,該軟體包沒有被損壞。

竅門:關於 GnuPG 的詳細信息,請參閱附錄 B。


32.4.用 RPM 在朋友面前大顯身手
RPM 對於管理系統、診斷和修正問題都極有用途。要理解它的選項的最佳途徑是通過示範。

可能你不小心刪除了一些文件,卻不能肯定刪除了哪些文件。如果你想校驗整個系統來看一看缺少哪些文件,你可以試一試下面的命令:

rpm -Va

如果缺少某些文件或它們似乎被損壞,你可能應該重新安裝該軟體包或刪除安裝然後再重新安裝該軟體包。

有時候,你可能會看到不認識的文件。要發現哪個軟體包擁有它,你可以輸入:

rpm -qf /usr/X11R6/bin/ghostview

它的輸出和以下相似:

gv-3.5.8-22

我們可以在以下的假想情況下組合以上的兩個例子。假設你的 /usr/bin/paste 出了問題,你想校驗擁有該程序的軟體包,但是你不知道哪個軟體包擁有 paste 。你只需輸入以下命令就可以了:

rpm -Vf /usr/bin/paste

這樣,適當的軟體包就會被校驗。

你想知道關於某一特定的程序的詳細信息嗎?你可以試用下面的命令來查找擁有該程序的軟體包所附帶的文檔:

rpm -qdf /usr/bin/free

它的輸出和以下相似:

/usr/share/doc/procps-2.0.11/BUGS
/usr/share/doc/procps-2.0.11/NEWS
/usr/share/doc/procps-2.0.11/TODO
/usr/share/man/man1/free.1.gz
/usr/share/man/man1/oldps.1.gz
/usr/share/man/man1/pgrep.1.gz
/usr/share/man/man1/pkill.1.gz
/usr/share/man/man1/ps.1.gz
/usr/share/man/man1/skill.1.gz
/usr/share/man/man1/snice.1.gz
/usr/share/man/man1/tload.1.gz
/usr/share/man/man1/top.1.gz
/usr/share/man/man1/uptime.1.gz
/usr/share/man/man1/w.1.gz
/usr/share/man/man1/watch.1.gz
/usr/share/man/man5/sysctl.conf.5.gz
/usr/share/man/man8/sysctl.8.gz
/usr/share/man/man8/vmstat.8.gz

你可能會發現一個新的 RPM,但是你不知道它的用途。要尋找關於它的信息,使用下面的命令:

rpm -qip crontabs-1.10-5.noarch.rpm

它的輸出看起來和以下相似:

Name : crontabs Relocations: (not relocateable)
Version : 1.10 Vendor: Red Hat, Inc.
Release : 5 Build Date: Fri 07 Feb 2003 04:07:32 PM EST
Install date: (not installed) Build Host: porky.devel.redhat.com
Group : System Environment/Base Source RPM: crontabs-1.10-5.src.rpm
Size : 1004 License: Public Domain
Signature : DSA/SHA1, Tue 11 Feb 2003 01:46:46 PM EST, Key ID fd372689897da07a
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Summary : Root crontab files used to schedule the execution of programs.
Description :
The crontabs package contains root crontab files. Crontab is the
program used to install, uninstall, or list the tables used to drive the
cron daemon. The cron daemon checks the crontab files to see when
particular commands are scheduled to be executed. If commands are
scheduled, then it executes them.

也許你想指定 crontabs RPM 會安裝哪些文件。你可以輸入下面的命令:

rpm -qlp crontabs-1.10-5.noarch.rpm

它的輸出看起來和下面相似:

Name : crontabs Relocations: (not relocateable)
Version : 1.10 Vendor: Red Hat, Inc.
Release : 5 Build Date: Fri 07 Feb 2003 04:07:32 PM EST
Install date: (not installed) Build Host: porky.devel.redhat.com
Group : System Environment/Base Source RPM: crontabs-1.10-5.src.rpm
Size : 1004 License: Public Domain
Signature : DSA/SHA1, Tue 11 Feb 2003 01:46:46 PM EST, Key ID fd372689897da07a
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Summary : Root crontab files used to schedule the execution of programs.
Description :
The crontabs package contains root crontab files. Crontab is the
program used to install, uninstall, or list the tables used to drive the
cron daemon. The cron daemon checks the crontab files to see when
particular commands are scheduled to be executed. If commands are
scheduled, then it executes them.

以上不過是幾個例子。隨著你的使用經驗的增加,你會發現更多 RPM 的用途。

[火星人 ] RedHat Linux 9軟體包管理已經有663次圍觀

http://coctec.com/docs/linux/show-post-132541.html