Chinaunix首页 | 论坛 | 博客
  • 博客访问: 479408
  • 博文数量: 132
  • 博客积分: 2995
  • 博客等级: 少校
  • 技术积分: 1412
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-06 20:14
文章分类

全部博文(132)

文章存档

2010年(2)

2008年(21)

2007年(109)

我的朋友

分类:

2008-02-20 16:19:54

GTES11系统中的所有软件均以RPM包的形式存在,用户可通过图形化工具或命令行对系统中的软件包进行安装、删除和升级操作。RPM包管理器是一个开放的系统,运行在包括Turbolinux在内的大多数Linux平台上。对最终用户来说,软件包的安装、删除和升级都可通过简短的命令完成。RPM维护系统中所安装软件包的所有信息,因此,用户可通过RPM强大的查询选项对系统安装软件包进行查询或校验。
软件包升级时,RPM会仔细处理用户的配置文件,因此不会出现由于软件升级而导致配置丢失的情况。对开发者来说,可以通过RPM将软件源代码打成包,并以源码包或二进制包的形式提供给最终用户。这些过程由一个包SPEC描述文件驱动,SPEC文件包含了编译该软件包所需的所有信息,如:源代码,补丁以及编译指令等等,当软件有新版本发布时,就能够极大地提高软件包的可维护性。
由于RPM将改写系统文件,因此,必须是root用户才能进行软件包的安装、删除或升级。
理解RPM的设计目标对于更好的使用RPM包管理工具是有益的,具体来说,RPM的设计目标包括如下几个方面:
• 可升级性
使用RPM可以升级单个软件包而不需要重新安装整个系统。当基于RPM的Linux系统发行新版本时,RPM可以智能化、自动地升级现有的系统。软件包中的配置文件在升级时被保留,因此用户定制的配置信息不会丢失。
• 强大的查询功能
RPM设计时提供了强大的查询功能。你可以在整个包管理数据库中搜索指定的软件包或文件。你还可以轻易地知道哪个文件属于哪个软件包,软件包来自哪里。每个RPM包有一个二进制头,其中包含软件包本身及其内容的信息,包中的文件被压缩存储,这样就允许快速简捷地查询软件包。
• 系统校验
RPM另一项强大的功能是软件包校验。如果担心可能删除了某软件包中的一个重要文件,只需校验该软件包即可知道是否有这种情况。必要时,可以重装该软件包,修改过的配置文件在重装时会被RPM保留。
• 纯净源码
一个重要的设计目标是允许使用所谓“纯净”软件源码,即由软件作者发布的没有打过任何补丁的源码。RPM将“纯净”源码、所用的补丁、以及完整的编译指令放在一个描述文件中,用来驱动将来的包管理过程。这是一个重要的优点,理由有几个,例如,如果软件有新版本推出,你不必从头开始整个编译过程,因为所有缺省的编译选项,补丁信息,要生成的二进制包中文件的列表等等都包含在描述文件了。保持源码“纯净”不仅对开发者重要,它也保证了给最终用户提供的软件的质量。

RPM有五种最基本的操作:安装、删除、升级、查询和校验。下面将介绍这些操作的一般用法,详细情况可参考RPM的man page。

假设要安装的软件包名为:foo-1.0-1.i386.rpm,用root用户登录到系统,运行以下命令:

#-ivh foo-1.0-1.i386.rpm

如果安装成功,将显示如下信息:

Preparing...                ########################################### [100%]
   1:foo                    ########################################### [100%]

RPM从版本4.1开始,在安装或升级软件包时会检查软件包的签名。如果签名验证失败,将显示如下错误信息:

error: V3 DSA signature: BAD, key ID 0352860f

如果仅是一个新的文件头签名,将显示如下错误信息:

error: Header V3 DSA signature: BAD, key ID 0352860f

如果系统中没有相应的密钥来验证该签名,将显示如下警告信息:

warning: V3 DSA signature: NOKEY, key ID 0352860f

安装过程比较简单,但也可能出现下面错误:
• 已经安装的包
如果系统中已安装有同样版本的软件包,将显示如下信息:

Preparing...                ########################################### [100%]
package foo-1.0-1 is already installed

这种情况下,如果仍然要强行安装,可以使用—replacepkgs选项,此时,RPM将忽略该错误:

#rpm -ivh --replacepkgs foo-1.0-1.i386.rpm

该选项在删除了原来安装的RPM包中的一些文件,或者想恢复初始时配置文件的情况下有用。
• 冲突的文件
如果要安装的软件包与已安装的软件包包含有相同名字的文件,将显示如下信息: Preparing… ########################################### [100%] file /usr/bin/foo from install of foo-1.0-1 conflicts with file from package bar-2.0.20 可以使用—replacefiles选项让RPM忽略此错误:

#rpm -ivh --replacefiles foo-1.0-1.i386.rpm

• 不能解析的依赖
RPM包有时会依赖其它的软件包,只有安装了这些被依赖的包,该软件包才能正常运行,如果依赖关系没有解决,将显示如下类似信息:

error: Failed dependencies:
        bar.so.2 is needed by foo-1.0-1
    Suggested resolutions:
        bar-2.0.20-3.i386.rpm

如果仍然要强行安装,可以使用—nodeps选项,这将可能导致该软件包不能正常运行,因此不建议这样做。

删除软件包和安装一样简单,在提示符下输入如下命令:

#rpm -e foo

如果系统中有其它软件包依赖要删除的软件包,那么将显示如下类似信息:

error: Failed dependencies:
        foo is needed by (installed) bar-2.0.20-3.i386.rpm

此时也可以用—nodeps选项强制RPM删除该软件包,但这将导致依赖关系被破坏。

