RPM与SRPM

来源:互联网 发布:简述sem和seo的区别 编辑:程序博客网 时间:2024/06/02 05:32
一. RPM
RPM 全名是『 RedHat Package Manager 』简称则为 RPM !
xxxxxxxxx.rpm  <==RPM 的格式,已经经过编译且包装完成的 rpm 文件; xxxxx.src.rpm  <==SRPM的格式,包含未编译的原始码信息。

那么我们怎么知道这个套件的版本、适用的平台、打包的次数呢?呵呵!只要透过档名就可以知道了!例如 rp-pppoe-3.1-5.i386.rpm 这的档案的意义为:

rp-pppoe -  3.1    -   5  .   i386    .rpm  套件名称   套件的版本信息   释出的次数   适合的硬件平台  附文件名 

 套件名称:
当然就是每一个套件的名称了!上面的范例就是 rp-pppoe 。

版本信息:
每一次更新版本就需要有一个版本的信息,否则如何知道这一版是新是旧?这里通常又分为主版本跟次版本,以上面为例,主版本为 3 ,在主版本的架构下更动部分原始码内容,而释出一个新的版本,就是次版本啦!以上面为例,就是 1 啰!

释出版本次数:
也就是编译的次数啦!那么为何需要重复的编译呢?这是由于同一版的套件中,可能由于有某些 bug 或者是安全上的顾虑,所以必须要重新设定当初打包时候的设定参数,设定完成之后重新编译并打包成 RPM 档案!因此就有不同的打包数出现了!

操作硬件平台:
由于 RPM 可以适用在不同的操作平台上,但是由于不同的平台设定的参数还是有所差异性!并且,我们可以针对比较高阶的 CPU 来进行最佳化参数的设定,所以就有所谓的 i386, i586, i686 与 noarch 等的文件名称出现了! 

1. RPM 安装( install )

[root@test root]# rpm -ivh rp-pppoe-3.1-5.i386.rpm Preparing...     ####################################### [100%]    1:rp-pppoe    ####################################### [100%] # -i :install 的意思 # -v :察看更细部的安装信息画面 # -h :以安装信息列显示安装进度,例如上面的 # 字符号! # 如果要安装两个以上的套件时,可以这样: [root@test root]# rpm -ivh a.i386.rpm b.i386.rpm *.rpm # 后面可以接多个套件! 

2. RPM 升级与更新
使用 RPM 来升级真是太简单!就以 -Uvh 或 -Fvh 来升级即可( 注:vh 的功能仍是在于显示细部信息与安装进度而已 )!  

-Uvh 后面接的套件即使没有安装过,则系统将予以直接安装;     若后面接的套件有安装过旧版,则系统自动更新至新版;-Fvh 如果后面接的套件并未安装到您的 Linux 系统上,则该套件不会被安装;     亦即只有安装至您 Linux 系统内的套件会被『升级』

3. RPM 查询
RPM 在查询的时候,其实查询的地方是在 /var/lib/rpm 这个目录下的数据库文件啦!另外, RPM 也可以查询文件内的信息喔!那如何去查询呢?我们底下以简单的范例来说明:

-q  套件 单纯的查询该套件的版本与是否存在而已,例如: rpm -q logrotate-ql 套件 列出该套件的所有相关目录与文件!例如: rpm -ql logrotate-qi 套件 列出该套件的 information (信息),里面的信息可多,包括了套件名称、版本、等等!-qf 文件 这个参数后面接的可是『文件』!这个功能在查询系统的某个文件属于哪一个套件所有的。举例来说,如果想要知道 /etc/logrotate.conf 是那个套件所提供的,可以这样:rpm -qf /etc/logrotate.conf-qc 套件 查询该套件的设定文件放置的完整目录名称,例如: rpm -qc logrotate-qd 套件 查询该套件的文件说明数据文件放置的完整路径名称,例如: rpm -qd logrotate-qR 套件 列出该套件需要预先安装的文件,亦即有属性相依套件的文件!例如: rpm -qR logrotate-qa 后面什么都不必加入,直接输入 rpm -qa 即可得知目前 Linux 系统上面共以 RPM 的方式安装了多少的套件!-qp[licdR] 文件 上面提到的都与系统的 /var/lib/rpm 内的数据库有关,而这里提到的则是与 RPM 档案本身有关。举例来说,如果我下载了一个档名为 pkgname.i386.rpm 的文件,我想要知道他里面主要的讯息,则:rpm -qpi pkgname.i386.rpm 想要知道与他有关的套件,则: rpm -qpR pkgname.i386.rpm

