概述
RPM 是 Red Hat PackageManager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理;在Fedora 、Redhat、Mandriva、SuSE、YellowDog等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用;
RPM包里面都包含什么?里面包含可执行的二进制程序,这个程序和Windows的软件包中的.exe文件类似是可执行的;RPM包中还包括程序运行时所需要的文件,这也和Windows的软件包类似,Windows的程序的运行,除了.exe文件以外,也有其它的文件;
一个RPM 包中的应用程序,有时除了自身所带的附加文件保证其正常以外,还需要其它特定版本文件,这就是软件包的依赖关系;依赖关系并不是Linux特有的,Windows操作系统中也是同样存在的;比如我们在Windows系统中运行3D游戏,在安装的时候,他可能会提示,要安装Direct 9 ;Linux和Windows原理是差不多的。
一 命名格式
源代码:name-VERSION.tar.gz
VERSION: major.minor.release
例子:
nginx-1.8.0.tar.gz
1:是主版本号
8:是次版本号
0:是发行号
rpm包命名方式:
name-VERSION-release.arch.rpm
VERSION:major.minor.release
release.arch:rpm包的发行号
archetecture(架构或平台):i386,x64(amd64), ppc, noarch
例子:
bash-4.1.2-33.el6.x86_64
4:是主版本号
1:是次版本号
2:修订
33:是第几次发布版本
el6:适用于RHEL6或兼容Centos6
x86_64:CPU架构系统平台
el6 :enterprice linux 6 RHEL 6或centos 6
el5: rhel5
拆包:主包和支包
主包:name-VERSION-release.arch.rpm
支包:name-function-VERSION-release.arch.rpm
function:devel(开发), utils(工具程序), libs(库文件), …
包之间存在依赖关系
比如说x包依赖Y包 但是Y包又依赖z包
前端工具:自动解决依赖关系;
yum:rpm包管理器的前端工具;
apt-get (apt-cache):deb包管理器的前端工具;
zypper:suse的rpm管理器前端工具;
dnf:Fedora 22+系统上rpm包管理器的前端工具;
二 程序包管理器的组成:
程序包管理:
功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作;
1、程序的组成组成清单 (每个包独有)
文件清单
安装或卸载时运行的脚本
2、数据库(公共)
程序包名称及版本
依赖关系;
功能说明;
安装生成的各文件的文件路径及校验码信息;
rpm包的数据库文件:/var/lib/rpm/
三 获取程序包的途径:
1 系统发版的光盘或官方的服务器;
CentOS镜像:
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
2 项目官方站点 例如:http://www.zabbix.com/
3 第三方组织:
Fedora-EPEL
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
4 自己制作rpm包
建议:安装前请务必注意以下几点:
1、检查其合法性;
2、来源合法性;
3、程序包的完整性;
什么是EPEL?
如果既想获得 RHEL 的高质量、高性能、高可靠性,又需要方便易用(关键是免费)的软件包更新功能,那么 Fedora Project 推出的 EPEL(Extra Packages for Enterprise Linux)正好适合你。EPEL(http://fedoraproject.org/wiki/EPEL)是由 Fedora 社区打造,为 RHEL 及衍生发行版如CentOS、Scientific Linux 等提供高质量软件包的项目。
四 CentOS系统上rpm命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护
rpm命令:
rpm [OPTIONS] [PACKAGE_FILE]
安装:-i, –install
升级:-U, –update, -F, –freshen
卸载:-e, –erase
查询:-q, –query
校验:-V, –verify
数据库维护:–builddb, –initdb
提示:
-Fvh是升级RPM包的命令,它表示如果后面的软件包没有安装在系统上,则这个软件包不会安装。也就是说只有安装到系统上的软件包才会被升级。
安装:
rpm {-i|–install} [install-options]PACKAGE_FILE …
-v: verbose
-vv: 更详细的输入
-h: 以#显示程序包管理执行进度;每个#表示2%的进度
rpm -ivh PACKAGE_FILE …
[install-options]
–test: 测试安装,但不真正执行安装过程;dry run模式;
–nodeps:忽略依赖关系;
–replacepkgs: 重新安装;
–nosignature: 不检查来源合法性;
–nodigest:不检查包完整性;
–noscipts:不执行程序包脚本片断;
%pre: 安装前脚本; –nopre
%post: 安装后脚本; –nopost
%preun: 卸载前脚本; –nopreun
%postun: 卸载后脚本; –nopostun
示例1:
rpm -ivh php-bcmath-5.3.3-22.el6.x86_64.rpm
这个有报错一个是KEY 那个没有关系,下面这个报错是依赖关系问题
rpm -ivh –nodeps php-bcmath-5.3.3-22.el6.x86_64.rpm (–nodeps:忽略依赖关系 就可以安装上了,但是不建议使用)
升级与降级:
rpm {-U|–upgrade} [install-options]PACKAGE_FILE …
rpm {-F|–freshen} [install-options]PACKAGE_FILE …
-U:升级或安装,如果事先安装了老版本包则升级,没有安装老版本包则安装此包
-F:升级,如果事先没有安装老版本的包则不升级
–oldpackage:降级;
–force:强制升级;
注意:
1.不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版本内核;
2.如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
查询:
rpm {-q|–query} [select-options][query-options]
[select-options]
-a, –all:查询所有已经安装过的包;
-f FILE:查询指定的文件由哪个程序包安装生成;
-p, –package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;
–whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供;查询提供了 CAPABILITY 功能的软件包。
–whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;查询所有需要 CAPABILITY 功能才能运行的软件包。
[query-options]
–changelog:查询rpm包的历史变更信息changlog;
-l, –list:程序安装生成的所有文件列表;
-i, –info:程序包相关的信息,版本号、大小、所属的包组,等;
-c, –configfiles:查询指定的程序包提供的配置文件;
-d, –docfiles:查询指定的程序包提供的说明文档;
–provides:列出指定的程序包提供的所有的CAPABILITY;
-R, –requires:查询指定的程序包的依赖关系;
–scripts:查看程序包自带的脚本片断;
示例2:查看所有已经安装的软件包
示例3:查询某个软件是否已经安装
示例4:查询某一文件属于哪个软件包
示例5:查询一个已经安装的软件包包含哪些文件
示例6:查询一个已经安装的软件包的详细信息
示例7:查看某一个已经安装的软件包的配置文件有哪些
示例8:查看一个已经安装的包自带的说明说明文档
示例9:查询一个已经安装的软件包依赖于什么软件包
示例10:查询一个软件包中的脚本片段
卸载:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts]
[–notriggers] [–test] PACKAGE_NAME …
校验:
rpm {-V|–verify} [select-options][verify-options]
-V:后面接软件名称,若该软件所含的文件被改动过才会列出来
-Va:列出目前系统上面所有可能被改动过的文件
-Vp:后面加的是文件名称,列出该软件内可能被改动过的文件
-Vf:列出某个文件是否被改动过
S file Size differs:文件的容量大小是否被改变
M Mode differs (includespermissions and file type):文件的类型或文件的属性(rwx)是否被改变
5 digest (formerly MD5 sum)differs:MD5这一种指纹码的内容已经不同
D Device major/minor numbermismatch:设备的主/次代码已经改变
L readLink(2) path mismatch:Link路径已被改变
U User ownership differs:文件的所有者已被改变
G Group ownership differs:文件的所有属用户组已被改变
T mTime differs:文件的创建时间已被改变
P capabilities differ:capabilities已经改变
提示:当一个软件包的文件被被动过,那么它的显示就会是:
SM5DLUGTP c filename
c表示文件的类型
c:config file:设置文件
d:documentation:文档文件
g:ghost file:“鬼”文件,通常是该文件不被某个软件所包含,较少发生
l:linense file:授权文件
r:read line:自述文件
示例11:查看某个已经安装的软件包中的哪些文件被改动过,没有显示就代表没有被改动。
示例12:列出系统上所有的rpm包中的文件中被改动的文件有哪些(针对所有rpm包中的所有文件查询)
示例13:查看某个文件是否被改动过,没有改动就不显示(这个文件一定要属于某个rpm包才行)
包来源合法性验正及完整性验正:
1.完整性验正
2.来源合法性验正
获取并导入信任的包制作者的密钥:
导入所需要公钥:
对于CentOS发行版来说:rpm–import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
验正:
1.安装此组织签名的程序时,会自动执行验正;
2.手动验正:rpm -K PACKAGE_FILE
例子14:手动验证 php-bcmath-5.3.3-22.el6.x86_64.rpm
rpm包数据库重建:
rpm管理器数据库路径:/var/lib/rpm/
查询操作就是通过此处的数据库进行;
rpm {–initdb|–rebuilddb} [–dbpathDIRECTORY] [–root DIRECTORY]
–initdb:如果事先不存在数据库,则新建之;否则,不执行任何操作;
–rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;
–dbpath:指明要创建数据库的目录
例子14:如果rpm数据库系统损坏可以使用此命令重建
原创文章,作者:liangkai,如若转载,请注明出处:http://www.178linux.com/11369
评论列表(1条)
已置顶