找回密码
 注册
搜索
热搜: 回贴
微赢网络技术论坛 门户 服务器 Linux/BSD 查看内容

RPM 与 SRPM 套件管理

2009-12-20 13:50| 发布者: admin| 查看: 74| 评论: 0|原作者: 段誉

RPM全名叫"RedHat Package Manager",是红帽子公司开发的套件管理程序。它的原理是以数据库记录的方式将套件安装到linux主机。它最大的特点是将程序的源代码编译后将其打包,用包里的数据库记录此件安装所必需的依赖模块。当我们把RPM包从网上下载到linux主机中安装时,RPM会检测RPM包里数据库,对比linux主机是否存在安装此套件所须的模块,如模块齐全,则安装,不齐全,则不会安装。在安装的同时,主机的RPM数据库将记录安装信息,以便未来对此套件的查询,验证与卸载。
优点:
1.由于RPM包已经编译并打包好了,安装时不需要重新编译
2.由于安装RPM包时,linux主机会记录安装信息到数据库,方便以后的查询,升级,卸载
缺点:
1.安装环境要与套件编译打包时的环境一致或接近
2.需要满足套件安装的依赖关系
3.反安装时,最底层的软件不能先移除,否则可能会造成整个系统有问题
既然RPM受到安装环境的限制,所以一个RPM包在支持RPM管理的各种发行版中,未必能通用。所以就出现一种能不受安装环境限制能在各个支持RPM的发行版中通用的SRPM了

SRPM 就是 Source RPM ,其后缀名是 ***.src.rpm 格式的,我理解成源码RPM包的意思,SRPM包里含有源代码,该套件的依赖说明与相关资料,参数设置文件,如configure和makefile。

SRPM安装时会进行 (1)将该套件以RPM方式编译
(2)然后将编译完成的RPM安装到linux系统中

RPM包的文件名解释
例子:rp-pppoe-3.1-5.i386.rpm
rp-pppoe 表示该套件的文件名
3.1 表示该套件的版本
5 表示该套件的编译次数,在源码不改变的情况下,修改设置文件重新编译的次数
i386 表示该套件适用的硬件平台

此外,硬件平台还有i586,i686.
硬件平台的解释:

平台
说明
i386
几乎适用于所有的x86平台,不论是旧的Pentum或者新的Pentum-IV与K7系列的cpu等等都可以正常工作,i是指Inter相容的cpu,至于386就是cpu的等级!
i586
包括pentum第一代MMX CPU,AMD的K5,K6系列CPU(socket 7针脚)等等的CPU都算是这个等级。
i686
在PentunII以后的Intel系列CPU,及K7以后等级的CPU都属于686等级。
noarch
没有什么硬件等级限制,一般来说,这种类型的RPM,里面应该没有binary file存在。
i386的可以在任何机器上安装,不论是i586与i686平台,但i686不一定可以用于i386与i568上。如果你的机器是i686平台,那么用回i686的比i386的效能较为好一些

在安装rpm时,会将套件相关资料放在/var/lib/rpm目录下
而其它文件则放在以下路径:

/etc
一些設定檔放置的目錄,例如 /etc/crontab
/usr/bin
一些可執行檔案
/usr/lib
一些程式使用的動態函式庫
/usr/share/doc
一些基本的軟體使用手冊與說明檔
/usr/share/man
一些 man page 檔案

现在我们来看一下具体怎么安装RPM包
例:我们现在有一个rp-pppoe-3.1-5.i386.rpm 安装文件
使用命令rpm安装:rpm –ivh rp-pppoe-3.1-5.i386.rpm
参数:-i : 表示安装
-v : 显示详细安装信息
-h : 以安装信息列显示安装进度
同时安装多个RPM:rpm –ivh a.rpm b.rpm c.rpm
直接从网上安装: rpm –ivh
http://******/a.rpm


另外,如果在安装过程中发现问题,或者知道会发生问题,但还“强制”要安装,可以用下面参数“强制”安装上去,但一般不建议强制安装


--nodeps
使用原因:如果你在安装套件时,总是发现rpm告诉你“有属性相依的套件尚未安装”,而你又想直接强制安装这个套件时,可以加上—nodeps告诉rpm还要检查套件的相依性
危险性:套件会有相依性的是因为会使用彼此的机制或功能,若强制安装,则会造成该套件无法正常使用!

--nomd5
使用原因:不想检查rpm文件所含的MD5信息
说明:不要检查RPM套件的MD5信息,除非你很清楚此套件的来源,否则不建议使用此参数

--noscripts
使用原因:不想让该套件启用或者自行执行某些系统命令
说明:RPM的优点除了可以将文件放置到定位之外,还可以自动执行一些前置作业指令,例如资料库的初始化。如果你不想要让RPM帮你自动执行这一类型的命令,就加上这个吧


--replacefiles
使用原因:如果在安装的过程中出现了“某个文件已经被安装”的信息,又或者出现版本不符的信息(confilcting files)时,可以使用这个参数来直接覆盖文件。
危险性:覆盖的动作是无法复原的,所以,你必须要清楚知道被覆盖的文件重不重要,否则会欲哭无泪!
--replacepkgs
使用原因:重新安装某个已经安装过的套件!
--force
使用原因:这个参数就是—replacefiles与—replacepkgs的综合体
--test
使用原因:想要测试一下该套件是否可以被安装到使用者的linux环境当中,例:rpm –ivh a.rpm --test

RPM的升级与更新

