Scroll to navigation

rpm(8) Red Hat Linux rpm(8)

NAME

rpm - Red Hat 包管理器

總覽

rpm [選項]

描述

rpm是一個很有用的包管理器, 可以用於生成, 安裝, 查詢, 核實, 更新以及卸載單個套件. 一個 通常包括一個檔案檔以及關於包 的信息, 比如名字, 版本, 描述等.
必須選取下列基本模式中一個: 初始化數據庫, 重新生成數據庫, 生成包, 重新編譯包, 從Tar包生成RPM包, 查詢, 顯示查詢標簽, 安裝, 更新, 卸載, 核實, 簽名檢查, 再簽名, 添加簽名, 設置所有者和組 以及 顯示配置.
數據庫維護:
 
rpm -i [--initdb]
 
rpm -i [--rebuilddb]
生成:
 
rpm [-b|t] [package_spec]+
 
rpm [--rebuild] [sourcerpm]+
 
rpm [--tarbuild] [tarredsource]+
 
查詢:
 
rpm [--query] [queryoptions]
 
rpm [--querytags]
 
維護已安裝的包:
 
rpm [--install] [installoptions] [package_file]+
 
rpm [--freshen|-F] [installoptions] [package_file]+
 
rpm [--uninstall|-e] [uninstalloptions] [package]+
 
rpm [--verify|-V] [verifyoptions] [package]+
 
簽名:
 
rpm [--verify|-V] [verifyoptions] [package]+
 
rpm [--resign] [package_file]+
 
rpm [--addsign] [package_file]+
 
Miscellaneous:
 
rpm [--showrc]
 
rpm [--setperms] [package]+
 
rpm [--setgids] [package]+
 

普通選項

這些選項可以各種不同的方式使用.
-vv
將列印出許多難以閱讀的調試信息.
--quiet
列印盡可能少的信息 - 普通只展示錯誤訊息.
--help
給出比常規更多的用法信息.
--version
在單獨一個行裏給出所用 rpm 的版本號
--rcfile <filelist>
<filelist>裏列出了一些檔案, 各檔案之間以冒號分隔, rpm 順序讀取這些檔案以獲得配置信息. <filelist>預設 是 /usr/lib/rpm/rpmrc:/etc/rpmrc:~/.rpmrc. 列表中的第一個檔案(/usr/lib/rpm/rpmrc)且只有這個檔案 必須存在, 代字符~指向 $HOME的值.
--root <dir>
對所有操作均將<dir>視為系統根目錄. 注意這意味著對數 據庫的讀或修改操作都將是在 <dir>目錄下進行, 並且稿本 的 prepost操作都是在做了以 <dir>為根目錄的chroot() 之後進行.
--dbpath <path>
依照<path>使用RPM的數據庫.
--justdb
更新只針對數據庫,而不是整個檔案系統.
--ftpproxy <host>, --httpproxy <host>
<host>為FTP或HTTP的代理伺服器. 參閱 FTP/HTTP 選項.
--ftpport <port>, --httpport <port>
<port>為FTP或HTTP的代理伺服器的端口. 參閱 FTP/HTTP 選項.
--pipe <cmd>
通過管道將rpm的輸出輸入到命令<cmd>.

安裝和升級選項

通常的rpm安裝命令如下:
rpm -i [install-options] <package_file>+
這樣將安裝一個新的包. 通常的rpm升級命令如下:
rpm -U [install-options] <package_file>+
這樣將當前已安裝的包升級或新安裝到一個新的RPM版本. 升級和 安裝是一樣的, 區別在於升級要將所有別的版本的包從系統移去.
rpm [-F|--freshen] [install-options] <package_file>+
這樣也升級包, 但只有在系統存在一個更早版本的包時候才使用這 種方式.
如果包在安裝之前要先進行下載, <package_file>應該指明為一個 ftp或者http URL. 要得到關於RPM包生成的ftp和http支持的信息, 可以參閱 FTP/HTTP 選項.
--force
與使用--replacepkgs, --replacefiles, 以及 --oldpackage效果相同
-h, --hash
包檔如果沒有被解包, 列印50個破折號. 配合 -v使用可以 使得有更好的展示.
--oldpackage
允許用舊版本的包取代較新的版本.
--percent
給出檔案從包檔解包的百分比. 該項的作用是為了使rpm相 比於別的工具更容易使用.
--replacefiles
即使要安裝的包會取代別的已安裝包的檔案, 也安裝該包.
--replacepkgs
即使包的部分內容已安裝在系統裏,也安裝該包.
--allfiles
安裝或升級包裏所有的缺失檔案,不管其是否存在.
--nodeps
在安裝或升級包之前不做依賴檢查.
--noscripts
不執行安裝前或安裝後稿本
--notriggers
不執行由該包的安裝所激發的稿本
--ignoresize
安裝該包前不檢查mount檔案系統是否有足夠的磁碟空間.
--excludepath <path>
不安裝檔名以路徑<path>開頭的檔案.
--excludedocs
不安裝任何標記為文件的檔案(包括手冊頁及文本信息檔案).
--includedocs
安裝文件檔案, 這是預設的操作.
--test
不安裝包, 只是簡單地檢查並報告可能的沖突.
--ignorearch
允許安裝或升級其體系與主機不匹配的二進制RPM包.
--ignoreos
允許安裝或升級其作業系統與主機不匹配的二進制RPM包.
--prefix <path>
對於可浮動包, 這將把安裝前綴設置到 <path>.
--relocate <oldpath>=<newpath>
將檔案從<oldpath>改置到<newpath>, 這使得可以浮動包.
--badreloc
與--relocate配合使用, 強制改置不可浮動的包.
--noorder
安裝時對包不重新排序, 正常在安裝時應該重新排序包列 表, 以滿足依賴性.