4. RPM 卸载与重建数据库
要注意的是,『卸载的过程一定要由最上层往下』,以 rp-pppoe 为例,这一个套件主要是依据 ppp 这个套件来安装的,所以当您要删除 ppp 的时候,就必须要先删除 rp-pppoe 才行!否则就会发生结构上的问题啦!

那么重建数据库呢?由于我们会一直在修改一些文件内容,例如 /etc/xinetd.d 里头的参数文件,加上可能自系统操作的过程中新增、移除等等的动作,导致系统的数据库有点乱,这个时候可以使用 --rebuilddb 来重建一下 rpm 的数据库!这两个方法的参数如下啰:

[root@test root]# rpm -e logrotate  <==解安装 logrotate 套件 [root@test root]# rpm --rebuilddb   <==重建数据库

二. SRPM
是 Source RPM 的意思,也就是这个 RPM 文件里面含有原始码( Source Code )!
1. 利用系统默认值安装 SRPM 文件
假设我下载了一个 SRPM 的文件,又不想要修订这个文件内的原始码与相关的设定值,那么我可以直接编译并安装吗?当然可以!利用rpmbuild 配合参数即可。参数主要有底下两个:

--rebuild 这个参数会将后面的 SRPM 进行『编译』与『打包』的动作,最后会产生 RPM 的文件,但是产生的 RPM 文件并没有安装到系统上。当您使用 --rebuild 的时候,最后通常会发现一行字体:Wrote: /usr/src/RPM/RPMS/i386/pkgname.i386.rpm这个就是编译完成的 RPM 文件!那么这个文件就可以用来安装啦!安装的时候请加绝对路径来安装即可!--recompile 这个动作会直接的『编译』『打包』并且『安装』!请注意,recompile 不但进行编译跟打包,还同时进行『安装』了! 
2. SRPM 使用的路径与需要的套件
SRPM 既然含有 source code ,那么其中必定有设置文件啰,所以首先我们必需要知道,这个 SRPM 在进行编译的时候,会使用到哪些目录呢?这样一来才能够来修改嘛!你可以到你的 /usr/src 这个目录里面去查看一下:
/usr/src/redhat/SPEC 这个目录当中放置的是该套件的设置文件,例如这个套件的信息参数、设定项目等等都放置在这里;/usr/src/redhat/SOURCE 这个目录当中放置的是该套件的原始档(*.tar.gz的文件)以及 config 这个设定档;/usr/src/redhat/BUILD 在编译的过程中,有些暂存的数据都会放置在这个目录当中;/usr/src/redhat/RPMS 经过编译之后,并且顺利的编译成功之后,将打包完成的文件放置在这个目录当中。
此外,在编译的过程当中,可能会发生不明的错误,或者是设定的错误,这个时候就会在 /tmp 底下产生一个相对应的错误文件,您可以根据该错误文件进行除错的工作呢!等到所有的问题都解决之后,也编译成功了,那么刚刚解压缩之后的文件,就是在 /usr/src/redhat/SPEC, SOURCE, BUILD 等等的文件都会被杀掉,而只剩下放置在 /usr/src/redhat/RPMS 底下的文件了!
3. SRPM 的编译指令
修改完成了,自然就是要将他编译成可以安装的RPM文件啦!这个时候我们就可以直接在/usr/src/redhat/SPECS底下下达:
[root@test SPECS]# rpmbuild -bb rp-pppoe.spec  <==编译成RPM  文件[root@test SPECS]# rpmbuild -ba rp-pppoe.spec  <==打包成SRPM 文件 

原创粉丝点击