Linux 平台上的软件包管理
<img height="1" width="10" alt=""><!----> <!--><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><!--><!----><img height="1" width="10" alt=""><!----> 文档选项安装,升级和卸载应用软件是影响用户对操作系统评价的决定性因素之一。对于日渐流行的 GNU/Linux 操作系统,拥有简洁强大的软件包管理机制功不可没。本文从基本的rpm/dpkg 命令行出发,以 RHEL 和 UBUNTU 为例,介绍典型 Linux 系统中应用软件的管理和使用。
# rpm -ivh package.rpm
<a name="N100F0">升级 RPM 包命令
# rpm -Uvh package.rpm
# rpm -ev package
<a name="N10100">查询 RPM 包中包含的文件列表命令
# rpm -qlp package
# rpm -qlp package
<a name="N10110">查询 RPM 包中包含的内容信息命令
# rpm -qip package
# rpm -qa
<a name="N1011E">RPM 包管理示例
以下步骤描述了一个普通用户安装IBM Lotus Notes V85 ( 以下简称 Notes) 的典型操作过程。 Notes 的 RPM 包名为ibm_lotus_notes-8.5.i586.rpm 。
[*]首先查询是否该软件是否已经在系统中存在
# rpm -qa | grep ibm_lotus_notes
[*]
[*]如果返回信息为空那么说明该软件还未被安装。
[*]查询 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 200809: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 Notessoftware provides a robust ...
[*]
[*]安装 Notes:
# rpm -ivh ibm_lotus_notes-8.5.i586.rpm
<ol><li style="text-align: left; line-height: 14.25pt;" class="MsoNormal">
</p>Preparing...###########################################
1:ibm_lotus_notes###########################################
[*]
[*]升级 Notes:
若今后需要基于该版本升级至更高版本的 Notes( 缝 .0 - ibm_lotus_notes-9.0.i586.rpm),则使用 -U 参数:
# rpm -Uvh ibm_lotus_notes-8.5.i586.rpm
在该步骤中如果使用 -i 则系统通常会报文件冲突错误,无法正常安装。
[*]卸载 Notes
注意卸载软件使用软件名称,而不是包文件名:
# rpm -ev ibm_lotus_notes
<!--><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><!--><!----><img height="1" width="1" alt="" border="0"><!---->
<!--><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><!--><!----><img height="6" width="8" alt="" border="0"><!---->
<!--><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><!--><!----><img height="4" width="800" alt="" border="0"><!---->
<!--><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><!--><!----><img height="16" width="16" alt="" border="0"><!----> <a href="http://www.ibm.com/developerworks/cn/linux/l-cn-rpmdpkg/index.html#main#main">回页首
$ sudo dpkg -i package.deb
<a name="N10190">升级 DEB 包命令
$ sudo dpkg -i package.deb ( 和安装命令相同)
$ sudo dpkg -r package.deb # 不卸载配置文件
或
$ sudo dpkg -P package.deb # 卸载配置文件
<a name="N101A0">查询 DEB 包中包含的文件列表命令
$ sudo dpkg-deb -c package.deb
$ dpkg --info package.deb
<a name="N101B0">查询系统中所有已安装 DEB 包
$ dpkg -l package
$ dpkg -l ibm-lotus-*
[*]
<a name="N101C9">如果系统中从未安装过 Lotus 产品,那么返回信息为 :
No pakcages found matching ibm-lotus-*
<ol><li style="text-align: left; line-height: 14.25pt;" class="MsoNormal">
</p>pn ibm-lotus-notes none (no description available)
[*]
[*]查询 Notes 软件包内容:
$ dpkg --info ibm_lotus_notes-8.5-i586.deb
[*]
<a name="N101E2">返回信息 :
new debian package, version 2.0.
size 335012296bytes: control archive= 231821 bytes.
...
Package:ibm-lotus-notes
Version:8.5-20081211.1925
Section: IBM
Priority: extra
Architecture:i386
Installed-Size:619444
Maintainer: IBMLotus Product
Description:IBM Lotus Notes
IBM Lotus Notessoftware provides a robust ... ...
[*]
[*]安装 Notes:
$ sudo dpkg -i ibm_lotus_notes-8.5.i586.deb
<ol><li style="text-align: left; line-height: 14.25pt;" class="MsoNormal">
</p>(Readingdatabase ... 151150 files and directories currently installed.)
Preparing toreplace ibm-lotus-notes 8.5-20081211.1925
(usingibm-lotus-notes-higher-version.i586.deb) ...
Unpackingreplacement ibm-lotus-notes ...
Setting upibm-lotus-notes (higher-version) ...
[*]
[*]升级 Notes:
$ sudo dpkg -i ibm_lotus_notes-8.5.i586.deb
[*]
<a name="N10201">返回信息 :
(Readingdatabase ... 151150 files and directories currently installed.)
Preparing toreplace ibm-lotus-notes 8.5-20081211.1925
(usingibm-lotus-notes-higher-version.i586.deb) ...
Unpackingreplacement ibm-lotus-notes ...
Setting upibm-lotus-notes (higher-version) ...
[*]
[*]卸载 Notes
注意卸载软件使用软件名称,而不是包文件名:
$ sudo dpkg -P ibm-lotus-notes
<!--><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><!--><!----><img height="1" width="800" alt="" border="0"><!---->
<!--><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><!--><!----><img height="6" width="8" alt="" border="0"><!---->
<!--><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><!--><!----><img height="4" width="800" alt="" border="0"><!---->
<!--><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><!--><!----><img height="16" width="16" alt="" border="0"><!----> 回页首
# rpm -ivh package_a.rpm
error: Faileddependencies:
pacakge_b =version info is needed by package_a
<a name="N10226">Ubuntu 904
$ sudo dpkg -i package_a.deb
dpkg: regardingpackage_a.deb containing package, pre-dependency problm:
package_a pre-dependson package_b (version info)
dpkg: errorprocessing package_a.deb (--install):
pre-dependencyproblem - not installing package_a
Errors wereencountered while processing:
package_a.deb
# 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 之前安装于系统中。
<a name="N10240">查询 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 之前安装于系统中。
所以正确的安装方法如下节所示。
##RPM
# rpm -ivhpackage_b.rpm
# rpm -ivhpackage_a.rpm
##DEB
$ sudo dpkg -ipackage_b.deb
$ sudo dpkg -ipackage_a.deb
<a name="N1025A">嵌套的依赖关系
如上示例为最理想的依赖关系,实际应用中往往最令用户头疼的是 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 。
<!--><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><!--><!----><img height="1" width="800" alt="" border="0"><!---->
<!--><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><!--><!----><img height="6" width="8" alt="" border="0"><!---->
<!--><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><!--><!----><img height="4" width="800" alt="" border="0"><!---->
<!--><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><!--><!----><img height="16" width="16" alt="" border="0"><!----> 回页首
更友好的包管理软件 - YUM
YUM
YUM 基于 RPM 包管理工具,能够从指定的源空间(服务器,本地目录等)自动下载目标 RPM 包并且安装,可以自动处理依赖性关系并进行下载、安装,无须繁琐地手动下载、安装每一个需要的依赖包。此外,YUM 的另一个功能是进行系统中所有软件的升级。如上所述,YUM 的 RPM 包来源于源空间,在 RHEL 中由 /etc/yum.repos.d/ 目录中的 .repo 文件配置指定,如 rhel-debuginfo.repo 的内容:
rhel-debuginfo.repo
name=Red HatEnterprise 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
<span style="">
<a name
页:
[1]