查詢選項

rpm的查詢命令通常的格式如下:
rpm -q [query-options]
可以制定包信息的列印格式, 這時要用 [--queryformat|-qf]選項, 格式串跟在選項後面.
查詢格式由標準 printf(3)格式的版本決定. 格式由靜態字符串 (包括除了換行符, tab, 以及其它的特殊字符之外的標準C字符), 以及 printf(3)類型格式符. 如果 rpm已經知道列印類型, 則類型說明就必須被忽略, 並且以要列印的頭部tag的名字取代, 該名字被括在 {}之間. 而且tag的 RPMTAG_部分也被忽略.
可以用 :typetag來改變輸出格式.當前支持的有如下類型: octal, date, shescape, perms, fflags, 以及 depflags.
例如,要只列印被查詢包的名字,可以用 %{名稱}作為格式字符串. 要在兩個欄裏列印包名及分布信息,可以用 %-30{名稱}%{分布}.
當被 --querytags參數激發時,rpm將列出所有tags.
查詢選項有兩種子設置: 包選擇和信息選擇.
包選擇選項:
 
<package_name>
查詢名為<package_name>的安裝包.
-a, --all
查詢所有安裝的包.
--whatrequires <capability>
查詢所有需要<capability>才能提供適當功能的包.
--whatprovides <virtual>
查詢所有提供<virtual>功能的包.
-f <file>, --file <file>
查詢擁有檔案<file>的包.
-g <group>, --group <group>
查詢屬於???組<group>的包
-p <package_file>
查詢一個沒有安裝的包<package_file>. <package_file>可以被說明為ftp或http URL,這時包頭會被下載並被查詢. 要得到關於RPM生成的ftp和http客戶端支持的信息,請參閱 FTP/HTTP OPTIONS
--specfile <specfile>
像對待一個包一樣Parse並查詢<specfile>. 雖然不是所有的信息(例如檔案列表)可用,這種查詢類型 允許rpm在不用寫一個specfile parser的情況下從spec files提取信息.
--querybynumber <num>
直接查詢<num>數據庫入口,該選項在調試時很有用處.
--triggeredby <pkg>
查詢由包<pkg>所激發的包.
信息選擇選項:
 
-i
展示包信息,包括名字,版本,以及描述.???
-R, --requires
列出該包所依賴的別的包.
--provides
列出該包所提供的功能.
--changelog
展示該包的變更信息.
-l, --list
列出該包的檔案.
-s, --state
展示該包各檔案的狀態信息,因此該選項實際隱含了-l選項. 檔案狀態可以是如下之一: normal, not installed, 或者 replaced.
-d, --docfiles
只列出文件檔案(隱含-l選項).
-c, --configfiles
只列出配置檔案(隱含-l選項).
--scripts
如果有的話,就列出該包裏作為安裝或卸載過程一部分的特殊shell稿本.
--triggers, --triggerscripts
如果有的話,展示該包包含的激發子稿本.
--dump
如下的啞檔案信息: path size mtime md5sum mode owner group isconfig isdoc rdev symlink. 該選項必須至少配合如下選項之一: -l, -c, -d使用.
--last
按包的安裝時間進行排序,這使得最新的包在序列頂部.
--querybypkg
列出每個包裏的所有檔案.
--triggerscripts
顯示所選包的所有激發子稿本.

