rpm - RPM 软件包管理器

时间:2023-01-10 23:42:51

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 必须指定为 ftphttp
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。这个文件可以指定为一个 ftphttp 样式的
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 使用的,在 rpmrcmacros 配置文件中定义的选项的值。

FTP/HTTP 选项

rpm 可以作为一个 FTP 和/或 HTTP 客户端,可以查询或安装互联网上的软件包包。要安装、升级和查询的软件包文件可以以 ftphttp 样式的 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*