- 論壇徽章:
- 0
|
32.2. 使用 RPM
RPM 有五種基本操作模式(不包括軟件包建構(gòu)):安裝、刪除安裝、升級、查詢和校驗(yàn)。本章節(jié)包括對每一模式的總覽。想了解完整的選項(xiàng)和細(xì)節(jié),請使用
rpm --help 命令,或閱讀
第 32.5 節(jié)
中關(guān)于
RPM 的信息。
32.2.1. 尋找 RPM 軟件包
在使用 RPM 之前,你必須知道要到哪里去尋找它們。在互聯(lián)網(wǎng)上搜索會返回許多
RPM 倉庫,但是如果你要找的是由 Red Hat 建構(gòu)的 RPM 軟件包,你可以在下面幾個地方找到它們:
32.2.2. 安裝
典型的 RPM 軟件包名稱類似于
foo-1.0-1.i386.rpm。該文件名包括軟件包名稱(foo)、版本(1.0)、發(fā)行版本(1)、以及體系(i386)。安裝軟件包簡單之極,登錄為根用戶,然后在
shell 提示下鍵入下面的命令:
rpm -Uvh foo-1.0-1.i386.rpm
如果安裝成功,你會看到如下所示的輸出:
Preparing... ########################################### [100%]
1:foo ########################################### [100%]
如上面所示,RPM 顯示軟件包的名稱,然后在軟件包被安裝時在屏幕上打印井號來顯示安裝進(jìn)度。
從 RPM 版本 4.1 開始,在安裝或升級軟件包時會檢查軟件包的簽名。如果簽名校驗(yàn)失敗,你就會看到如下所示的錯誤消息:
error: V3 DSA signature: BAD, key ID 0352860f
如果它是新的、只針對文件頭的簽名,你會看到如下所示的錯誤消息:
error: Header V3 DSA signature: BAD, key ID 0352860f
如果你沒有安裝合適的鑰匙來校驗(yàn)簽名,消息中就會包含
NOKEY,如:
warning: V3 DSA signature: NOKEY, key ID 0352860f
關(guān)于校驗(yàn)軟件包簽名的詳細(xì)信息,請參閱
第 32.3 節(jié)
。
![]()
注記
如果你要安裝內(nèi)核軟件包,你應(yīng)該使用 rpm
-ivh。詳情請參閱
第30章
。
雖然安裝軟件包旨在簡單易行,但是你有時也會看到錯誤。
32.2.2.1. 軟件包已安裝
如果某軟件包的同一版本已經(jīng)安裝,你就會看到:
Preparing... ########################################### [100%]
package foo-1.0-1 is already installed
如果你在軟件包已安裝的情況下仍打算安裝同一版本的軟件包,你可以使用 --replacepkgs
選項(xiàng),它告訴 RPM 來忽略這個錯誤:
rpm -ivh --replacepkgs foo-1.0-1.i386.rpm
如果從 RPM 安裝的文件被刪除了,或者你想安裝 RPM 中的最初配置文件,該選項(xiàng)就會很有用。
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 選項(xiàng):
rpm -ivh --replacefiles foo-1.0-1.i386.rpm32.2.2.3. 未解決的依賴關(guān)系
RPM 軟件包可能“依賴”于其它軟件包,這意味著它們需要安裝其它軟件包才能正確運(yùn)行。如果你試圖安裝具有未解決依賴關(guān)系的軟件包,你會看到:
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,它通常會向你建議解決依賴關(guān)系所需的軟件包。在
Red Hat Linux 光盤或 Red Hat FTP 站點(diǎn)(或鏡像)上找到這個軟件包,使用以下命令來添加:
rpm -ivh foo-1.0-1.i386.rpm bar-2.0.20-3.i386.rpm
如果這兩個軟件包都安裝成功,你會看到:
Preparing... ########################################### [100%]
1:foo ########################################### [ 50%]
2:bar ########################################### [100%]
如果它不向你建議解決依賴關(guān)系所需的軟件包,你可以試用
--redhatprovides 選項(xiàng)來判定哪個軟件包包含所需的文件。你需要安裝
rpmdb-redhat 軟件包才能使用這個選項(xiàng)。
rpm -q --redhatprovides bar.so.2
如果包含 bar.so.2 的軟件包在來自
rpmdb-redhat 軟件包的安裝了的數(shù)據(jù)庫中,該軟件包的名稱就會被顯示:
bar-2.0.20-3.i386.rpm
如果你想強(qiáng)制安裝(不是好辦法,因?yàn)檐浖赡懿荒軌蛘_運(yùn)行),使用
--nodeps 選項(xiàng)。
32.2.3. 刪除安裝
刪除軟件包和安裝軟件包一樣簡單。在 shell 提示下鍵入下面的命令:
rpm -e foo
![]()
注記
注意,我們使用軟件包名稱
foo,而不是原始的軟件包文件
foo-1.0-1.i386.rpm。要刪除某軟件包,你需要把 foo 換成原始軟件包的實(shí)際名稱。
你在刪除安裝某軟件包時也會遇到依賴關(guān)系錯誤,當(dāng)另一個已安裝的軟件包依賴于你試圖刪除的軟件包時,依賴關(guān)系錯誤就會發(fā)生。例如:
Preparing... ########################################### [100%]
error: removing these packages would break dependencies:
foo is needed by bar-2.0.20-3.i386.rpm
要使 RPM 忽略這個錯誤,并強(qiáng)制刪除該軟件包(不是個好辦法,因?yàn)橐蕾囉谒能浖赡軣o法正常運(yùn)行),使用 --nodeps 選項(xiàng)。
32.2.4. 升級
升級軟件包和安裝類似。在 shell 提示下鍵入以下命令:
rpm -Uvh foo-2.0-1.i386.rpm
你在上面的例子里看不到的是,RPM
自動刪除 foo 軟件包的任何老版本。事實(shí)上,你可能想一直使用
-U 來安裝軟件包,因?yàn)榧幢銢]有安裝軟件包的任何先前版本,它也可以用來安裝該軟件包。
因?yàn)?RPM 對軟件包和配置文件執(zhí)行智能升級,你可能會看到和下面相似的消息:
saving /etc/foo.conf as /etc/foo.conf.rpmsave
這條消息意味著你對配置文件所作的改變可能不會和軟件包中的新配置文件“前向兼容”,因此,RPM
保存了你的原始文件,并安裝了一個新文件。你應(yīng)該調(diào)查一下這兩個配置文件的區(qū)別,然后盡快地解決這些區(qū)別來確保系統(tǒng)繼續(xù)正確運(yùn)行。
升級實(shí)際上是刪除和安裝的組合,因此,在
RPM 升級中,你除了遇到刪除和安裝中會遇到的錯誤外,還會看到另一個錯誤。如果
RPM 認(rèn)為你試圖升級到軟件包的老版本,你會看到:
package foo-2.0-1 (which is newer than foo-1.0-1) is already installed
要使 RPM 強(qiáng)制“升級”,使用
--oldpackage 選項(xiàng):
rpm -Uvh --oldpackage foo-1.0-1.i386.rpm32.2.5. 刷新
刷新軟件包和升級軟件包相似。在 shell 提示下鍵入以下命令:
rpm -Fvh foo-1.2-1.i386.rpm
RPM 的刷新選項(xiàng)比較在命令行上指定的軟件包的版本和你的系統(tǒng)上已安裝的版本。當(dāng)
RPM 的刷新選項(xiàng)處理的版本比你已安裝的版本更新,它就會被升級到更新的版本。然而,如果某軟件包先前沒有安裝,RPM
的刷新選項(xiàng)將不會安裝該軟件包。這和 RPM
的升級選項(xiàng)不同,因?yàn)椴还茉撥浖睦习姹臼欠褚驯话惭b,升級選項(xiàng)都會安裝該軟件包。
RPM 的刷新選項(xiàng)可以用于單個軟件包或一組軟件包。如果你剛剛下載了大量不同的軟件包,你只想升級那些已安裝在你的系統(tǒng)上的軟件包,刷新即可達(dá)到目的。如果使用刷新,你不必在使用
RPM 前從下載的軟件包組中刪除不必要的軟件包。
在這種情況下,你單使用下面的命令就可以了:
rpm -Fvh *.rpm
RPM 將只會自動升級那些已經(jīng)在系統(tǒng)上安裝的軟件包。
32.2.6. 查詢
使用 rpm -q 命令來查詢安裝的軟件包的數(shù)據(jù)庫。rpm -q foo
命令會顯示安裝的軟件包 foo 的名稱、版本、和發(fā)行號碼:
foo-2.0-1
![]()
注記
注意,我們使用的是軟件包名稱
foo。要查詢軟件包,你需要把
foo 換成實(shí)際軟件包名稱。
與其指定軟件包名稱,你可以和 -q 一起使用下列選項(xiàng)來指定你要查詢的軟件包。它們叫做軟件包指定選項(xiàng)。
-a 查詢所有已安裝的軟件包。
-f
會查詢擁有
的軟件包。當(dāng)指定文件時,你必須指定文件的完整路徑(如 /usr/bin/ls)。
-p
查詢軟件包
。
指定被查詢的軟件包要顯示哪些信息的方法多種多樣。以下選項(xiàng)用來選擇你要搜索的信息類型。它們叫做信息選擇選項(xiàng)。
-i 顯示軟件包信息,包括名稱、描述、發(fā)行版本、大小、制造日期、生產(chǎn)商,以及其它雜項(xiàng)。
-l 顯示軟件包所含的文件列表。
-s 顯示軟件包中所有文件的狀態(tài)。
-d 顯示被標(biāo)記為文檔(man 頁、info 頁、README 等等)的文件列表。
-c 顯示被標(biāo)記為配置文件的文件列表。你在安裝后改變這些文件來使軟件包適用于你的系統(tǒng)(譬如,sendmail.cf、passwd、inittab 等等)。
對于用來顯示文件列表的選項(xiàng),你可以在命令后添加
-v 來用你熟悉的 ls -l
格式來顯示文件列表。
32.2.7. 校驗(yàn)
校驗(yàn)軟件包比較從某軟件包安裝的文件和原始軟件包中的同一文件的信息。它校驗(yàn)每個文件的大小、MD5 值、權(quán)限、類型、所有者、以及組群。
rpm -V 命令校驗(yàn)軟件包。你可以查詢?nèi)魏诬浖x擇選項(xiàng)列舉的條目來指定要校驗(yàn)的軟件包。校驗(yàn)的最簡單用法是
rpm -V foo,它校驗(yàn)所有在 foo 軟件包內(nèi)的文件是否和最初安裝時一樣。例如:
要校驗(yàn)包含某一特定文件的軟件包:
rpm -Vf /bin/vi
要校驗(yàn)所有安裝了的軟件包:
rpm -Va
要根據(jù) RPM 軟件包文件來校驗(yàn)安裝了的軟件包:
rpm -Vp foo-1.0-1.i386.rpm
如果你懷疑 RPM 數(shù)據(jù)庫已被損壞,該命令就會很有用。
如果一切都被校驗(yàn)正確,就不會有輸出。如果出現(xiàn)矛盾,它們就會被顯示。輸出的格式為包括八個字符的字符串(c 代表配置文件),然后是文件名稱。這八個字符的每個字符都代表一種文件屬性的比較結(jié)果,所比較的是文件的屬性和 RPM
數(shù)據(jù)庫中記錄的屬性。單用一個 .(點(diǎn))意味著測試通過。下列字符代表某類測試失。
5 — MD5 校驗(yàn)和
S — 文件大小
L — 符號鏈接
T — 文件修改時間
D — 設(shè)備
U — 用戶
G — 組群
M — 模式(包括權(quán)限和文件類型)
? — 不可讀文件
如果你看到任何輸出,最好開動腦筋來判斷是應(yīng)該刪除還是重新安裝該軟件包,或用另一種方法來解決這個問題。
32.3. 檢查軟件包的簽名
如果你想校驗(yàn)?zāi)耻浖欠癖粨p壞或篡改過,只需檢查
md5sum。在 shell 提示下鍵入下面的命令(把
coolapp 換成
RPM 軟件包的文件名):
rpm -K --nogpg
你會看到消息“: md5
OK”。這條消息意味著文件在下載中沒有被損壞。要看到更詳細(xì)的消息,把命令中的
-K 換成 -Kvv。
另一方面,創(chuàng)建軟件包的開發(fā)者是不是值得信任?如果該軟件包使用開發(fā)者的 GnuPG
鑰匙(key)被簽名(signed),你就會知道這位開發(fā)者的身份確實(shí)如他們所言。
RPM 軟件包可以使用
Gnu 隱私衛(wèi)士(或稱
GnuPG)來簽名,從而幫助你肯定下載軟件包的可信任性。
GnuPG 是安全通訊工具;它是 PGP(一種電子隱私程序)加密技術(shù)的完全和免費(fèi)的替換品。使用
GnuPG,你可以驗(yàn)證文檔的有效性,在其它通訊者之間加密或解密數(shù)據(jù)。GnuPG 還具有解密和校驗(yàn)
PGP 5.x 文件的能力。
在 Red Hat Linux 的安裝過程中,GnuPG 被默認(rèn)安裝。這樣,你便可以立即開始使用 GnuPG
來校驗(yàn)?zāi)銖?Red Hat 收到的軟件包。首先,你需要導(dǎo)入 Red Hat 的公鑰。
32.3.1. 導(dǎo)入鑰匙
要校驗(yàn) Red Hat 軟件包,你必須導(dǎo)入 Red Hat GPG 公鑰。要導(dǎo)入公鑰,在 shell
提示下執(zhí)行以下命令:
rpm --import /usr/share/rhn/RPM-GPG-KEY
要顯示用來校驗(yàn) RPM 而安裝的鑰匙列表,執(zhí)行以下命令:
rpm -qa gpg-pubkey*
對于 Red Hat 公鑰而言,其輸出應(yīng)包括:
gpg-pubkey-db42a60e-37ea5438
要顯示關(guān)于某一指定鑰匙的細(xì)節(jié),使用rpm
-qi,其后跟隨前一命令的輸出:
rpm -qi gpg-pubkey-db42a60e-37ea543832.3.2. 校驗(yàn)軟件包的簽名
導(dǎo)入了建構(gòu)者的 GnuPG 公鑰后,要檢查 RPM 文件的 GnuPG 簽名,使用以下命令(把
換成 RPM 軟件包的名稱):
rpm -K
如果一切順利,你會看到這條消息:md5 gpg
OK。這意味著軟件包的簽名已被校驗(yàn),該軟件包沒有被損壞。
32.4. 用 RPM 在朋友面前大顯身手
RPM 對于管理系統(tǒng)、診斷和修正問題都極有用途。要理解它的選項(xiàng)的最佳途徑是通過示范。
可能你不小心刪除了一些文件,卻不能肯定刪除了哪些文件。如果你想校驗(yàn)整個系統(tǒng)來看一看缺少哪些文件,你可以試一試下面的命令:
rpm -Va
如果缺少某些文件或它們似乎被損壞,你可能應(yīng)該重新安裝該軟件包或刪除安裝然后再重新安裝該軟件包。
有時候,你可能會看到不認(rèn)識的文件。要發(fā)現(xiàn)哪個軟件包擁有它,你可以輸入:
rpm -qf /usr/X11R6/bin/ghostview
它的輸出和以下相似:
gv-3.5.8-22
我們可以在以下的假想情況下組合以上的兩個例子。假設(shè)你的 /usr/bin/paste
出了問題,你想校驗(yàn)擁有該程序的軟件包,但是你不知道哪個軟件包擁有
paste。你只需輸入以下命令就可以了:
rpm -Vf /usr/bin/paste
這樣,適當(dāng)?shù)能浖蜁恍r?yàn)。
你想知道關(guān)于某一特定的程序的詳細(xì)信息嗎?你可以試用下面的命令來查找擁有該程序的軟件包所附帶的文檔:
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
你可能會發(fā)現(xiàn)一個新的 RPM,但是你不知道它的用途。要尋找關(guān)于它的信息,使用下面的命令:
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.
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.
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.
以上不過是幾個例子。隨著你的使用經(jīng)驗(yàn)的增加,你會發(fā)現(xiàn)更多 RPM 的用途。
本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u1/46039/showart_1003449.html |
|