Linux 平台上的软件包管理

<!-- [endif]--> <!-- [if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75" alt="" style='width:7.5pt;height:.75pt'> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" mce_src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" o:href="http://www.ibm.com/i/c.gif"/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]--> 文档选项 安装,升级和卸载应用软件是影响用户对操作系统评价的决定性因素之一。对于日渐流行的 GNU/Linux 操作系统,拥有简洁强大的软件包管理机制功不可没。本文从基本的 rpm/dpkg 命令行出发,以 RHEL UBUNTU 为例,介绍典型 Linux 系统中应用软件的管理和使用。

RPM/DPKG 两大阵营简介

GNU/Linux( 以下简称 Linux) 操作系统中,RPM DPKG 为最常见的两类软件包管理工具,他们分别应用于基于 RPM 软件包的 Linux 发行版本和 DEB 软件包的 Linux 发行版本。软件包管理工具的作用是提供在操作系统中安装,升级,卸载需要的软件的方法,并提供对系统中所有软件状态信息的查询。

RPM 全称为 Redhat Package Manager ,最早由 Red Hat 公司制定实施,随后被 GNU 开源操作系统接受并成为很多 Linux 系统 (RHEL) 的既定软件标准。与 RPM 进行竞争的是基于 Debian 操作系统 (UBUNTU) DEB 软件包管理工具- DPKG ,全称为 Debian Package ,功能方面与 RPM 相似。二者之具体比较不在本文范围之内。

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

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

RPM 命令常用参数

RPM 的常规使用方法为 rpm -? package.rpm ,其中 -? 为操作参数 ( 更多信息,请查阅帮助 $man rpm)

  • -q 在系统中查询软件或查询指定 rpm 包的内容信息
  • -i 在系统中安装软件
  • -U 在系统中升级软件
  • -e 在系统中卸载软件
  • -h #(hash) 符显示 rpm 安装过程
  • -v 详述安装过程
  • -p 表明对 RPM 包进行查询,通常和其它参数同时使用,如:
  • -qlp 查询某个 RPM 包中的所有文件列表
  • -qip 查询某个 RPM 包的内容信息

RPM 命令参数使用方法

以上参数有些需要组合使用,比如说 rpm -h package.rpm 是没有意义的,但 rpm -ih package.rpm 即表示安装 package 并用 # 符显示安装进度。


安装 RPM

# rpm -ivh package.rpm



升级 RPM 包命令

# rpm -Uvh package.rpm



卸载 RPM 包命令

# rpm -ev package



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

# rpm -qlp package



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

# rpm -qlp package



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

# rpm -qip package



查询系统中所有已安装 RPM

# rpm -qa

RPM 包管理示例

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

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

# rpm -qa | grep ibm_lotus_notes

  1. 如果返回信息为空那么说明该软件还未被安装。
  2. 查询 Notes 软件包内容:

# rpm -qip ibm_lotus_notes-8.5.i586.rpm

Name : ibm_lotus_notes Relocations: /opt/ibm/lotus/notes

Version : 8.5 Vendor: IBM

Release : 20081211.1925 Build Date: Sat 13 Dec 2008 09:38:55 AM CST

Install Date: (not installed) Build Host: dithers.notesdev.ibm.com

Group : Applications/Office

Source RPM: ibm_lotus_notes-8.5-20081211.1925.src.rpm

Size : 603779427 License: Commercial

Signature : DSA/SHA1, Sat 13 Dec 2008 09:43:02 AM CST, Key ID 314c8c6534f9ae75

Summary : IBM Lotus Notes

Description :

IBM Lotus Notes software provides a robust ...

  1. 安装 Notes:

# rpm -ivh ibm_lotus_notes-8.5.i586.rpm




  1. 返回信息 :

Preparing... ########################################### [100%]

1:ibm_lotus_notes ########################################### [100%]

  1. 升级 Notes

若今后需要基于该版本升级至更高版本的 Notes( .0 - ibm_lotus_notes-9.0.i586.rpm) ,则使用 -U 参数:

# rpm -Uvh ibm_lotus_notes-8.5.i586.rpm

在该步骤中如果使用 -i 则系统通常会报文件冲突错误,无法正常安装。

  1. 卸载 Notes

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

# rpm -ev ibm_lotus_notes

<!-- [if gte vml 1]><v:shape id="_x0000_i1030" type="#_x0000_t75" alt="" style='width:.75pt;height:.75pt'> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image004.gif" mce_src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image004.gif" o:href="http://www.ibm.com/i/v14/rules/blue_rule.gif"/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->
<!-- [if gte vml 1]><v:shape id="_x0000_i1031" type="#_x0000_t75" alt="" style='width:6pt;height:4.5pt'> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" mce_src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" o:href="http://www.ibm.com/i/c.gif"/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->

<!-- [if gte vml 1]><v:shape id="_x0000_i1032" type="#_x0000_t75" alt="" style='width:600pt;height:3pt'> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" mce_src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" o:href="http://www.ibm.com/i/c.gif"/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->

<!-- [if gte vml 1]><v:shape id="_x0000_i1033" type="#_x0000_t75" alt="" style='width:12pt;height:12pt'> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image007.gif" mce_src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image007.gif" o:href="http://www.ibm.com/i/v14/icons/u_bold.gif"/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]--> 回页首

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-*




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