与安装类似,升级软件包时输入以下命令:

#rpm -Uvh foo-1.0-1.i386.rpm

RPM将自动删除系统中相应的旧包。实际上也可以使用-U命令来安装软件包,而不管系统中有无该软件包的以前版本。
如果系统中有软件包升级时需要更新的配置文件,那么将显示如下类似信息:

saving /etc/foo.conf as /etc/foo.conf.rpmsave

该信息意味着新的配置文件不能前向兼容系统中原有配置文件,原有配置文件被更名保存,新的配置文件安装进去。此时应该马上对比一下新老配置文件的不同,确保系统仍能正常运行。
如果RPM认为要升级的软件包比系统中原有的旧,则提示如下类似信息:

package foo-2.0-1 (which is newer than foo-1.0-1) is already installed

可以使用–oldpackage选项强制RPM升级。

更新与升级类似,命令如下:

#rpm -Fvh foo-1.0-1.i386.rpm

与升级不同的是,如果系统中没有相应的旧包,将不执行安装操作。

可以用-q命令对安装的软件包执行查询操作。如:rpm -q foo将显示包的名字、版本号、发行号:foo-2.0-1
除了可以指定包的名称,也可以使用以下选项来配合-q命令执行各项查询操作:

• -a 查询所有已安装的软件包
• -f <文件名> 查询哪个包包含有指定的文件
• -p <包名> 查询指定的软件包

同样,-q命令也有丰富的选项来指明执行查询操作时将显示什么信息:

• -i 显示包的名称、描述、版本号、发行号、大小、编译时间、安装时间和提供商等信息
• -l 显示包中所有文件的列表
• -s 显示包中所有文件的状态
• -d 显示包中所有的文档文件
• -c 显示包中所有的配置文件

对于显示文件列表的选项,可以附加-v选项来显示详细信息。

RPM使用-V命令校验软件包,校验内容包括:大小、MD5校验和、类型以及文件所属的用户和组等。可以与-V命令配合使用的校验选项有:

• -f <文件名> 校验指定文件所属的软件包,例如: #rpm -Vf /usr/bin/vim
• -a 校验所有已安装的软件包,例如: #rpm -Va
• -p <包名> 用指定的软件包校验已安装的软件包,例如: #rpm -Vp foo-1.0-1.i386.rpm

如果校验一切正常,将没有输出,反之则输出不一致结果,格式为:

xxxxxxxx	 文件名

字段1由八个字符组成,每个字符指明该文件与RPM数据库中一致或不一致的地方,单个点(.)说明没有异常,具体含义如下:

• 5 — 校验和
• S — 文件大小
• L — 符合连接
• T — 文件修改时间
• D — 设备
• U — 用户
• G — 组
• M — 文件模式
• ? — 文件不可读

如果有任何输出显示,请判断是否真的有问题,然后决定删除或重安装异常的软件包,或者通过其它方式解决。

如果仅想知道RPM包是否已损坏或被恶意篡改,可以用下面命令来验证包的MD5校验和:

#rpm -K --nosignature 

正常情况下将显示如下信息:

: md5 OK

如要看到更详细的消息,可以加vv选项,如:

#rpm -Kvv --nosignature 

另一方面,软件包开发者的可信度如何?如果该软件包使用了开发者的 GnuPG密钥签名,你就会知道开发者的身份是否如他们声称的那样。GnuPG工具用于安全通信,而且完全替代了PGP。你可以用GnuPG来验证文档的有效性以及对要发送(接送)的文档加密(解密),同时,GnPG也能处理PGP5.x的文件。
缺省时系统中已经安装有GnuPG, 因此,你可以马上用它来验证RPM包。但是,首先必须导入Turbolinux的公开密钥。

在可以检查包的签名前,必须用下面命令导入Turbolinux的公开密钥:

#rpm –import /usr/share/gpg-pubkey/RPM-GPG-KEY

下面命令可以显示系统中已安装的公开密钥:

rpm -qa gpg-pubkey*

导入密钥后,检查RPM包的GnuPG签名时可运行下面命令: rpm -K

用户有时候会误删一些文件,但却不知道到底删了哪些文件,这时可以运行下面命令来检查整个系统:

#rpm -Va

遇到不认识的文件时,可以这样查看它属于哪个包:

#rpm -qf /usr/bin/ggv

把上面两个例子结合起来,下面命令将检查指定文件所属的那个RPM包:

#rpm -Vf /usr/bin/paste

要知道一个程序所在RPM包的相关文档在哪儿时可运行:

rpm -qdf /usr/bin/host

查看一个二进制包的详细信息时,执行下面命令:

#rpm -qpi gcc-3.4.3-9.4.i386.rpm

输出结果如下:

Name : gcc               Relocations: (not relocatable)
Version : 3.4.3 
Vendor: (none)
Release     : 9.4  
Build Date: 2005年04月29日 星期五 14时10分13秒
Install Date: (not installed)              
Build Host: dev3-241.dev.cn.tlan
Group       : Development/Languages         
Source RPM: gcc-3.4.3-9.4.src.rpm
Size        : 13029656                        
License: GPL
Signature   : (none)
URL         : 
Summary     : Various compilers (C, C++, Objective-C, Java, ...)
Description :
The gcc package contains the GNU Compiler Collection version 3.4.
You'll need this package in order to compile C code.

再有,下面命令可以查看包中所有文件列表:

#rpm -qlp crontabs-1.10-5.noarch.rpm
阅读(840) | 评论(0) | 转发(0) |
0

上一篇:端口基础常识

下一篇:4500 rommon 启动问题

给主人留下些什么吧!~~