软件安装之RPM篇
现在放寒假在家,上网很不方便,闲着没事写了几篇关于linux学习的初级文章,希望能对各位新人有所帮助。软件安装之RPM篇
RPM是RedHat Package manager的缩写,意即RedHat软件管理器,是一个开放的、任何人都能得到的包管理软件,也是现在Linux系统下比较流行的一种软件包格式,由Red Hat Linux公司所开发和维护,可以在 RedHat Linux 和其他的Linux及Unix系统上运行。
RPM软件包的名字看起来一长串,比较复杂,但是杂而不乱,其命名方式有一定规律,通常为 name-version-release.platform.rpm。例如xmms-1.2.10-1.i386.rpm中xmms为软件名,1.2.10为版本号,1为发行次数,i386表示运行平台为Intel的386兼容平台,rpm为文件后缀。
RPM有六个基本的功能---安装、卸载、升级、更新、查询、校验
下面我将结合在Magic Linux RC1.2上安装xmms-1.2.10-1.i386.rpm 的安装步骤来具体讲解以上六种功能。
1、安装
一般情况下,在安装软件之前,我都会进行软件的安装测试。所谓安装测试,意即并非真正的安装,它不拷贝和建立任何文件,其目的在于:检测软件包的依赖关系是否满足,是否存在潜在的冲突等。
#rpm -i --test xmms-1.2.8-1.i386.rpm
如果没有返回任何消息,说明你可以正常安装该软件,不存在什么缺少依赖或软件冲突的情况。
安装测试后就可以开始安装软件了,其实安装RPM软件非常简单,通常只需要用 -ivh 选项就可以了。
# rpm -ivh xmms-1.2.10-1.i386.rpm
Preparing... ###########################################
1:xmms ###########################################
#
当显示新的提示符,没有错误消息,你就成功了
-i表示安装(install),-v显示软件名称xmms, -h显示#型进度条
如果想看到更多的安装信息,可以使用-vv选项
在安装RPM软件时,我们经常出现三种错误提示--软件已经安装、版本冲突和软件依赖。
(1)软件已经安装(Installed)
现在,我们已经安装过xmms了,如果我们再安装一次会出现什么现象呢?
# rpm -ivh xmms-1.2.10-1.i386.rpm
Preparing... ###########################################
package xmms-1.2.10-1 is already installed
#
系统会提示该软件已经安装,如果你想强制安装,可以加上--replacepkgs来强制安装。
# rpm -ivh --replacepkgs xmms-1.2.10-1.i386.rpm
Preparing... ###########################################
1:xmms ###########################################
#
如果在运行某软件时,系统提示该软件某文件丢失,我们通常会想到重新安装这个软件,于是用 -ivh 选项来安装,结果发现系统提示该软件已经安装,不能再安装了,这时我们就可以用--replacepkgs选项来强制安装这个软件。
# mv /usr/bin/xmms /usr/bin/xmms.sav
# rpm -V xmms
missing /usr/bin/xmms
# rpm -ivh xmms-1.2.10-1.i386.rpm
Preparing... ###########################################
package xmms-1.2.10-1 is already installed
# rpm -ivh --replacepkgs xmms-1.2.10-1.i386.rpm
Preparing... ###########################################
1:xmms ###########################################
# rpm -V xmms
#
在上面的例子中,我人为地造成了xmms软件的丢失,并用-V选项来验证(验证将在后面讲解),系统提示missing /usr/bin/xmms,这种情况下,我们通常会想到用-ivh选项来重新安装,结果系统却提示package xmms-1.2.10-1 is already installed,这时我们加入--replacepkgs选项,就可以正常安装了,用-V选项校验xmms也没有出现问题。
(2)软件版本冲突或不兼容(Conflict)
软件的版本冲突通常指两种不同软件之间的冲突和软件自身新久版本之间的不兼容。
如果在安装软件时,遇到了版本冲突的情况,系统会列出所有的冲突消息,这种情况下,你由两种选择,一放弃安装新软件,另外就是先删除旧软件,再安装新软件。
在这里为了举例说明,我上网下载了一个旧版的xmms-1.2.8-1.i386.rpm来安装,从软件自身新久版本冲突来讲讲软件冲突。
# rpm -ivh xmms-1.2.8-1.i386.rpm
Preparing...
###########################################
package xmms-1.2.10-1 (which is newer than xmms-1.2.8-1) is already installed
file /usr/bin/wmxmms from install of xmms-1.2.8-1 conflicts with file from package xmms-1.2.10-1
…………………………(这里省约一大串版本冲突的消息)
file /usr/share/man/man1/xmms.1.gz from install of xmms-1.2.8-1 conflicts with file from package xmms-1.2.10-1
#
从提示消息中可以看到*** conflicts with ***之类的消息,虽然没有人原意看到这些消息,但它确实存在着,前面体到的--test测试选项和后面将谈到的关于RPM包查询和验证的功能,可以用来尽量避免这种冲突。
当然,如果你想强制安装的话,可以加入--force参数,但这样不能保证安装后的软件正确运行。
# rpm -ivh --force xmms-1.2.8-1.i386.rpm
(3)软件依赖(Dependency)
RPM软件之间往往存在着依赖关系,在安装软件之前必须先安装该软件所依赖的其他软件或函数库才能保证安装成功。
用rpm -qR xmms可以查询xmms所依赖的软件和函数库。
# rpm -qR xmms
/sbin/ldconfig
/sbin/ldconfig
gtk+ >= 1:1.2.2
libICE.so.6
……………………
libpthread.so.0(GLIBC_2.3.2)
libxmms.so.1
libz.so.1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
#
也就是说,在安装xmms-1.2.10-1之前,你的电脑里必须存在
/sbin/ldconfig行
…………
rpmlib(PayloadFilesHavePrefix) <= 4.0-1行
之间的所有内容,少一个都不行。
如果你想在缺少软件依赖的情况下强制安装,可以加上 --nodeps 选项,同样,这样也不能保证安装成功
# rpm -ivh --nodeps xmms-1.2.10-1.i386.rpm
2、删除
安装完软件后,新人常常会问,我的软件安装在什么地方?我该怎样把它删掉?
其实,删除软件和安装软件一样简单,只需使用 -e 选项
# rpm -e xmms
# xmms
-bash: xmms: command not found
#
这里要注意的是,删除时是用软件的名字 xmms,而不是软件包的名字 xmms-1.2.10-1.i386.rpm
如果你所删除的软件被其他软件所依赖的,则系统会提示软件依赖,并禁止删除,如果你一定要删除,也可以加上 --nodeps选项来强制删除,但这样可能造成其他软件不能正常运行。
3、升级
如果我们的机子里先安装了软件 xmms-1.2.8-1.i386.rpm,现在要安装最新新版本xmms-1.2.10-1.i386.rpm的话,只需要用-Uvh选项来升级该软件就可以了
# rpm -Uvh xmms-1.2.10-1.i386.rpm
Preparing... ###########################################
1:xmms ###########################################
#
这里不应该使用 -i 来重新安装,而必须使用 -U来升级安装该软件。事实上,-U选项的安装程序是先删除所有旧版软件,再安装上新版软件,所以以后不管是否安装过该软件,都可以使用 rpm -Uvh来安装该软件。如果发现新版的软件不好用或不稳定,想换回旧版软件,则可以加上 --oldpackage 选项,强制安装久版软件。
# rpm -Uvh --oldpackage xmms-1.2.8-1.i386.rpm
这个选项是乎和 #rpm -ivh --force xmms-1.2.8-1.i386.rpm功能相同
但是原理上有点差别,在升级软件版本之后,原先旧版软件的设置文件都会被复制成XXX.rpmsave(XXX是久版软件原本的设置文件名称)的文件。用--oldpackage就是将这些设置文件恢复,并更换新版与旧版软件相冲突的地方。而--force则是强制地把新版软件更换旧版软件。
4、更新
RPM软件包的更新与软件包的升级非常相似,但是RPM的更新只会从新版软件包中安装与旧版软件相对应的文件,这与RPM的升级不同,升级选项不管新版软件包中的软件是否有对应的旧版软件,升级选项都会安装所有新版软件包里的文件。
# rpm -Fvh xmms-1.2.10-1.i386.rpm
xmms ####################################
#
如果用户下载了大量的软件包,但只想升级系统中已有的软件包时,RPM的更新选项会非常有用。
这种情况下,只需要输入#rpm -Fvh *.rpm就可以了,RPM工具会自动升级那些已经安装好的软件包。
5、查询
RPM不仅提供了强大简单的软件安装卸载功能,同时软件及软件包的管理方面也做得非常出色。通过对软件包的查询可以知道该软件包里有些什么东西?它会安装些什么东西?安装在哪个文件夹?它有什么软件依赖?它的版本号等等,这些都可以用RPM提供的查询功能得到。同样,你也可以查询某个文件出自哪个软件包等等。
RPM的查询常采用如下的格式:
rpm -q[查询选项1][查询选项2]…… 文件名或软件包名
如:
# rpm -qi xmms
Name : xmms
Relocations: (not relocatable)
Version : 1.2.10
Vendor: XMMS Development Team <[email protected]>
Release : 1
Build Date: 2004年02月23日 星期一 22时04分07秒
Install Date: 2005年01月26日 星期三 14时22分57秒
Build Host: athlon.kvaalen.no
Group : Applications/Multimedia
Source RPM: xmms-1.2.10-1.src.rpm
Size : 5443384
License: GPL
Signature : (none)
Packager : Haavard Kvaalen <[email protected]>
URL : http://www.xmms.org/
Summary : XMMS - Multimedia player for the X Window System.
Description :
X MultiMedia System is a sound player written from scratch. Since it
uses the WinAmp GUI, it can use WinAmp skins. It can play mp3s, mods,s3ms,
and other formats. It now has support for input, output, general, and
visualization plugins.
#
RPM的查询功能非常强大,下面列出一些常用选项,请读者自己试试
-a 查询当前所有已安装的软件包
-f <file> 查询 file 是属于哪个软件包
-p <packagefile> 查询软件包的名称
-i <软件名> 显示软件的基本资料(名称、描述、版本、文件大小、建立日期、发行人等资料)
-l <软件名> 列出软件包中包含的文件的安装位置
-s <软件名> 列出与软件相关的所有文件状态(normal 或 missing)
-d <软件名> 列出软件的说明文件的安装位置(如: man 手册、info信息、README等的位置)
-v <软件名> 列出软件的附加信息
6、验证RPM软件包
RPM对一般文件和RPM软件包都可以验证,以判断所安装的软件是否正确
下面列一些常用的选项
rpm -V[验证选项1][验证选项2]…… 文件名或软件包名
例如:
# rpm -Vf /usr/bin/xmms
#
没有返回任何信息,说明文件正常。
下面列出一些常用选项
-f <文件名> 校验单个文件
-p <软件包> 用RPM软件包校验已安装的软件包
-a 校验所有已安装的软件包
后记:
RPM工具的功能非常强大,这里仅和大家谈到了一些常用的功能,如果你有心想精通RPM的各项功能,建议直接看RPM手册。 好! 安装软件是踏入linux,必经之路,希楼主介绍介绍configure的选项. 不错的说,继续加油。 :mrgreen:
页:
[1]