rpm 是一个强大的 软件包管理器,可以用来构建,安装,查询,校验,升级和卸载单独的软件打包。一个 打包 包括文件的归档,以及用来安装和卸载归档文件的元信息。元信息包括辅助脚本,文件属性以及打包的描述性信息。打包 有两种,二进制打包,用来封装要安装的软件;源代码打包,包含源代码以及为生成二进制打包,必要的文件。
AD:
NAME
rpm - RPM 软件包管理器
SYNOPSIS
查询和校验软件包:
rpm {-q|--query} [select-options] [query-options]
rpm {-V|--verify} [select-options] [verify-options]
rpm --import PUBKEY ...
rpm {-K|--checksig} [--nosignature] [--nodigest]
PACKAGE_FILE ...
安装,升级和卸载软件包:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--repackage] [--test] PACKAGE_NAME ...
其他:
rpm {--initdb|--rebuilddb}
rpm {--addsign|--resign} PACKAGE_FILE ...
rpm {--querytags|--showrc}
rpm {--setperms|--setugids} PACKAGE_NAME ...
选择选项
[PACKAGE_NAME] [-a,--all] [-f,--file FILE]
[-g,--group GROUP] {-p,--package PACKAGE_FILE]
[--fileid MD5] [--hdrid SHA1] [--pkgid MD5] [--tid TID]
[--querybynumber HDRNUM] [--triggeredby PACKAGE_NAME]
[--whatprovides CAPABILITY] [--whatrequires CAPABILITY]
查询选项
[--changelog] [-c,--configfiles] [-d,--docfiles] [--dump]
[--filesbypkg] [-i,--info] [--last] [-l,--list]
[--provides] [--qf,--queryformat QUERYFMT]
[-R,--requires] [--scripts] [-s,--state]
[--triggers,--triggerscripts]
校验选项
[--nodeps] [--nofiles] [--noscripts]
[--nodigest] [--nosignature]
[--nolinkto] [--nomd5] [--nosize] [--nouser]
[--nogroup] [--nomtime] [--nomode] [--nordev]
安装选项
[--aid] [--allfiles] [--badreloc] [--excludepath OLDPATH]
[--excludedocs] [--force] [-h,--hash]
[--ignoresize] [--ignorearch] [--ignoreos]
[--includedocs] [--justdb] [--nodeps]
[--nodigest] [--nosignature] [--nosuggest]
[--noorder] [--noscripts] [--notriggers]
[--oldpackage] [--percent] [--prefix NEWPATH]
[--relocate OLDPATH=NEWPATH]
[--repackage] [--replacefiles] [--replacepkgs]
[--test]
DESCRIPTION
rpm 是一个强大的 软件包管理器,可以用来构建,安装,查询,校验,升级和卸载单独的软件打包。一个 打包 包括文件的归档,以及用来安装和卸载归档文件的元信息。元信息包括辅助脚本,文件属性以及打包的描述性信息。打包 有两种,二进制打包,用来封装要安装的软件;源代码打包,包含源代码以及为生成二进制打包,必要的文件。
必须选择下列模式之一: Query 查询, Verify 校验, Signature Check 检查签名,Install/Upgrade/Freshen 安装/升级/更新, Uninstall 卸载, Initialize Database 初始化数据库, Rebuild Database 重构数据库, Resign 重签名, Add Signature 添加签名, Set Owners/Groups 设置属主, Show Querytags 显示查询标记, 以及 Show Configuration 显示配置.
一般选项
这些选项可以用在所有不同的模式中。
-
-?, --help
- 输出更长的帮助信息。 --version
- 输出一行信息,包括使用的 rpm 的版本号。 --quiet
- 输出尽可能少的信息 - 通常只有错误会显示。 -v
- 输出冗余信息 - 通常,常规的进度信息将显示。 -vv
- 输出大量丑陋的调试信息。 --rcfile FILELIST
- FILELIST 中冒号分隔的每个文件名都被 rpm 按顺序读取,从中获得配置信息。只有列表的第一个文件必须存在,波浪线将被替换为 $HOME。默认的 FILELIST 是 /usr/lib/rpm/rpmrc: /usr/lib/rpm/redhat/rpmrc: /etc/rpmrc: ~/.rpmrc --pipe CMD
- 将 rpm 的输出通过管道送到命令 CMD。 --dbpath DIRECTORY
- 使用 DIRECTORY 中的数据库,而不是默认的路径 /var/lib/rpm --root DIRECTORY
- 以 DIRECTORY 作为根文件系统,进行所有操作。这意味着将使用 DIRECTORY 中的数据库来进行依赖性检测,任何小程序 (也就是安装中的 %post 和构建中的 %prep) 都将在一个 chroot(2) 到 DIRECTORY 之后执行。
安装和升级选项
安装命令的一般形式是
rpm {-i|--install} [install-options] PACKAGE_FILE ...
这样安装了一个新软件包。
升级命令的一般形式是
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
这样安装或升级已安装的软件包到新版本。它与安装类似,只是所有其他版本的打包在新软件包安装后都将移除。
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
仅当系统中存在更早的版本时,这样会升级软件包。PACKAGE_FILE 必须指定为 ftp 或http URL,这样软件包可以在安装之前去下载。参见 FTP/HTTP OPTIONS 中有关 rpm 的内嵌ftp 和 http 客户端支持。
-
--aid
- 需要时将建议的软件包加入事务集。 --allfiles
- 安装或升级软件包中所有 missingok 文件,哪怕它们已经存在。 --badreloc
- 与 --relocate 搭配使用,允许所有文件的重定位,而不仅仅是在二进制打包中,重定位提示包含的那些 OLDPATH。 --excludepath OLDPATH
- 不安装名称以 OLDPATH 开始的文件。 --excludedocs
- 不安装任何标记为文档的文件 (包括手册页和 texinfo)。 --force
- 与使用 --replacepkgs, --replacefiles, 以及 --oldpackage 相同。 -h, --hash
- 在打包被解压时,输出 50 个 hash 符号 (#),用来与 -v|--verbose 配合,得到漂亮一点的输出。 --ignoresize
- 安装前不检测已挂载文件系统的空闲空间。 --ignorearch
- 允许安装或升级,即使二进制打包的体系结构与主机不匹配。 --ignoreos
- 允许安装或升级,即使二进制打包的操作系统与主机不匹配。 --includedocs
- 安装文档文件。这是默认的行为。 --justdb
- 只更新数据库,不更新文件系统。 --nodigest
- 读取时不校验打包或头部校验。 --nosignature
- 读取时不校验打包或头部签名。 --nodeps
- 在安装或升级前,不进行依赖性检测。 --nosuggest
- 不建议提供了所需依赖关系的软件包。 --noorder
- 不为安装重排序。通常软件包列表会被重排序,以满足依赖性关系。 --noscripts
- --nopre
- --nopost
- --nopreun
- --nopostun
-
不执行对应的小程序。
--noscripts 选项与
--nopre --nopost --nopreun --nopostun
等价,将 %pre, %post, %preun, 和 %postun 小程序全部关闭。
--notriggers
- --notriggerin
- --notriggerun
- --notriggerpostun
-
不执行任何对应的触发小程序。
--notriggers 选项与
--notriggerin --notriggerun --notriggerpostun
等价,将 %triggerin, %triggerun, 和 %triggerpostun 小程序全部关闭。
--oldpackage
- 允许用旧软件包替换一个新软件包。 --percent
- 打印从软件包中解压文件的百分比。这是为了使 rpm 在其他工具中运行时简单一些。 --prefix NEWPATH
- 对于可重定位的包,将以软件包重定位提示的安装前缀开始的所有文件路径转换为以 NEWPATH 开始。 --relocate OLDPATH = NEWPATH
- 对于克重定位的二进制打包,将软件包重定位提示中,以 OLDPATH 开始的文件路径转换为以 NEWPATH 开始。这一选项可以使用多次,如果软件包中多个 OLDPATH 要重定位的话。 --repackage
- 在卸载前重新打包文件。过去安装的打包将根据宏 %_repackage_name_fmt 命名,将创建于宏 %_repackage_dir 指定的目录中 (默认值是 /var/spool/repackage)。 --replacefiles
- 安装软件包,即使他们替换了其他已安装的软件包的文件。 --replacepkgs
- 安装软件包,即使其中有些软件包已经被安装到了系统中。 --test
- 不安装软件包,仅仅检测并报告可能的冲突。
卸载选项
卸载命令的一般形式是
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--repackage] [--test] PACKAGE_NAME ...
同时还可以用下列选项:
-
--allmatches
- 删除匹配 PACKAGE_NAME 的软件包的所有版本。通常情况下,如果 PACKAGE_NAME 匹配多个软件包将导致错误。 --nodeps
- 在卸载前不检测依赖关系。 --noscripts
- --nopreun
- --nopostun
-
不执行相应的小程序。
--noscripts 选项在卸载过程中等价于
--nopreun --nopostun
将 %preun, 和 %postun 小程序的执行关闭。
--notriggers
- --notriggerun
- --notriggerpostun
-
不执行相应的触发小程序。
--notriggers 选项等价于
--notriggerun --notriggerpostun
将 %triggerun, 和 %triggerpostun 小程序的执行关闭。
--repackage
- 卸载前重新打包文件。过去安装的软件包将根据宏 %_repackage_name_fmt 命名,存放到宏 %_repackage_dir 定义的目录中 (默认值是 /var/spool/repackage)。 --test
- 不真正卸载任何东西,仅仅尝试它们。与 -vv 选项联合使用,在调试时很有用。
查询选项
查询命令的一般形式是
rpm {-q|--query} [select-options] [query-options]
可以指定输出时软件包信息的格式。为此,使用选项
--qf|--queryformat QUERYFMT
附带 QUERYFMT 格式化字符串。查询命令是标准的 printf(3) 格式的修改版本。格式包括静态字符串 (可能包括标准的 C 转义字符,新行符,跳格以及其他特殊字符) 以及 printf(3)类型标记。由于 rpm 已知输出类型,因此应当忽略类型标记,使用头部字段名来代替,包含在{} 中。字段名是大小写不敏感的,起始的 RPMTAG_ 部分可以被忽略。
可选的输出格式是用 :typetag 表示。当前,支持的类型有:
-
:armor
-
将公钥以 ASCII 包装。
:base64
- 以 base64 编码二进制数据。 :date
- 使用 strftime(3) "%c" 格式。 :day
- 使用 strftime(3) "%a %b %d %Y" 格式。 :depflags
- 格式化依赖性标志。 :fflags
- 格式化文件标志。 :hex
- 以十六进制格式化。 :octal
- 以八进制格式化。 :perms
- 格式化文件权限。 :shescape
- 转义单引号,用于脚本。 :triggertype
- 显示触发的后缀。
例如,要只输出所查询的软件包的名称,可以使用 %{NAME} 作为格式化字符串。要分两列输出软件包名称和发行版信息,可以用 %-30{NAME}%{DISTRIBUTION}。如果执行时使用 --querytags 参数,rpm 将输出它已知的所有标记列表。
查询的选项有两个子集:软件包选择和信息选择。
软件包选择选项:
-
PACKAGE_NAME
- 查询名称为 PACKAGE_NAME 的已安装软件包。 -a, --all
- 查询所有已安装软件包。 -f, --file FILE
- 查询包含 FILE 的软件包。 --fileid MD5
- 查询包含给定文件描述字的软件包,例如,文件内容的 MD5 校验和。 -g, --group GROUP
- 查询属主为 GROUP 的软件包。 --hdrid SHA1
- 查询包含给定头部描述字的软件包,例如,不可变头部区域的 SHA1 校验和。 -p, --package PACKAGE_FILE
- 查询 (未安装的) 软件包 PACKAGE_FILE。这个文件可以指定为一个 ftp 或 http 样式的 URL,这时软件包头部将被下载并查询。参见 FTP/HTTP OPTIONS 中有关 rpm 的内部 ftp 和 http客户端支持信息。参数 PACKAGE_FILE 如果不是一个二进制文件,将被解释为一个 ASCII 软件包说明。其中可以有以 '#' 开始的注释,其他的每行都可以包含以空格分隔的匹配表达式,如果是远程的地址,也包括 URL。这些将被扩展为路径,替换 manifest 参数的位置,作为 PACKAGE_FILE 参数的附加查询内容。 --pkgid MD5
- 查询含有给定软件包描述字的软件包,例如,包的头部以及有效内容的 MD5 校验和。 --querybynumber HDRNUM
- 直接查询第 HDRNUM 个数据库入口;这只在调试时有用。 --specfile SPECFILE
- 解释并查询 SPECFILE,就好像它是一个软件包。尽管并非所有信息都可获得,但这种查询允许 rpm 从 spec 文件中抽取信息,而不必写一个解释器。 --tid TID
- 查询包含给定 TID 事务描述字的软件包。当前使用 unix 时间戳作为事务描述字。任何在一次事务中安装或卸载的软件包拥有相同的描述字。 --triggeredby PACKAGE_NAME
- 查询被软件包 PACKAGE_NAME 触发的软件包。 --whatprovides CAPABILITY
- 查询提供了 CAPABILITY 能力的软件包。 --whatrequires CAPABILITY
- 查询所有需要 CAPABILITY 才能运作的软件包。
软件包查询选项:
-
--changelog
- 显示软件包的修改信息。 -c, --configfiles
- 只显示配置文件 (暗含了 -l). -d, --docfiles
- 只显示文档文件 (暗含了 -l). --dump
-
转储文件信息:
-
path size mtime md5sum mode owner group isconfig isdoc rdev symlink
这个选项必须与至少下列之一联合使用 -l, -c, -d.
--filesbypkg
-
- 列出所选每个软件包中的文件。 -i, --info
- 显示软件包信息,包括名称,版本,描述。如果指定了 --queryformat 就使用它。 --last
- 列出软件包时,以安装时间排序,最新的在上面。 -l, --list
- 列出软件包中的文件。 --provides
- 列出软件包提供的特性。 -R, --requires
- 列出软件包依赖的其他软件包。 --scripts
- 列出软件包自定义的小程序,他们是安装和卸载等等过程的一部分。 -s, --state
- 显示软件包中文件的状态 states (暗含了 -l)。每个文件的状态是 normal, not installed, 或 replaced 其中之一。 --triggers, --triggerscripts
- 显示软件包中包含的触发脚本,如果有的话。
校验选项
校验命令的一般形式是
rpm {-V|--verify} [select-options] [verify-options]
校验软件包,是将已安装的文件的信息,与从软件包中获取的保存在 rpm 数据库中的有关文件的元数据进行比较。校验比较的内容有每个文件的大小,MD5 校验和,许可,类型,属主。任何不对的地方都回显示出来。如果软件包中文件未安装,例如在安装过程中使用 "--excludedocs" 选项跳过的文档,将被跳过。
软件包选择选项与软件包查询是相同的 (包括以说明文件作为参数)。其他独有的选项包括:
-
--nodeps
- 不校验软件包的依赖关系。 --nodigest
- 读取时不校验软件包或头部校验。 --nofiles
- 不校验文件的任何属性。 --noscripts
- 不执行 %verifyscript 小程序,如果有的话。 --nosignature
- 读取时不校验软件包或头部签名。 --nolinkto
- --nomd5
- --nosize
- --nouser
- --nogroup
- --nomtime
- --nomode
- --nordev
- 不校验相应的文件属性。
输出是 8 个字符的字符串,可能的属性标记为:
c %config 配置文件 d %doc 文档 g %ghost 占位文档 (就是说,文件内容不包含在软件包有效内容里面) l %license 许可文件 r %readme 说明文件
从头部开始,接下来是文件名,每 8 个字符表示将文件属性与数据库中记录的值进行一次比较的结果。一个单独的 "." (句点) 表示测试通过了,而一个单独的 "?" (问号) 表示测试可能无法进行 (例如,文件许可禁止了读权限)。最后,加重的字母表示相应的 --verify 测试失败了。
S file Size 大小不一致 M Mode 模式不一致 (包括许可和文件类型) 5 MD5 sum 校验和不一致 D Device 主从设备号不匹配 L readLink(2) 路径不匹配 U User 属主不一致 G Group 组属主不一致 T mTime 时间不一致
数字签名和校验
数字签名命令的一般形式是
rpm --import PUBKEY ...
rpm {--checksig} [--nosignature] [--nodigest]
PACKAGE_FILE ...
选项 --checksig 用来检测 PACKAGE_FILE 中所有的签名和摘要,保证打包的完整性和来源。注意在读取打包时总会检测签名,而 --checksig 在校验与某个打包关联的所有签名和摘要时有用。
没有公钥就无法校验数字签名。可以用 --import 来向 rpm 数据库添加 ASCII 文本化的公钥。每个导入的公钥都有一个头部,钥匙环的管理与软件包管理完全类似。例如,要显示所有已导入的公钥,使用:
rpm -qa gpg-pubkey*
已导入的公钥的细节,可以查询并显示。下面是有关 Redhat GPG/DSA 公钥的信息:
rpm -qi gpg-pubkey-db42a60e
最后,已导入的公钥可以像软件包一样被删除。下面是如何卸载 Redhat GPG/DSA 公钥:
rpm -e gpg-pubkey-db42a60e
签署软件包
rpm --addsign|--resign PACKAGE_FILE ...
选项 --addsign 与 --resign 都可以为每个软件包 PACKAGE_FILE 生成并插入新的签名,替换任何已有的签名。存在两个选项,是由于历史的原因,现在它们的行为没有区别。
使用 GPG 来签署软件包
为使用 GPG 来签署软件包,必须配置 rpm 运行 GPG,并且要能找到包含合适密钥的钥匙环。默认情况下,rpm 使用与 GPG 相同的约定来查找钥匙环,也就是 $GNUPGHOME 环境变量。如果你的钥匙环不在 GPG 要求的位置,就必须配置宏 %_gpg_path 为要使用的 GPG 钥匙环的位置。
为了与老版本的 GPG, PGP 和 rpm 兼容,只应配置 V3 OpenPGP 签名的打包。可以使用 DSA 或者 RSA 校验算法,但是推荐用 DSA。
如果想签署自己创建的打包,还需要创建自己的公钥和私钥对 (参见 GPG 手册)。还需要配置 rpm 宏:
-
%_signature
- 签名类型。当前只支持 gpg 和 pgp。 %_gpg_name
- 用来签署打包的密钥的所有者 "用户" 的名称
例如,要使用 GPG 来签署打包,用户是 "John Doe <jdoe@foo.com>",钥匙环位置在/etc/rpm/.gpg,使用可执行文件 /usr/bin/gpg,可以将这一段
%_signature gpg %_gpg_path /etc/rpm/.gpg %_gpg_name John Doe <jdoe@foo.com> %_gpgbin /usr/bin/gpg
包含在宏配置文件中。对于系统范围的设置,使用 /etc/rpm/macros,对于个人设置,使用~/.rpmmacros。
重建数据库选项
重建数据库的命令的一般形式是
rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY] [--root DIRECTORY]
使用 --initdb 来创建新的数据库,使用 --rebuilddb 来重建数据库索引,根据已安装的软件包头部。
显示配置
命令
rpm --showrc
将显示 rpm 使用的,在 rpmrc 和 macros 配置文件中定义的选项的值。
FTP/HTTP 选项
rpm 可以作为一个 FTP 和/或 HTTP 客户端,可以查询或安装互联网上的软件包包。要安装、升级和查询的软件包文件可以以 ftp 或 http 样式的 URL 指定:
ftp://USER:PASSWORD@HOST:PORT/path/to/package.rpm
如果忽略了 :PASSWORD 选项,将提示密码,每个用户名/主机组合提示一次。如果忽略了用户名和密码,将使用匿名 ftp。在所有情况下,都会使用被动 ftp (PSAV)。
rpm 允许在使用 ftp URL 时使用下面的选项:
-
--ftpproxy
HOST
- 使用主机 HOST 作为所有 ftp 传输的代理服务器,允许用户通过代理系统防火墙访问 ftp。这个选项也可以用宏 %_ftpproxy 指定。 --ftpport PORT
- 连接到 ftp 代理服务器的 TCP PORT 端口,而不是默认的端口。这个选项也可以用宏 %_ftpport 指定。
rpm 允许在使用 http URL 时使用下面的选项:
-
--httpproxy
HOST
- 使用主机 HOST 作为所有 http 传输的代理服务器,允许用户通过代理系统防火墙访问 http。这个选项也可以用宏 %_httpproxy 指定。 --httpport PORT
- 连接到 http 代理服务器的 TCP PORT 端口,而不是默认的端口。这个选项也可以用宏 %_httpport 指定。
LEGACY ISSUES
执行 rpmbuild
rpm 的构建模式,现在由 /usr/bin/rpmbuild 命令完成。尽管使用下面的 popt 别名提供的兼容性已经够用,但是不够完美;因此通过 popt 别名提供的构建兼容性将从 rpm 中移除。安装rpmbuild 软件包,参见 rpmbuild(8) 中,有关过去记录在 rpm(8) 中的,rpm 构建模式的文档。
将下面的这些添加到 /etc/popt 中,如果想使用 rpm 命令行运行 rpmbuild的话:
rpm exec --bp rpmb -bp rpm exec --bc rpmb -bc rpm exec --bi rpmb -bi rpm exec --bl rpmb -bl rpm exec --ba rpmb -ba rpm exec --bb rpmb -bb rpm exec --bs rpmb -bs rpm exec --tp rpmb -tp rpm exec --tc rpmb -tc rpm exec --ti rpmb -ti rpm exec --tl rpmb -tl rpm exec --ta rpmb -ta rpm exec --tb rpmb -tb rpm exec --ts rpmb -ts rpm exec --rebuild rpmb --rebuild rpm exec --recompile rpmb --recompile rpm exec --clean rpmb --clean rpm exec --rmsource rpmb --rmsource rpm exec --rmspec rpmb --rmspec rpm exec --target rpmb --target rpm exec --short-circuit rpmb --short-circuit
FILES
rpmrc 配置文件
/usr/lib/rpm/rpmrc /usr/lib/rpm/redhat/rpmrc /etc/rpmrc ~/.rpmrc
Macro 宏定义文件
/usr/lib/rpm/macros /usr/lib/rpm/redhat/macros /etc/rpm/macros ~/.rpmmacros
Database 数据库
/var/lib/rpm/Basenames /var/lib/rpm/Conflictname /var/lib/rpm/Dirnames /var/lib/rpm/Filemd5s /var/lib/rpm/Group /var/lib/rpm/Installtid /var/lib/rpm/Name /var/lib/rpm/Packages /var/lib/rpm/Providename /var/lib/rpm/Provideversion /var/lib/rpm/Pubkeys /var/lib/rpm/Removed /var/lib/rpm/Requirename /var/lib/rpm/Requireversion /var/lib/rpm/Sha1header /var/lib/rpm/Sigmd5 /var/lib/rpm/Triggername
Temporary 临时文件
/var/tmp/rpm*
SEE ALSO
popt(3), rpm2cpio(8), rpmbuild(8),