文档库 最新最全的文档下载
当前位置:文档库 › 软件包依赖性关系

软件包依赖性关系

软件包依赖性关系
软件包依赖性关系

由于开源的多态性,Linux 操作系统中的软件之间的依赖性关系处理一直令用户感到头疼。如果 package_a 依赖于 package_b ,那么在一个没有安装package_b 的系统中,package_a 是不被系统推荐安装的,强制安装很可能会导致软件无法正常工作。基于以上 package_a 和 package_b 的关系,在一个干净的系统中 ( 未安装 package_a 或 package_b) ,欲安装 package_a ,错误通常会表现为:

RHEL 5.2

# rpm -ivh package_a.rpm

error: Failed dependencies:

pacakge_b = version info is needed by package_a

Ubuntu 904

$ sudo dpkg -i package_a.deb

dpkg: regarding package_a.deb containing package, pre-dependency problm:

package_a pre-depends on package_b (version info)

dpkg: error processing package_a.deb (--install):

pre-dependency problem - not installing package_a

Errors were encountered while processing:

package_a.deb

查询软件包依赖关系

查询 RPM 包的依赖关系,使用 rpm -qRp:

# rpm -qRp package_a.rpm

package_b = version_info

package_b >= version_info

package_b <= version_info

表明 package_a.rpm 依赖于 version_info 版的 package_b ,或者任何高于并包括 version_info 版的 package_b ,亦或低于或包括 version_info 版的package_b 。所以 package_b.rpm 必须在 package_a 之前安装于系统中。

查询 DEB 包的依赖关系,可解读 dpkg --info 结果中的 Pre-Depends 字段: $ dpkg --info package_a.deb

Pre-depends: package_b (= version_info)

Depends: package_b (= version_info)

Pre-depends: package_b (>= version_info)

Depends: package_b (>= version_info)

Pre-depends: package_b (<= version_info)

Depends: package_b (<= version_info)

表明 package_a.deb 依赖于 version_info 版的 package_b 或者任何高于并包括 version_info 版的 package_b 亦或低于或包括 version_info 版的package_b. 所以 package_b.deb 必须在 package_a 之前安装于系统中。

所以正确的安装方法如下节所示。

安装方法

对于 package_a ,正确的安装方法应该是:

##RPM

# rpm -ivh package_b.rpm

# rpm -ivh package_a.rpm

##DEB

$ sudo dpkg -i package_b.deb

$ sudo dpkg -i package_a.deb

嵌套的依赖关系

如上示例为最理想的依赖关系,实际应用中往往最令用户头疼的是 package_a 依赖于 package_b/c/d/e/f 等多个包 , 而 package_b/c/d/e/f 等包又依赖于package_b1,b2,b3/c1,c2/d1,d2/e1,e2/f1,f2 等等 ... ... 为保证软件的正常使用,必须找到所有依赖包以及子依赖包并且安装。过多的依赖关系大大降低了 Linux 软件安装的用户友好性。所以针对此类问题,使用了更高级的包管理策略去解决 - Yum/APT 。

DEB 包的安装/ 升级/ 查询/ 卸载

一个 DEB 包包含了已压缩的软件文件集以及该软件的内容信息(在头文件中保存),通常表现为以 .deb 扩展名结尾的文件,例如 package.deb 。对其操作,需要使用 dpkg 命令。下面介绍 dpkg 工具的参数和使用方法,并以 IBM Lotus Notes 在 UBUNTU 904 安装为例做具体说明。

DPKG 命令常用参数

DPKG 的常规使用方法为 dpkg -? Package(.rpm), 其中 -? 为安装参数 ( 更多信息,请查阅帮助 $man rpm) :

?-l 在系统中查询软件内容信息

?--info 在系统中查询软件或查询指定 rpm 包的内容信息

?-i 在系统中安装 / 升级软件

?-r 在系统中卸载软件 , 不删除配置文件

?-P 在系统中卸载软件以及其配置文件

DPKG 命令参数使用方法

安装 DEB 包命令

$ sudo dpkg -i package.deb

升级DEB 包命令

$ sudo dpkg -i package.deb ( 和安装命令相同)

卸载DEB 包命令

$ sudo dpkg -r package.deb # 不卸载配置文件

$ sudo dpkg -P package.deb # 卸载配置文件

查询DEB 包中包含的文件列表命令

$ sudo dpkg-deb -c package.deb

查询 DEB 包中包含的内容信息命令

$ dpkg --info package.deb

查询系统中所有已安装 DEB 包

$ dpkg -l package

DEB 包管理示例

以下步骤描述了一个普通用户安装 IBM Lotus Notes V85 ( 以下简称 Notes) 的典型操作过程。 Notes 的 DEB 包名为 ibm_lotus_notes-8.5.i586.deb.

1.首先查询是否该软件是否已经在系统中存在

$ dpkg -l ibm-lotus-*

如果系统中从未安装过 Lotus 产品,那么返回信息为 :

No pakcages found matching ibm-lotus-*

如果系统安装过 Lotus 产品,但已被删除,那么返回信息为 :

pn ibm-lotus-notes none (no description available)

2.查询 Notes 软件包内容:

$ dpkg --info ibm_lotus_notes-8.5-i586.deb

1.返回信息 :

new debian package, version 2.0.

size 335012296 bytes: control archive= 231821 bytes.

...

Package: ibm-lotus-notes

Version: 8.5-20081211.1925

Section: IBM

Priority: extra

Architecture: i386

Installed-Size: 619444

Maintainer: IBM Lotus Product

Description: IBM Lotus Notes

IBM Lotus Notes software provides a robust ... ...

1.安装 Notes:

$ sudo dpkg -i ibm_lotus_notes-8.5.i586.deb

1.返回信息 :

(Reading database ... 151150 files and directories currently installed.)

Preparing to replace ibm-lotus-notes 8.5-20081211.1925

(using ibm-lotus-notes-higher-version.i586.deb) ...

Unpacking replacement ibm-lotus-notes ... Setting up ibm-lotus-notes

(higher-version) ...

1.升级 Notes :

$ sudo dpkg -i ibm_lotus_notes-8.5.i586.deb

1.返回信息 :

(Reading database ... 151150 files and directories currently installed.) Preparing to replace ibm-lotus-notes 8.5-20081211.1925

(using ibm-lotus-notes-higher-version.i586.deb) ...

Unpacking replacement ibm-lotus-notes ...

Setting up ibm-lotus-notes (higher-version) ...

1.卸载 Notes

注意卸载软件使用软件名称,而不是包文件名:

$ sudo dpkg -P ibm-lotus-notes

相关文档