一、大纲
查询与校验包:
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 ...
select选项
[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]
query选项
[--changelog] [-c,--configfiles] [-d,--docfiles] [--dump] [--filesbypkg] [-i,--info] [--last] [-l,--list] [--provides] [--qf,--queryformat QUERYFMT] [-R,--requires] [--scripts] [-s,--state] [--triggers,--triggerscripts]
verify选项
[--nodeps] [--nofiles] [--noscripts] [--nodigest] [--nosignature] [--nolinkto] [--nomd5] [--nosize] [--nouser] [--nogroup] [--nomtime] [--nomode] [--nordev]
install选项
[--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]
说明:
rpm是一个强有力的包管理工具,它可以用于建造、安装、查询、检验、更新和删除个别的软件包。文件包由文件的档案组成且元数据过去常用于安装和删除存档文件。元数据包括帮助角本、文件属性和关于这个包的可描述性信息。包通常有两个变体:二进制包,用于压缩软件的安装;另一个是源程序包,包括原代码和产生二进制包的的方法说明。
必须选择下面的基本模式:Query, Verify, Signature Check, Install/Upgrade/Freshen, Uninstall, Initialize Database, Rebuild Database, Resign, Add Signature, Set Owners/Groups, Show Querytags, and Show Configuration。
二、一般选项
那些选项可以用于所有的不同的模式中。
-?, --help 正常情况下输出使用方法。 --version 输出包括目前所使用的rpm版本数据的单行。 --quiet 输出尽可能少-正常情况下,如果有错误出现,仅输出错误。 -v 输出详细信息-正常的常规的进程信息。 -vv 输出很多的调试信息。 --rcfile FILELIST 第一个在FILELIST中由冒号区分的文件将被rpm作为配置信息读出。在列表中的第一个文件必须存在,且tildes将被写入到$HOME的值中。默认的FILELIST is /usr/lib/rpm/rpmrc:/usr/lib/rpm/redhat/rpmrc:~/.rpmrc。 --pipe CMD rmp到命令CMD的输出管道。 --dbpath DIRECTORY 在DIRECTORY中数据库而不是使用默认的路径/var/lib/rpm。 --root DIRECTORY 使用文件系统树为所有操作在DIRECTORY进行登录(rooted)!注意这意味着在DIRECTORY内的数据库将对所有的依赖的检测和任何角本使用 (例如:在一个包中%post安装了或%prep已经建立),将在一个chroot(2)之后运行并赋给DIRECTORY。
安装和更新选项:
rpm安装的通用命令如下:
Rpm升级的通用命令如下:
升级或安装包文件通常是安装一个新的版本。这同安装一样,不同之外仅在于在新包安装之前别的版本的包已经被删除。
这将会升级包,但条件是其早期的版本已经存在。PACKAGE_FILE被指定为一个ftp或http的URL,那么在安装之前这个包将会被下载。参见FTP/HTTP选项。
--aid 在必要的时候为交易集增加暗示包。 --allfiles 安装或升级所有的在包中不正确的文件,不管它们是否存在。 --badreloc 使用此选项,允许在所有的文件路径中重新定位,不仅是那些包含在二进制包中重定位的hint(s)中的那些OLDPATH. --excludepath OLDPATH 不安装那些名字在OLDPATH中的文件。 --excludedocs 不安装那些文档文件(那些man页和texinfo文档)。 --force 与使用—replacepkgs、--replacefiles和—oldpackage一样。 -h, --hash 在被有效的解开时输出50个信息符。使用-v|--verbose可以优选显示。 --ignoresize 在安装包之前不检测mount的文件系统的空间是否够。 --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 在解包时输出文件解包的百分比。 --prefix NEWPATH 对于可重定位的二进制包,翻译在包重定位线索中以安装前缀开头的文件给NEWPATH.。 --relocate OLDPATH=NEWPATH 针对重定位的二进制包,翻译在包重定位线索中以OLDPATH开头的文件给NEWPATH。如果在包中的几个OLDPATH被重新装载,选项可以重复使用。 --repackage 在删除之前重新打包文件。先前安装的包将由宏%_repackage_name_fmt指定,且其创建目录也由宏%_repackage_dir指定(默认值是/var/tmp)。 --replacefiles 安装包,即使他们已经从别的地方已经安装的包中替换了文件。 --replacepkgs 完全安装包,即使其中的一些文件已经在系统中安装完成。 --test 不安装包,仅仅简单检测或报告潜在的冲突。
删除选项:
删除格式的rpm命令是:
下面的选项也可以使用:
--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/tmp)。 --test 不真的卸载任何东西, 仅仅是经历一下这个动作。与-vv选项联合使用。
查询选项:
rpm查询选项的通用格式:
可以指定包信息被打印的格式,如果想做这些,可以使用下面的方式:
选项,后边是格式字符串QUERYFMT。查询格式是标准printf(3)的标准输出版本。其格式由静态字符串组成(应包括标准C字符,除了换行符、tables或其它特殊字符串)和printf(3)类型格式符。当rpm已经知道打印的类型后,无论如何,类型指定必须被忽略,且被头标签替代的部分将被打印,被符上{}字符。标签名是一个固定的实例,这标签名主要的RPMTAG_ portion也可以被忽略。
交替的输出格式可以由带: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。PACKAGE_FILE可以以ftp或http风格的URL指定,这种情况下包头的实例将被下载和查询。在rpm的内部的ftp和http支持参见FTP/HTTP选项。PACKAGE_FILE参数,如果不是一个二进制包,将被解释为一个ASCII包的形式。可以存在注释,以#开头,且包说明文件的每一行都可以包括空白分隔的表达式。包括包含有远程一组解释的URL,将展开到作为附加的包PACKAGE_FILE参数赋值给查询代替包说明的路径下。
--pkgid MD5 查询包,包括给定的包认证信息,也就是说是一个MD5摘要。 --querybynumber HDRNUM 直接查询HDRNUMth数据库入口,仅用于调试方式。 --specfile SPECFILE 直接分析和查询SPECFILE,好象它就是一个包。虽然不是所有的信息(也就是说文件列表)都是有效的,允许rpm查询的类型常被用做从specfile中摘要信息而不必写specifle分析。 --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 Orders 以包安装的顺序来列出包内容,结果是最后一个安装的包在最上层列出。 -l, --list 列出包中的文件。 --provides 列出包中规定的容量。 -R, --requires 列出这个包所依赖的包。 --scripts 列出部分包的指定角本作为安装和卸载的信息。 -s, --state 列出在包中文件的状态(意味着-l)文件的状态包括正常、未安装、替换。 --triggers, --triggerscripts 显示触发器角本,它包含在包中。
校验选项:
格式如下:
校验在包中已经安装且在rpm数据库中带有来自于中的元数据存储的文件比较信息在这些东西中,校验比较大小、MD5数、许可、类型、拥有者及每个文件的组。所有明细信息都将显示。没有从包中安装的文件,例如:使用—excludedocs选项将文件文档文件没有安装,则文档文件将被默认忽略。
包选择选项与包查询选项相同(包括象参数的包的说明文件)。别的选项的唯一校验格式如下:
--nodeps 不校验包的从属部分。 --nodigest 在读时不校验包或头的摘要。 --nofiles 不校验包文件的属性。 --noscripts 不执行%verifyscript角本(if any)。 --nosignature 当读时不校验包或头的信号。 --nolinkto --nomd5 --nosize --nouser --nogroup --nomtime --nomode --nordev 不校验相应文件的属性。
输出格式是一个8个字符的字符串,可能的属性标记是:
c %config 配置文件。 d %doc 文档文件。 g %ghost file (也就是说文件内容不没有包含在包的有效负荷中)。 l %license license文件。 r %readme readme文件。 从后面跟着文件名的包头中,8个字符每个都指出在数据库中属性记录值文件属性的比较结果。句号"."意味着测试通过,而"?"说明没有不能执行(也就是说文件许不能读)。无论怎样,这些字符都指出了校验测试没有成功。 S 文件大小不同 M 模式不同(包括许可和文件类型) 5 MD5数不同 D 设置主要/较小的不匹配数 L readLink(2) 路径不匹配 U 用户所属关系不同 G 组所属关系不同 T mTime不同。
数字符号和摘要校验:
rpm数字符号命令的格式是:
--checksig选项检查所有的包含在PACKAGE_FILE中的摘要和签名,来确认包的完整性及来源。注意,无论包什么时候读,签名都要进行校验,且--checksig对于校验所有的与包相关的摘要和签名都是很有用的。 在没有公钥的情况下,数字符号不能校验。使用--import将一个ascii公钥加到你的rpm数据库中。导入的公钥存在于头中,且key回响管理是象一个包管理一样正确执行。例如,所有当前输入的公钥可以由下面的式子列出: rpm -qa gpg-pubkey* 当导入时关于指定的公钥的说明,能被查询所显示。,下面是关于Red Hat GPG/DSA key的显示信息: rpm -qi gpg-pubkey-db42a60e 最后,公钥可以在输出后名象包一样被删除,下面是删除Red Hat GPG/DSA key: rpm -e gpg-pubkey-db42a60e
包签名:
--addsign和—resign选项产生和插入新的签名给每一个指定的PACKAGE_FILE 包,用来代替所有存在的签名。由于历史的原因,有两个选面,这两者的行为没有什么不同。 使用GPG签名: 为了使用GPG为包做签名,rmp必须被配置成运行GPG且可以找到有适当KEY的键环。默认情况下,rpm查找键环的方式与GPG方式相同。也就是$GNUPGHOME 环境变量。如果你的键环没有定位到GPG预设的位置,那么你需要配置宏%_gpg_路径到GPG键环指定的位置。 为了保证与旧版的GPG、PGP和rpm兼容,只有V3 OpenPGP签名包被配置上了。DSA或者RSA的加密算法可以使用,但DSA是首选项。 如果你想要为你自己创建的包进行签名,也需要创建自己的公钥和私钥对(参见GPG手册)。你将也需要配置rpm宏。 %_signature 签名类型。仅支持gpg与pgp方式。 %_gpg_name 你希望使用的给你的包进行签名的键的“user”名。 例如,使用GPG使用类似于用户"John Doe <[email protected]>;"从键环位置/etc/rpm/.gpg使用可执行的/usr/bin/gpg来为包签名: %_signature gpg %_gpg_path /etc/rpm/.gpg %_gpg_name John Doe <[email protected]> %_gpgbin /usr/bin/gpg
在宏配置文件中使用上述的代码。为每个系统配置使用/etc/rpm/macros和~/.rpmmacros为每个用户进行配置。
重建数据库选项:
重建数据的rpm命令的通用格式如下:
使用--initdb去创建一个新的数据库,使用--rebuilddb去重建一个数据库利用安装的包头索引。
SHOWRC
命令格式:
rpm --showrc
显示所有在rpmrc和macros配置文件中设置的选项中使用的rpm值。
FTP/HTTP选项: Rpm能象FTP和/或HTTP客户端那样,所以包能从internet中进行查询和安装。安装、更新和查询包文件的操作可以作为一个ftp或http风格的URL指定。 ftp://USER:PASSWORD@HOST:PORT/path/to/package.rpm 如果忽略了:PASSWORD部分,将会提示输入密码(针对每个用户/主机对)。如果用户和密码都忽略,ftp将使用匿名(anonymous)方式。实际上,ftp进行的是被动的传输。 Rpm允许在ftp的URLs中使用下面的选项: --ftpproxy HOST 主机HOST将做为所有传输的代理服务器,允许用户穿过那些使用代理的系统的防火墙去ftp。这个选项也可以通过使用宏%_ftpproxy来配置。 --ftpport HOST ftp使用连接到ftp代理服务器的TCP PORT号来代替默认值。这个选项也可以由宏%_ftpport来指定。 Rpm允许以下面的格式使用http URLs: --httpproxy HOST 主机HOST将作为所有http传输的代理服务器。这个选项也可以由宏%_httpproxy指定。 --httpport PORT http使用连接到http代理服务器的TCP PORT号来代替默认值。这个选项也可以由宏%_httpport来指定。
三、后续说明
执行rpm构建:
rpm的构建模式目前使用/usr/bin/rpmbuild进行。虽然由 popt别名提供的兼容性已经足够了,但还不是完美的。因此通过popt别名的兼容性目前正在被从rpm中删除。安装rpmbuild包,可参见rpmbuild(8)。在rpm(8)中可以找到所有的当前rpm构建的报有文档。
如果你想继续在命令行中使用rpmbuild,将下列的行加入到/etc/popt中:
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