以下2个参数都可以更新套件,但是它们之间是有区别的
-Uvh
用此参数,后面接的套件即使没有安装过,则系统将给予直接安装,若后面接的套件是有安装过旧版,则系统自动更新至新版
-Fvh
如果后面接的套件并未安装过,则该套件不会被安装,只有安到系统的套件,才会被升级
如果你想大量升级系统旧版本的套件时(例如刚安装完系统,想要更新套件至最新),使用-Fvh则是比较好的方法,但是而要注意的是,如果你使用Fvh,而你的主机上无这个套件,那么该套件是不会被安装的,请重新以ivh来安装吧!
升级套件时,我们可以这样:1.从网上下载最新RPM文件
2.使用-Fvh来将系统内曾安装过的套件进行升级
当然,升级时也可以利用—nodeps/--force等等参数


RPM的查询
RPM在查询分2种,一种是对已经安装的套件查询,另一种是对未安装的rpm包查询。查询已安装的套件其实就是到/var/lib/rpm这个目录下查询数据库文件。而未安装的,是对rpm包里的数据库查询。
具体查询方法:
rpm –qa
rpm –qf 系统上的某个文件的完整路径
rpm –q[licdR] 已经安装的套件名
rpm –qp[licdR] 未安装的RPM包名
参数解释
以下用于查询已安装的套件
-q : 查询后接的套件是否有安装,如rpm –q samba
-qa : 显示所有已安装的rpm套件
-qf : 查询后接文件属于哪个已安装的套件
-qi : 显示套件的详细信息
-ql : 显示该套件所有文件与目录的完整路径
-qc : 显示该套件的所有设置文件(找出在/etc/的文件而已)
-qd : 列出该套件的所有说明文件(找出与man有关的文件而已)
-qR:列出该套件相依套件所含的文件
以下属于查询未安装的套件:
-qp[icdlR]:注意,-qp 后面接的所有参数跟上面说明是一样的。但用途仅是找出某个RPM包内的信息,而非已安装的套件信息。
实例:rpm -q samba
rpm –qa samba
rpm –qi samba
rpm –ql samba
rpm –qc samba
rpm –qd samba
rpm –qR samba
rpm -qa | grep ^c | wc –l
首先是用rpm -qa查询所有的套件,然后用grep ^c截取并显示以C开头的文件,再用wc –l统计截取所得的行数,最后的显示结果为行数,也就可以知道以c开头有几个套件了

常见的查询就是以上这些,但要注意查询时不要找上版本号,只要套件名称就可以了,因为查询时会到/var/lib/rpm目录的数据库查询,所以不必加上版本号,但是查询某个RPM包就不同了,必需要列出整个文件的完整文件名才行。


RPM验证与公共密匙
验证功能主要在于提供系统管理员一个有用的管理机制,原理是使用/var/lib/rpm底下的数据库来对比目前linux系统环境下的所有套件文件,也就是说,当你的资料不小心遗失,东正教是因为你误删了某个套件的文件,或者不小心修改了某个套件的文件内容,那就用这个简单的方法来验证五原本的文件系统吧,好让你了解到底修改了哪些文件资料,验证的方法很简单:
rpm -Va
rpm -V 已安装的套件名
rpm -Vp 某个RPM包文件名
rpm -Vf 在系统上面的某个文件名
参数:
-V : 后面加的是套件名称,若该套件所含的文件被改变过,才会列出来
-Va : 列出目录系统上所有可能被改变过的文件
-Vp : 后面加的是RPM包名,列出该套件内可能被改变过的文件
-Vf : 列出系统上某个文件是否被改变过

例子:
rpm –V logrotate
列出已经安装的logrotate套件是否被改变过,如果没有显示任何信息,表示该套件没有被变更过,只有变更过才会显示内容
Rpm -Vf /etc/crontab
显示该文件是否被变更过

在使用“rpm –V 某套件名” 来查询时,显示的内容则可能会出现以下各个字母,每个大写字母的意义如下:
S :文件容量大小被改变
M :文件的类型或文件的属性被改变,如是否可执行等参数已被改变
5 :MD5加密属性已被改变
D :装置名称已被改变
L :link属性已被改变
U :文件的所属人已被改变
G :文件的所属群组已被改变
T :文件的建立时间已被改变
小写字母意义如下:
c : 设置文件(config file)
d : 文件资料档 (documentation)
g : 鬼文件,通常是该文件不被某个套件所包含,较少发生(ghost file)
l : 授权文件(license file)
r : 读我文件(read me)
如果当一个文件所有的属性都被变更的话,就会显示所有的数字与字母.
在经过验证后,你就可以知道哪个文件被变更过,如果该文件变更是预料中的,那么就没什么大的问题,如果是非预料的,那么要检查下是否被入侵了。

*****密匙部分省略,因为看完还不太懂,因此以后再研究


RPM的卸载与重建数据库
rpm –e samba 卸载samba
rpm --rebuilddb 重建数据库
卸载套件一定要上层往下层卸载,如rp-pppoe这个套件,是依据ppp这个套件来安装的,所以当你卸载ppp的时候,就必须先卸载rp-pppoe才行,否则就会发生结构上的问题了。
那么重建数据库又是怎么回事呢?由于我们会一直在修改一些文件内容,例如/etc/xinetd.d里面的参数文件,加上可能自系统操作过程中增加,移除等的动作,导致系统的数据库有点乱,这个时候可以使用—rebuilddb来重建rpm的数据库!








最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 01:28 , Processed in 0.091759 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部