首页 > 代码库 > 包管理器--RPM
包管理器--RPM
由来和简介
在linux的初期,那时候还没有包管理器的概念,每个linux用户都是自己手动编译源码包,进行安装,但是编译是个比较复杂的工作,不是每一个使用linux的人,都有这样的能力去编译和安装程序包。
对于程序包而言,它本身也有组成部分(二进制程序、库文件、配置文件、帮助文件等),它们都分别位于不同的目录,如果是用户自己手动安装,必然卸载的时候,要自己去追踪这些文件。当然,如果想对一个软件进行升级,那更是痛苦不堪的事情。于是,聪明的人类想开发一种软件,它来代替我们去追踪这些包的信息,可以手动安装这些程序,去卸载这些程序,可以升级程序等等,这就是所谓的包管理器。
包管理器一般来说分为两大分支:一是由Debian开发的dpkg(debian package,也有叫dpt:Debian package tool),它打包出来的程序是.deb的后缀;二是由Red Hat开发的rpm(redhat package manager),后来它成为了工业的标准,所以就其名字的含义就变成RPM is Package Manager,它打包出来的程序是.rpm的后缀的。
由于在生产环境中,rpm这一分支用的比较多,所以下面都以介绍rpm为主。
功能
作为包管理器,rpm应该具备怎样的功能呢?首先它必须要有数据库来保存程序包的各种信息:程序名及版本、依赖关系:X --> Y,Z 、功能性说明、安装生成的各文件路径及校验码等等。所以它应该要具备如下的功能:
1、打包:能够将程序打包成可安装的程序包
2、安装:能够将程序各个组成部分自动安装到相应的目录下面
3、卸载:可以将一个程序包的位于不同目录下的文件删除
4、升级:可以对程序包分析,追踪,进行程序的升级安装
5、校验:对程序的来源和完整性进行检测
6、数据库管理:追踪到各个程序包的信息要有个管理策略
从上面的功能来看,包管理器RPM已经为我自动化完成了很多功能,但是它里面还有一个重大的问题没有解决,那就是程序包之间的依赖关系。比如安装x的时候,它依赖于Y,那么不必须先安装Y,再安装X,对于这种依赖关系的问题,RPM可以说无能为力,但是依赖关系又是我们安装程序包的时候,经常要面临的问题。于是在RPM的基础上,开发出了YUM工具,它只是RPM的一个前端工具,专门用来处理包依赖关系。
在这里,提出来一个问题。很多人都会误会的一个问题,安装了YUM,是不是就不需要RPM?
答:完全不正确,YUM仅仅只是RPM的前端工具,它是用来解决依赖关系的,而对于包的管理还是RPM,YUM工具并不是用来代替RPM的,而是用来弥补RPM不足之处的。
规则
一、RPM包的命名规则
想要了解RPM包的命名规则,首先要了解源码包的命名规则。
源码包:name-version.tar.{gz,bz2,xz},其中version包含major(主版本号).minor(副版本号).release(发行号),name是指程序的名字,以tar工具进行打包,可能用gzip或者bzip2或者xzip进行压缩。
rpm包的命名格式:name-version-relase.arch.rpm
version: major.minor.release,同源代码
release:
rpm自身的发行号,与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订;同时,release还包含此包适用的OS
arch:
适用于的硬件平台,例如x86_64
rpm包举例:bash-4.2.3-3.centos5.x86_64.rpm
二、RPM分包规则
对于功能比较多的程序,可能还会有分包的概念.比如一个程序有20个功能:常用功能有8个,特殊A:3个,特殊B:6个,二次开发相关功能:3,它会把常用功能打包成主包,把特殊功能和开发相关分别打包成不同的子包.子包的命名必须以主包的名字开头,再跟子包的名字.
核心包,主包:命名与源程序一致:
bash-4.2.3-3.centos7.x86_64.rpm
子包:
bash-a-4.2.3-3.centos7.x86_64.rpm
bash-b-4.2.3-3.centos7.x86_64.rpm
bash-devel-4.2.3-3.centos7.x86_64.rpm
可靠的RPM源
1、发行的光盘或站点服务器
安装光盘的DVD1和DVD2上都有YUM包
国内镜像:
http://mirrors.163.com
http://mirrors.sohu.com
2、项目的官网
源代码
rpm包
3、很多第三方机构或个人制作并公开发布许多rpm包
http://rpmfind.net
http://rpm.pbone.net
RPM命令详解
一、RPM包的安装
rpm [option] /path/to/package_file Option: -i: 安装(install) -v: 显示详细信息(verbose) -vv: 显示更加详细的信息(verbose) -h: 显示进度条 --test: 仅作测试,并不是真正执行安装 --nodeps:忽略依赖关系,强行安装 --replacepkgs:重新安装(如果遇到配置文件被修改过,配置文件会被保留)
所以安装的常用选项组合是:rpm -ivh
二、RPM包的卸载
rpm [option] package_name(注意,这里跟上的包名) -e: 删除(erase) --nodeps:忽略依赖关系,强行卸载 如果配置文件安装后被修改,则不会被删除,而会被保留 warning: /etc/zprofile saved as /etc/zprofile.rpmsave
三、RPM包的升级
rpm [option] /path/to/package_file -U:如果程序包没有安装,则进行安装;如果已安装,则进行升级 -F:只会对已经安装的包进行升级 -v:显示详细信息 -h:显示进度条 --force: 强制升级 常用组合是:rpm -Uvh 或者 rpm -Fvh 注意:不应该对内核执行升级操作,而是安装
四、RPM包的查询
1、查询某包是否安装 rpm -q package_name... 2、查询所有已经安装的包 rpm -qa 按条件过滤:rpm -qa | grep ‘PATTERN‘ 3、查询包的描述信息 rpm -qi package_name 查询信息中英对照 Name:包名 Relocations:安装时是否可以自行指定安装位置 Version:版本号 Vender:提供商 Realease:修正号 Build Date:包的制作日期 Install Date:包的安装日期 Build Host:包制作时使用的主机 Group:包所属的包组 Source RPM:源码格式的RPM包 Size:包的大小 License:包的许可证 Signature:签名信息 Packager:打包人,制作者 URL:一般都是源码包的地址 Summary:简要信息 Description:详细信息 4、查询某包安装生成了哪些文件 rpm -ql package_name (1) 查询某包安装生成了哪些配置文件 rpm -qc package_name (2) 查询某包安装生成了哪些帮助文件 rpm -qd package_name (3) 查询程序包的相关脚本 rpm -q --scripts package_name 脚本有四类: preinstall:安装前脚本 postinstall: 安装后脚本 preuninstall: 卸载前脚本 postuninstall: 卸载后脚本 5、查询某文件是由哪个包安装生成的 rpm -qf /path/to/some_file 6、对尚未安装的包执行查询 rpm [option] /path/to/package_file -p 是package的意思 -qpi:查询包信息 -qpl:查询某包安装会生成哪些文件 -qpc:查询某包安装会生成哪些配置文件 -qpd:查询某包安装会生成哪些帮助文件
五、rpm包来源合法性及完整性检验
前提:在当前系统上导入包的制作者的公钥
# rpm --import /path/to/key_file
显示所有已经导入的gpg格式的公钥
# rpm -qa gpg-pubkey*
显示密钥的详细信息
# rpm -qi gpg-pubkey-NAME
检查包:安装过程中会自动执行
手动检查:
# rpm -K /path/to/package_file
# rpm --checksig /path/to/package_file
不检查包完整性:
# rpm -K --nodigest
不检查来源合法性:
# rpm -K --nosignature
六、数据库重建:
数据库存放目录:/var/lib/rpm
# rpm --initdb:初始化
如果事先没有库,会新建一个;如果有,则不新建;
# rpm --rebuilddb: 重建
直接重建,覆盖原有的数据库
本文出自 “LC的IT之路” 博客,转载请与作者联系!