核實選項

rpm -V|-y|--verify [verify-options]
將所安裝包的檔案信息和源發包的檔案信息以及在rpm數據庫的檔案信息做比較, 以此來核實包. 對於別的東西,則??? 任何的差異都會展示.包的說明選項與查詢選項相同.
對於不是從包安裝的檔案,例如在安裝的時候用" --excludedocs" 選項排除了的文件檔案,將在沒有提示的情況下被忽略掉.
核實選項可以使用如下模式:
--nofiles
核實時忽略缺失檔案
--nomd5
核實時忽略MD5校驗錯誤
--nopgp
核實時忽略PGP校驗錯誤
--nofiles
核實時忽略缺失檔案
輸出的格式是一個八個字符的字符串,和一個可能有的" c", 指明後面是一個配置檔案,以及後面的檔名. 八個字符中的每一個都代表著一個檔案屬性與保存在RPM的數據庫中的屬性紀錄值的比較結果. 單個的" ."(句號)表明檢查通過.下列字符代表特定檢查的失敗:
5
MD5校驗和
S
檔案大小
L
符號連接
T
修改時間
D
設備
U
使用者
G
M
模式(包括許可和檔案類型)

簽名檢查

通常的rpm簽名檢查命令如下:
rpm --checksig <package_file>+
這將檢查包 <package_file>的PGP簽名以確保其完整性和源發性. 可以從配置檔案讀取PGP配置信息.細節請查閱 PGP 簽名 部分.

卸載選項

rpm卸載命令的通常格式如下:
rpm -e <package_name>+
--allmatches
將移去與<package_name>相匹配的所有版本的包.正常的話,如果<package_name>與多個包相匹配,就會給出錯誤訊息.
--noscripts
不執行安裝前或安裝後稿本.
--notriggers
不執行由移去該包所激發的稿本
--nodeps
卸載前不檢查依賴性
--test
不真正卸載任何東西,只是遍歷該動作.配合-vv選項會很有用處.

生成選項

The general form of an rpm build command is

rpm -[b|t]O [build-options] <package_spec>+
The argument used is -b if a spec file is being used to build the package and -t if RPM should look inside of a gzipped (or compressed) tar file for the spec file to use. After the first argument, the next argument ( O) specifies the stages of building and packaging to be done and is one of: rpm通常的生成選項如下:

rpm -[b|t]O [build-options] <package_spec>+
-bp
Executes the "%prep" stage from the spec file. Normally this involves unpacking the sources and applying any patches.
-bl
Do a "list check". The "%files" section from the spec file is macro expanded, and checks are made to verify that each file exists.
-bc
Do the "%build" stage from the spec file (after doing the prep stage). This generally involves the equivalent of a "make".
-bi
Do the "%install" stage from the spec file (after doing the prep and build stages). This generally involves the equivalent of a "make install".
-bb
生成一個二進制包(在完成prep, build, 以及 install階段之後)
-bs
只生成源包(在完成prep, build, 以及 install階段之後)
-ba
生成二進制包和源包(在完成prep, build, 以及 install階段之後)
還可以使用的選項如下:
--short-circuit
忽略導致specified階段(比如,忽略所有導致specified階段的階段). 只有與 -bc 以及 -bi合用才有效.
--timecheck
設置"timecheck"的值(0-?).該值也可以通過定義宏"_timecheck"來配置. timecheck值以秒為單位,表示一個包生成的最大年齡.如果時間超過了該值, 則對所有檔案皆給出警告訊息.
--clean
在包完成之後,移去生成樹.
--rmsource
在完成包的生成之後移去源和spec檔案 (也可以單獨使用,比如:" rpm --rmsource foo.spec").
--test
不執行任何生成階段.在測試spec檔案時很有用處.
--sign
在包中嵌入一個PGP簽名.該簽名可以用來核實該包的完整性和源發性. 配置細節可以察看 PGP 簽名 一節.
--buildroot <dir>
在生成包的時候,用目錄<dir>覆蓋包的生成根目錄tag.
--target <platform>
在生成包的時候,將<platform>解釋為arch-vendor-os,並且相應地設置 宏 _target, _target_arch 以及 _target_os.
--buildarch <arch>
在生成包的時候,將architecture設置到<arch>. 該選項在RPM 3.0中由於 --target 的出現而被拋棄.
--buildos <os>
在生成包的時候,將architecture設置到<os>. 該選項在RPM 3.0中由於 --target 的出現而被拋棄.

