Username: Password:

RPM应用之安装篇(1)
来源:linux宝库作者:linux宝库 发布时间:2007-09-30 00:00:00


  作者:雨亦奇 赵建利

  从一般意义上说,软件包的安装其实是文档的拷贝,RPM安装软件包,也无外乎此。但RPM要更进一步、更聪明一些就需要多做些工作了。

  聪明的安装

  从一般意义上说,软件包的安装其实是文档的拷贝,即把软件所用的各个文档拷贝到特定目录。RPM安装软件包,无外乎此。但RPM要更进一步,更聪明一些。在安装前,他通常要执行以下操作:

  1.检查软件包的依赖(Dependency)

  RPM格式的软件包中可包含有依赖关系的描述,如软件执行时需要什么动态链接库,需要什么程式存在及版本号需要等。当RPM检查时发现所依赖的链接库或程式等不存在或不符合需要时,默认的做法是中止软件包安装。

  2.检查软件包的冲突(Conflicts)

  有的软件和某些软件不能共存,软件包制作者会将这种冲突记录到RPM软件包中。安装时,若RPM发现有冲突存在,将会中止安装。

  3.执行安装前脚本程式(Preinstall)

  此类程式由软件包制作者设定,需要在安装前执行。通常是检测操作环境,建立有关目录,清理多余文档等等,为顺利安装作准备。

  4.处理配置文档(Configfiles)

  RPM对配置文档(Configfiles)有着特别的处理。因为用户常常需要根据实际情况,对软件的配置文档做相应的修改。假如安装时简单地覆盖了此类文档,则用户又得重新手工配置,很麻烦。这种情况下,RPM做得比较明智:他将原配置文档换个名字保存了起来(原文档名后缀加上.rpmorig),用户可根据需要再恢复,避免重新配置的尴尬。

  5.解压软件包并存放到相应位置

  这是最重要的部分,也是软件包安装的关键所在。在这一步,RPM将软件包解压缩,将其中的文档一个个存放到正确的位置,同时,文档的操作权限等属性相应配置正确。

  6.执行安装后脚本程式(Postinstall)

  此类程式为软件的正确执行设定相关资源,如修改inetd.conf、运行ldconfig程式以利新的动态链接库生效等等。

  7.更新RPM数据库

  安装后,RPM将所安装的软件及相关信息记录到其数据库中,便于以后升级、查询、校验和卸载。

  8.执行安装时触发脚本程式(Triggerin)

  触发脚本程式是指软件包满足某种条件(如已安装软件包sendmail,或file版本大于3.0)时才触发执行的脚本程式,他用于软件包之间的交互控制。触发脚本程式有三类:一是软件包安装时才触发的,称为安装时触发脚本程式(triggerin);二是软件包卸载前触发的,叫作卸载前触发脚本程式(triggerun);三是软件包卸载后才触发执行的,称作卸载后触发脚本程式(triggerpostun)。这些触发脚本程式,大大扩展了RPM软件包管理的功能。

  命令格式

  安装RPM格式的软件包,可使用如下命令格式:

  rpm -i [安装选项1 安装选项2...] 包裹文档1 包裹文档2...

  注:可用--install代替-i,效果相同。

  选项列表

  包裹文档

  对于要安装的RPM格式的包裹文档,RPM对其名字不作强制需要。用户能够使用以下三种方式的命名样式:

  1.典型的命名样式(常用):

  格式为:软件名-版本号-释出号.体系号.rpm

  注:体系号指的是执行程式适用的处理器体系,如i386体系,sparc体系等。体系号为src时表明为源代码包,否则为执行程式包。

  如abc-3.2-1.i386.rpm为执行程式包,软件名为abc,版本号为3.2,释出号为1,适用体系为i386,而abc-3.2-1.src.rpm则为源代码包。

  2.URL形式的命名样式(较常用):

  * FTP方式的命名格式:ftp://[用户名[:密码]@]主机[:端口]/包裹文档

  注:[]括住的内容表示可选。主机能够是主机名,也可是IP地址。包裹文档可含目录信息。如未指定用户名,则RPM采用匿名方式传输数据(用户名为anonymous)。如未指定密码,则RPM会根据实际情况提示用户输入密码。如未指定端口,则RPM使用默认端口(一般为21)。

  如ftp://ftp.xxx.com/yyy.rpm(使用匿名传输,主机ftp.xxx.com,包裹文档yyy.rpm);

  如ftp://24.109.164.55:1024/pub/yyy.rpm(匿名FTP传输,主机IP:24.109.164.55,使用1024端口,包裹文档在/pub目录下);

  如ftp://zhsoft@ftp.xxx.com/yyy.rpm(主机ftp.xxx.com,FTP用户名zhsoft,如有密码,RPM将会自动提示输入);

  如ftp://zhsoft:password@ftp.xxx.com/yyy.rpm(主机ftp.xxx.com,FTP用户名zhsoft,密码password)。

  * HTTP方式的命名:http://主机[:端口]/包裹文档

  注:[]括住的内容可选。主机能够是主机名,也可是IP地址。包裹文档可含目录信息。如未指定端口,则RPM默认使用80端口。

  如http://www.xxx.com/yyy.rpm(用HTTP获取www.xxx.com主机上的yyy.rpm文档);

  又如http://www.xxx.com:8080/pub/yyy.rpm(用HTTP获取www.xxx.com主机上/pub目录下的yyy.rpm文档,使用端口8080)。

  3.其他形式(很少使用):

  命名格式:任意

  如将abc-3.2-1.i386.rpm改名为abc.txt,用RPM安装也会安装成功,其根本原因是RPM判定一个文档是否RPM格式,不是看名字,而是看内容,看其是否符合特定的格式。

  选项详解

  一、安装指定用选项

  1.hash(或-h):以#显示安装进度

  假如一个软件包很大、安装费时时,用户若想及时了解安装进度,必须用此选项。该选项以显示#号表示进度,每个#号表示2%的进度,总共要显示50个#号。下面安装MySQL软件包,如下所示:

  # rpm -i --hash MySQL-3.22.32-1.i386.rpm

  ##################################################

  #

  从上看出,软件包安装顺利完成。

  2.percent:以%(百分比)显示安装进度

  percent的含义是百分比,而此选项的作用就是以百分比(%)来显示安装进度的。同样是安装MySQL软件包,下面的输出就不相同:

  # rpm -i --percent MySQL-3.22.32-1.i386.rpm

  %% 0.000000

  %% 0.002600

  %% 0.020586

  ......

  %% 100.000000

  #

  上例中省略了很多输出(......表示)。因为假如软件包很大,则用--percent时输出的内容会很多,所以用户最好用--hash选项,以#号来表示安装进度,这样简洁明了。

  3.test:安装测试

  所谓安装测试,意即并非真正的安装,他不拷贝和建立任何文档。使用本选项的目的在于:检测软件包的依赖关系是否满足,是否存在潜在的冲突等等。

  # rpm -i --test autofs-3.1.3-2.i386.rpm

  error: failed dependencies:

  mktemp is needed by autofs-3.1.3-2

  #

  本例进行安装测试时发现了依赖方面的错误,autofs所需要的mktemp包不存在,安装中断。

  下面先安装mktemp软件包,再进行autofs安装测试,看情况怎么样:

  # rpm -i mktemp-1.5-2.i386.rpm

  # rpm -i --test autofs-3.1.3-2.i386.rpm

  #

  由上看出,这次测试没有出现什么错误。

  4.replacepkgs:替换软件包

  为什么要替换软件包?原因可能是系统中的软件包已破坏了,其中一个或多个文档丢失或损毁。假如用户想修复这个软件包,用直接安装的方法,RPM将报错退出:

  # rpm -V file

  missing/usr/man/man1/file.1

  # rpm -i file-3.26-6.i386.rpm

  package file-3.26-6 is already installed

  #

  注:本例先用RPM校验命令校验一下file软件包,发现/usr/man/man1/file.1文档丢失。之后用安装命令安装,RPM提示软件包file-3.26-6已安装了。(有关RPM校验命令,<<精通RPM之六--校验篇>>中将会有周详的介绍)

  假如采用--replacepkgs选项,结果又怎样呢?

  # rpm -i --replacepkgs file-3.26-6.i386.rpm

  # rpm -V file

  #

  看来,RPM成功地替换了原软件包,校验一下该包,发现没有错误输出,所以现在的软件包是完整的。

  5.replacefiles:替换文档

  RPM是聪明的软件包管理器,他维护着每个已安装软件包的文档信息。假如在安装一个新的软件包时,RPM发现其中某个文档和已安装的某个软件包中的文档名字相同但内容不同,那么RPM就会认为这是个文档冲突,会报错退出:

  # rpm -i ff-4.0-2.i386.rpm

  file /root/my.a from install of ff-4.0-2 conflicts with file from package zoo-6.0-1

  #

  注:本例中RPM发现要安装的软件包ff-4.0-2和已安装的软件包zoo-6.0-1中,含有相同的一个文档/root/my.a,但其内容并不相同,所以提示了文档冲突的错误。

  假如用户想忽略这个错误,可使用--replacefiles选项,指示RPM发现文档冲突时,直接替换掉原文档即可。注意:除非用户对所冲突的文档有很深的了解,不要轻易替换文档,以免破坏已安装软件包的完整性,确保其能正常运行。

  # rpm -i --replacefiles ff-4.0-2.i386.rpm

  #

  采用该选项后,软件包能顺利安装了。

  另外,说到替换文档,若要安装的软件包中的文档已存在,但此文档并不属于

  

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