使用 RPM 命令安装软件包的常见问题包括:软件包已经被安装、文件冲突,以及未被解析的软件包依赖性。
软件包已经被安装
如果某个名称和版本号都相同的软件包已经被安装在系统中,在使用 rpm 命令进行安装时则会输出以下信息,提示你软件已经被安装 (already installed)
Preparing... ########################################### [100%]
package tree-1.5.2.2-4.fc12.x86_64 is already installed
使用 --replacepkgs 选项让 RPM 忽略上述错误信息,执行软件包的覆盖安装。
~]# rpm -ivh --replacepkgs tree-1.5.2.2-4.fc12.x86_64.rpm
通常在修复出问题的软件包时,可以使用覆盖安装
文件冲突
当你安装的某个软件包中包含的文件已经通过其它软件包安装到系统中,则会出现以下提示信息
Preparing... ##################################################
file /usr/bin/foobar from install of foo-1.0-1.fc12 conflicts
with file from package bar-3.1.1.fc12
使用 --replacefiles 选择能够忽略这个错误
~]# rpm -ivh --replacefiles foo-1.0-1.fc12.x86_64.rpm
注意:使用 --replacefiles 会替换系统中已经安装的相同的文件,除非你清楚这个文件的用途和替换可能产生的影响,否则不要轻易执行文件替换。
未被解析的软件包依赖性
RPM 软件包有时候需要依赖于其它的软件包,意思就是说在这个软件包安装之前,必须先安装一些其它的软件包才能保证它的正常运行。如果安装的软件包的依赖性没有被解决,则会显示类似于以下的输出信息
error: Failed dependencies:
bar.so.3()(64bit) is needed by foo-1.0-1.fc12.x86_64
Suggested resolutions:
bar-3.1.1.fc12.x86_64.rpm
以上输出说明 foo-1.0-1.fc12.x86_64 这个软件包依赖于 bar.so.3 这个文件,并且建议你通过安装 bar-3.1.1.fc12.x86_64 软件包来解决这个依赖性问题。这时你只需要找到这个依赖性软件包,并将其安装即可。
但有时 RPM 不会作出以上提示,这时可以使用 --whatprovides 选项加上依赖的文件名进行查找
~]# rpm -q --whatprovides "bar.so.3"
bar-3.1.1.fc12.i586.rpm
由输出结果可知,通过安装 bar-3.1.1.fc12.i586 软件包就能解决这个问题了 :D
注意:通过 --nodeps 选项可以忽略软件包的依赖,让 RPM 强制安装某个软件包。但强制安装的软件包通常都无法正常工作,而且可能导致系统安全以及稳定性等多方面的问题,因此不建议强制安装软件包。
提示:yum 和 PackageKit 都能够自行解析并处理软件包依赖性的问题,并且在条件许可的情况下,建议使用 yum 执行软件包的管理工作。更多有关 yum 的信息可参考《Yum 使用教程》