No pakcages found matching ibm-lotus-*




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

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

  1. 查询 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

<!-- [if gte vml 1]><v:shape id="_x0000_i1034" type="#_x0000_t75" alt="" style='width:600pt;height:.75pt'> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image004.gif" mce_src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image004.gif" o:href="http://www.ibm.com/i/v14/rules/blue_rule.gif"/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->
<!-- [if gte vml 1]><v:shape id="_x0000_i1035" type="#_x0000_t75" alt="" style='width:6pt;height:4.5pt'> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" mce_src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" o:href="http://www.ibm.com/i/c.gif"/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->

<!-- [if gte vml 1]><v:shape id="_x0000_i1036" type="#_x0000_t75" alt="" style='width:600pt;height:3pt'> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" mce_src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" o:href="http://www.ibm.com/i/c.gif"/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->

<!-- [if gte vml 1]><v:shape id="_x0000_i1037" type="#_x0000_t75" alt="" style='width:12pt;height:12pt'> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image007.gif" mce_src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image007.gif" o:href="http://www.ibm.com/i/v14/icons/u_bold.gif"/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]--> 回页首

软件包依赖性关系

由于开源的多态性,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

<!-- [if gte vml 1]><v:shape id="_x0000_i1038" type="#_x0000_t75" alt="" style='width:600pt;height:.75pt'> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image004.gif" mce_src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image004.gif" o:href="http://www.ibm.com/i/v14/rules/blue_rule.gif"/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->
<!-- [if gte vml 1]><v:shape id="_x0000_i1039" type="#_x0000_t75" alt="" style='width:6pt;height:4.5pt'> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" mce_src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" o:href="http://www.ibm.com/i/c.gif"/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->

<!-- [if gte vml 1]><v:shape id="_x0000_i1040" type="#_x0000_t75" alt="" style='width:600pt;height:3pt'> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" mce_src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" o:href="http://www.ibm.com/i/c.gif"/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->

<!-- [if gte vml 1]><v:shape id="_x0000_i1041" type="#_x0000_t75" alt="" style='width:12pt;height:12pt'> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image007.gif" mce_src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image007.gif" o:href="http://www.ibm.com/i/v14/icons/u_bold.gif"/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]--> 回页首

更友好的包管理软件 - YUM

YUM

YUM 基于 RPM 包管理工具,能够从指定的源空间(服务器,本地目录等)自动下载目标 RPM 包并且安装,可以自动处理依赖性关系并进行下载、安装,无须繁琐地手动下载、安装每一个需要的依赖包。此外,YUM 的另一个功能是进行系统中所有软件的升级。如上所述,YUM RPM 包来源于源空间,在 RHEL 中由 /etc/yum.repos.d/ 目录中的 .repo 文件配置指定,如 rhel-debuginfo.repo 的内容:


rhel-debuginfo.repo

[rhel-debuginfo]

name=Red Hat Enterprise Linux 5Client - i386 - Debug

baseurl=ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Client/en/os/i386/Debuginfo/

enabled=0

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值