在系统管理中,软件包的管理是最重要的,是系统管理的基础的基础。只有我们学会软件包的管理才能谈得上其它的应用。本文主要为Linux初学者提供在软件包的安装、更新、查询等方面的参考。
Turbolinux系统中的所有软件均以RPM包的形式存在,用户可以通过命令行或者图形化工具对系统中的软件包进行查询、安装、删除和升级等操作。在Turbolinux中有两个软件包管理工具,一个RPM,另一个是YUM。下面我们来分别详细介绍这两个软件包管理工具。
一、 RPM
1、 RPM介绍
RPM(RedHat Package Management)是一个开源的软件包管理工具,包括Turbolinux在内的大多数Linux发行平台上都使用它来管理软件包。对最终用户来说,软件包的安装、删除和升级都可通过简短的命令完成。RPM维护系统中所安装软件包的所有信息,因此,用户可通过RPM强大的查询选项对系统安装软件包进行查询或校验。软件包升级时,RPM会仔细处理用户的配置文件,因此不会出现由于软件升级而导致配置丢失的情况。对开发者来说,可以通过RPM将软件源代码打成包,并以源码包或二进制包的形式提供给最终用户。这些过程由一个包SPEC描述文件驱动,SPEC文件包含了编译该软件包所需的所有信息,如:源代码,补丁以及编译指令等等,当软件有新版本发布时,就能够极大地提高软件包的可维护性。由于RPM将改写系统文件,因此,必须是root用户才能进行软件包的安装、删除或升级。
理解RPM的设计目标对于更好的使用RPM包管理工具是有益的,具体来说,RPM的设计目标包括如下几个方面:
可升级性
使用RPM可以升级单个软件包而不需要重新安装整个系统。当基于RPM的Linux系统发行新版本时,RPM可以智能化、自动地升级现有的系统。软件包中的配置文件在升级时被保留,因此用户定制的配置信息不会丢失。
强大的查询功能
RPM设计时提供了强大的查询功能。你可以在整个包管理数据库中搜索指定的软件包或文件。你还可以轻易地知道哪个文件属于哪个软件包,软件包来自哪里。每个RPM包有一个二进制头,其中包含软件包本身及其内容的信息,包中的文件被压缩存储,这样就允许快速简捷地查询软件包。
系统校验
RPM另一项强大的功能是软件包校验。如果担心可能删除了某软件包中的一个重要文件,只需校验该软件包即可知道是否有这种情况。必要时,可以重装该软件包,修改过的配置文件在重装时会被RPM保留。
纯净源码
一个重要的设计目标是允许使用所谓”纯净”软件源码,即由软件作者发布的没有打过任何补丁的源码。RPM将”纯净”源码、所用的补丁、以及完整的编译指令放在一个描述文件中,用来驱动将来的包管理过程。这是一个重要的优点,理由有几个,例如,如果软件有新版本推出,你不必从头开始整个编译过程,因为所有缺省的编译选项,补丁信息,要生成的二进制包中文件的列表等等都包含在描述文件了。
保持源码”纯净”不仅对开发者重要,它也保证了给最终用户提供的软件的质量。
2、 RPM用法
RPM有五种最基本的操作:安装、删除、升级、查询和校验。下面将介绍这些操作的一般用法,详细情况可参考RPM的 man page。
1) 安装
假设要安装的软件包名为:foo-1.0-1.i386.rpm,用root用户登录到系统,运行以下命令:
rpm -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选项,这将可能导致该软件包不能正常运行,因此不建议这样做。
2)删除
删除软件包和安装一样简单,在提示符下输入如下命令:
rpm -e foo
如果系统中有其它软件包依赖要删除的软件包,那么将显示如下类似信息:
error: Failed dependencies:
foo is needed by (installed) bar-2.0.20-3.i386.rpm
此时也可以用–nodeps选项强制RPM删除该软件包,但这将导致依赖关系被破坏。
3)升级
与安装类似,升级软件包时输入以下命令:
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升级。
4)更新
更新与升级类似,命令如下:
rpm -Fvh foo-1.0-1.i386.rpm
与升级不同的是,如果系统中没有相应的旧包,将不执行安装操作。
5)查询
可以用-q命令对安装的软件包执行查询操作。如:rpm -q foo 将显示包的名字、版本号、发行号:foo-2.0-1
除了可以指定包的名称,也可以使用以下选项来配合-q命令执行各项查询操作:
-a 查询所有已安装的软件包
-f <文件名> 查询哪个包包含有指定的文件
-p <包名> 查询指定的软件包
同样,-q命令也有丰富的选项来指明执行查询操作时将显示什么信息:
-i 显示包的名称、描述、版本号、发行号、大小、编译时间、安装时间和提供商等信息
-l 显示包中所有文件的列表
-s 显示包中所有文件的状态
-d 显示包中所有的文档文件
-c 显示包中所有的配置文件
对于显示文件列表的选项,可以附加-v选项来显示详细信息。
6)校验
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 – 文件模式
? – 文件不可读
如果有任何输出显示,请判断是否真的有问题,然后决定删除或重安装异常的软件包,或者通过其它方式解决。
7)检查包的签名
如果仅想知道RPM包是否已损坏或被恶意篡改,可以用下面命令来验证包的MD5校验和:
rpm -K –nosignature
正常情况下将显示如下信息:
: md5 OK
如要看到更详细的消息,可以加vv选项,如:
rpm -Kvv –nosignature
另一方面,软件包开发者的可信度如何?如果该软件包使用了开发者的 GnuPG密钥签名,你就会知道开发者的身份是否如他们声称的那样。
GnuPG工具用于安全通信,而且完全替代了PGP。你可以用GnuPG来验证文档的有效性以及对要发送(接送)的文档加密(解密),同时,GnPG也能处理PGP 5.x的文件。
缺省时系统中已经安装有GnuPG, 因此,你可以马上用它来验证RPM包。但是,首先必须导入Turbolinux的公开密钥。
8)导入密钥
在可以检查包的签名前,必须用下面命令导入Turbolinux的公开密钥:
rpm -import /usr/share/gpg-pubkey/RPM-GPG-KEY
下面命令可以显示系统中已安装的公开密钥:
rpm -qa gpg-pubkey*
9)验证包的签名
导入密钥后,检查RPM包的GnuPG签名时可运行下面命令:
rpm -K
3、 示例
用户有时候会误删一些文件,但却不知道到底删了哪些文件,这时可以运行下面命令来检查整个系统:
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 : http://gcc.gnu.org
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
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
精简Linux系统管理工作的五个秘诀
Linux系统内部比较复杂,因此高效的管理效果大有不同。了解诸如systemd和开源PowerShell等工具如何帮助管理员的工作更加轻松……
-
托管OpenStack私有云能够获得支持or单打独斗?
OpenStack私有云托管作为一种服务可以简化企业的部署和运营,并强调了云计算的优势,而非Linux的优化……
-
系统宕机:设备和应用不再是大问题,人为错误是关键
实际上与几年前相比,现在的软件更具弹性,无论是商业软件还是开源软件出问题的几率都比较小。而系统宕机最常见原因不再是设备或应用程序故障,而是人为因素……
-
精简大型机系统管理的五项诀窍
从容量规划到更高效的虚拟存储管理等等,市面上都有各种各样的工具及策略可以实现大型机性能的优化。在本文中,主要介绍了精简大型机系统管理的五项诀窍……