重新生成以及重新編譯選項

There are two other ways to invoke building with rpm: 有兩種不同的方法用rpm重新生成包:
rpm --recompile <source_package_file>+
rpm --rebuild <source_package_file>+
當以這種方式激發的時候, rpm安裝指明的源包,並且完成prep,compile,install工作. 另外, --rebuild生成一個新的二進制包. 當包的生成完成的時候,生成所用目錄被移去(就如同使用了 --clean), 而且該包的源和spec檔案也要移走.

簽名一個已存在的RPM

rpm --resign <binary_package_file>+
該選項生成並將新簽名插入所列出的包裏.已存在的簽名會被移走.
rpm --addsign <binary_package_file>+
該選項生成並將新簽名附加到所列出的包的簽名之後.

PGP 簽名

要使用簽名特性,RPM必須要能夠運行PGP(要安裝了PGP並且你可以訪問它), 而且還需PGP能找到一個帶有RPM公鑰的公鑰環. 預設情況下,RPM使用PGP的預設設置(著名的PGPPATH)來查找鑰環. 如果你的鑰環並不在PGP所期望它們處在的地方,則你需要配置宏
_pgp_path
將其設為要使用的PGP鑰環所在的位置.
如果你想要簽名一個你自己生成的包,你還必須創建自己的公鑰和密鑰對(請參閱PGP手冊). 還需要配置簽名類型宏:
_signature
目前只支持pgp.還有使用者名宏:
_pgp_name
指明想要使用其鍵去簽名你的包的使用者.
在生成包的時候,可以將--sign加到命令行裏.這樣只需給出你的口令短語, 就可以在生成包的同時對其簽名.
比如,要想以使用者"John Doe <jdoe@foo.com>"的身份,用在 /etc/rpm/.pgp的鑰環,去簽名一個包,就應該將
%_signature
pgp
%_pgp_name
/etc/rpm/.pgp
%_pgp_name
John Doe <jdoe@foo.com>"
包括在一個宏配置檔案裏. 對於系統的配置可以使用 /etc/rpm/macros, 而對於個人配置可以使用 ~/.rpmmacros.

重新生成數據庫選項

rpm重建數據庫的命令是
rpm --rebuilddb
要重建一個新的數據庫,可以:
rpm --initdb
對這些模式唯一的選項是 --dbpath--root.

SHOWRC

運行
rpm --showrc
展示一些設置在 rpmrc檔案裏的值,RPM所有選項都會利用這些值.

FTP/HTTP選項

RPM包括簡單的FTP和HTTP客戶端程式,這樣可以簡化那些從internet取得的包的安裝和查詢. 用於安裝,升級,以及查詢操作的包檔案可以說明為ftp或者http格式的URL:
ftp://<user>:<password>@hostname:<port>/path/to/package.rpm
如果忽略掉 :password部分,會提示要求給出口令(每個使用者/主機名對一次) 如果使用者名和口令都忽略了,就使用匿名ftp. 總是使用消極(PASV) ftp傳送.
RPM允許使用下列操作輔助ftp URLs
--ftpproxy <hostname>
主機<hostname>將被作為所有ftp傳輸的代理伺服器使用, 這樣允許使用者通過使用了代理系統的防火牆機器來做ftp傳輸. 該選項也可以通過配置宏 _ftpproxy來指明.
--ftpport <port>
用該TCP<端口>號取代預設的端口去連接代理ftp伺服器. 該選項也可以通過配置宏 _ftpport來指明.
RPM允許使用下列操作輔助http URLs
--httpproxy <hostname>
將主機<主機名>作為所有http傳輸的代理伺服器使用. 該選項可以通過配置宏 _httpproxy來指明.
--httpport <port>
用該TCP<端口>號取代預設的端口去連接代理http伺服器. 該選項也可以通過配置宏 _httpport來指明.

檔案

/usr/lib/rpm/rpmrc
/etc/rpmrc
~/.rpmrc
/var/lib/rpm/packages
/var/lib/rpm/pathidx
/var/lib/rpm/nameidx
/tmp/rpm*

另見

glint(8), rpm2cpio(8) http://www.rpm.org/

作者

Marc Ewing <marc@redhat.com>
Jeff Johnson <jbj@redhat.com>
Erik Troan <ewt@redhat.com>

[中文版維護人]

mapping <email>

[中文版最新更新]

2001/7/21

《Linuxfourm 中文MAN-PAGE計劃》

http://cmpp.linuxforum.net
1998年12月22日 Red Hat Software