RPM包管理程序以GPL协议发布,RED HAT和FEDORA以及其衍生版本使用RPM管理软件。
RPM包管理程序只对RPM格式的软件包有效。RPM软件包管理程序在安装系统时预装。对用户来讲,RPM使系统更新升级非常简单。安装、删除、升级软件包所使用的RPM命令都很短小精悍。RPM包管理程序用数据库管理已安装的程序及其所有文件,因此,你可以查询和验证已经安装的RPM软件包。DNF /PAKAGEKIT等程序使RPM格式的软件包管理起来更简单。
提示:DNF包管理程序提供了比RPM包管理程序同等甚至更加强大的软件管理功能。DNF总是自动解决软件包之间的依赖。用DNF安装或删除软件时,会强制检查和保证系统的完整性,建议在任何情况下都使用DNF代替RPM来管理软件包。
如果你更喜欢图形界面,你可以使用PACKAGEKIT 的图形界面程序,这个程序也是使用DNF来管理软件的。
升级时,RPM会很小心的处理配置,你不会丢失自定义配置信息。
对于开发者,RPM会把源码打包,这个过程非常简单,而且可以打包成单个文件也可以只打包补丁程序,因此软件升级维护非常简单。
因为RPM能修改系统程序,因此在大数多的安装、升级、降级、删除软件包时需要ROOT权限。
A.1. RPM的设计目标
明白了RPM的设计目标对学会怎么用RPM很有帮助。
升级
使用RPM,你以升级单个组件而不需要重新安装。当你的FEDORA系统升级时,你不需要重新安装新版本的FEDORA操作系统。RPM可以智能的、全自动的升级系统。另外,配置文件在升级后仍会保留,所以也不用担心自定义设置。而且升级不需要额外的升级包,因为它可以用安装包直接升级。
强大的查询功能
你可以查询某个软件甚至某个软件中的某个文件。RPM包中的文件实际是压缩格式,用一个二进制头文件保存了软件包的信息及包括的文件 ,可以很方便的查询软件信息。
系统验证
RPM允许你验证安装到系统里的软件的所有文件是否与原文件一致。如果不一致,RPM会提醒你,你也就可以重新安装这个软件,在重新安装过程中配置信息仍将保留。
原软件源
RPM另个重要的目标是允许你使用由原作者发布的软件源。使用RPM,你会有补丁程序和完整的构建结构。这是很有用的。比如,如果有个软件发布了新版本,你不必重新编译。你可以通过补丁代码查看哪些需要修改。
这个功能好象只对开发者有用,但有利于给客户提供高质量的软件。
A.2. 使用RPM
RPM有5个基本功能(除构建包以外):安装、删除、升级、查询和验证。可以用RPM --HELP或查看手册详细了解。
A.2.1 安装和升级软件
RPM包名格式如下:
package_name-version-release-operating_system-CPU_architecture.rpm
比如 tree-1.7.0-3.fc23.x86_64.rpm包括包名(TREE),大版本号(1.7.0),小版本号(3),操作系统版本(FC23)和CPU架构(X86_64)。
重要:当安装一个软件时,要确定这个软件与操作系统和CPU架构兼容。这个可以很容易的通过包名来判断。比如AMD64/INDEL64位电脑的架构的软件包以x86_64.rpm结尾。
-U或--upgrade选项有两个功能:
升级系统上已经存在的软件 或者
安装一个新的软件,即使没有对应的低级版本。
因此 rpm -U package.rpm既可以升级也可以安装软件,是升级还是安装取决于系统里是否有package.rpm的老版本。
假设tree-1.7.0-3.fc23.x86_64.rpm在当前目录下,用ROOT用户登陆后,用以下命令就可以安装或升级tree软件包:
~]# rpm -Uvh tree-1.7.0-3.fc23.x86_64.rpm
提示 使用-Uvh使安装过程更友好
-v和-h选项允许rpm显示更多提示信息和以#显示安装进度。
如果升级或安装成功的话,显示如下:
Preparing...
########################################### [100%]
1:tree
########################################### [100%]
重要:一定要使用-i(install)选项安装内核!
Rpm提供了两个选项都可安装软件包:-U,升级;-i 安装。 因为-U选项包括安装和升级,因此使用rpm -Uvh升级软件包是没有问题的,但升级内核时应使用-i,不要使用-U。
你可以总是使用-i来安装新内核而不是升级。这是因为,使用-U升级内核时,会把旧内核删除。当新内核万一有问题的话会导致系统无法启动。因此要使用-i来安装新内核,而不要替换旧内核。
当安装或删除软件时,会自动检查签名。签名可以保证软件获得了认证,如果验证失败,会有错误信息显示。
如果你安装软件时密钥不正确,会显示:
warning: tree-1.7.0-3.fc23.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 431d51: NOKEY
A.2.1.1. 如果同名的软件包已经安装,会显示:
Preparing...
########################################### [100%]
package tree-1.7.0-3.fc23.x86_64 is already installed
强行安装的话,使用--replacepkgs选项,告诉RPM忽略此错误:
~]# rpm -Uvh --replacepkgs tree-1.7.0-3.fc23.x86_64.rpm
这个选项在软件已经删除或者你想使用原始的配置文件的时候有用。
如果你尝试升级到系统已安装版本低的软件,RPM会提示你新版本已经安装,如果要降版本的话,需要使用--oldpackage选项。
rpm -Uvh --oldpackage older_package.rpm
A.2.1.2解决文件冲突
如果安装的软件中有文件已经被其它软件安装了,会显示冲突信息,--replacefiles选项会忽略这个错误信息。
rpm -Uvh --replacefiles package.rpm
A.2.1.3 解决依赖
软件包有时会依赖其它软件包,意思是说,必须安装了其它软件以后这个软件才能正常运行。如果你试图安装一个没有解决依赖关系的软件包会显示错误信息。可以使用--whatprovides选项查询所需要的依赖包。
rpm -q --whatprovides "required_file"
如果包括required_file能够在RPM库中找到,就会显示出该软件包的名字。
尽管你可以 --nodeps方式强制安装而不解决依赖问题。这么做可能会导致不能正常运行,不建议这么做。DNF可以解决依赖问题,方法是联网从源中自动下载和安装对应的依赖包。
A.2.1.4 保存配置文件
因为RPM的智能升级,你可以看到下面的信息:
saving /etc/configuration_file.conf as /etc/configuration_file.conf.rpmsave
这个信息的意思是,升级的软件的旧配置文件与新版本的不兼容,所以RPM自动保存了旧文件,并安装了新文件。你可以查看两者区别。
另外,RPM也可以保存新配置文件,比如configuration_file.conf.rpmnew。你仍然应该解决两者的冲突,一般要把旧的合并到新的里面里。比如使用diff程序。
A.2.2删除软件
删除软件和安装软件一样简单:
rpm -e package
注意,这个命令只需要包名,不是包的文件名,如果你使用了包的文件名,则会显示软件名称错误。
删除时有可能会遇到存在软件依赖于当前要删除的软件。比如:
~]# rpm -e ghostscript
error: Failed dependencies:
ghostscript is needed by (installed) ghostscript-cups-9.07-16.fc23.x86_64
ghostscript is needed by (installed) foomatic-4.0.9-6.fc23.x86_64
libgs.so.9()(64bit) is needed by (installed) libspectre-0.2.7-4.fc23.x86_64
libijs-0.35.so()(64bit) is needed by (installed) gutenprint-5.2.9-15.fc23.x86_64
libijs-0.35.so()(64bit) is needed by (installed) cups-filters-1.0.35-15.fc23.x86_64
警告:强制软件安装问题。虽然你可以使用--nodeps强行删除而不解决依赖问题,但是这样会造成其它依赖于所删除软件的软件不能正常使用。也可能导致严重的包管理问题和系统错误。
A.2.3 更新软件
更新软件和升级软件类似,但更新只升级已经安装的包:
rpm -Fvh package.rpm
-F (--freshen)选项会比较软件版本。当有新版本时可以用此选项更新升级。但这个选项不会安装软件,与升级不同。其作用是只升级系统已经安装的软件。
~]# rpm -Fvh *.rpm
A.2.4 查询软件
RPM数据库保存了安装到系统的所有RPM包的信息,这个数据库保存在/var/lib/rpm目录里,这个库可以用于查询安装了什么RPM包,每个包的版本号,安装后的文件的变化。查询软件的选项是-q(--query):
rpm -q package_name
这个命令将显示软件包名、版本,以及发布的小版本号。比如:
~]$ rpm -q tree
tree-1.7.0-3.fc23.x86_64
可以通过RPM的手册来查看相关选项。使用这这些选项后可以显示当前查询到的软件包的更多信息。
A.2.5. 验证软件包
验证软件包实际上是,比较系统上已经安装的软件包和原始包之间的差异。验证将会比较文件大小、MD5信息、权限、类型、所有者和每个文件的组。
使用RPM的 -V(或--verify)来验证软件包。比如:
~]$ rpm -V tree
查看RPM手册中的软件选择选项(Package Selection Options)页可以看到所有可选项,这些可选项可以查询更多信息。
如果软件经验证没有问题,将不会输出任何信息。如果有问题,将显示出来。比如:
~]# rpm -V abrt
S.5....T. c /etc/abrt/abrt.conf
.M.......
/var/spool/abrt-upload
显示输出是9个字符,后面跟着属性样在选项和文件名。
第1个字符是对文件检测的结果。每个属性的测试的值都会记录到RPM数据库里。一个.号表示测试通过,问号?表示测试不通过。下表是各符号的含义:
表A.1.RPM验证结果显示的符号的含义
S 文件大小的差异
M 模式包括文件权限和文件类型的差异
5 MD5差异
D 设备号差异
L 符号连接差异
U 所有者差异
G 归属组差异
T mtime差异
P 容量差异
表A.2.RPM验证符号
c 配置文件
d 文档文件
l 授权文件
r readme文件
你可以根据输出信息判断是要删除还是重装该软件包,或者解决该软件包的问题。
A.3.查找和验证RPM软件包
在使用RPM软件包前,必须要知道到哪里能找到软件包并且要会验证是否可以相信这个软件包。
A.3.1 找到RPM软件包
尽管网上有很包RPM软件源,但为了安全和兼容性考虑,你应该只安装FEDORA官方提供的软件包。下面是RPM包源的类型:
1.FEDORA官方提供的安装源。
2.使用DNF包管理工具的官方RPM源。
3.非官方第三方的提供RPM的源。
重要:当你使用第三方源在FEDORA系统安装软件时,注意软件源的网站提供的包的兼容性。不同软件源有可能提供同一软件的不同的、不兼容版本的软件。
A.3.2检查包的签名
RPM包可以使用GPG签名,以确认下载的软件是可信的。GPG是安全通讯工具。使用GPG,你可以对文件授权、加密或解密数据。
使用rpmkeys命令加-K(或--checksig)选项检查签名:
rpmkeys -K package.rpm
注意,在安装和升级软件时DNF包管理器会自动检查GPG签名。
A.3.2.1 导入GPG签名
验证RED HAT包,可以安装RED HAT的GPG密钥。默认会安装一组基本的密钥。可以用以下命令显示已经安装的密钥:
~]$ rpm -qa gpg-pubkey*
使用rpm -qi可以显示指定密钥的详细信息:
~]$ rpm -qi gpg-pubkey-fd431d51-4ae0493b
使用RPMKEYS的--import选项可以安装新密钥,默认保存在/etc/pki/rpm-gpg/目录里。导入这些新密钥可以使用如下命令:
~]# rpmkeys --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
A.4 RPM使用的常见案例
RPM在管理系统和调试解决问题时很有用。下面是常见的一些例子。
验证整个系统是否缺失文件
rpm -Va
如果缺少了一些文件或者显示中断,要考虑重新安装相关的包。
查看某个文件是否包含指定的文件
rpm -Vf file
查找某个文档文件属于哪个包
rpm -qdf file
查看某个包的信息
rpm -qip package.rpm
显示包里的文件
rpm -qlp package.rpm
A.5 其它信息
附录A RPM软件管理
最新推荐文章于 2024-09-03 16:00:00 发布