一、简介
1、什么是RPM
RPM的全名是RedHat Package Manager,当初为RedHat公司开发出来用于其自己研发的Linux系统中,遵循GPL准则,目前以被广大Linux发行版所应用。
RPM的最大特点是,其会将你需要的软件提前编译安装打包成一个RPM包,系统通过该RPM包里面的数据记录来获取需要安装的软件的依赖关系。这意味着,当使用RPM安装的时候,RPM会根据安装包里面的依赖关系查询系统中是否满足相应的条件,如果满足则安装,否则会报错。安装了之后,RPM会把该软件的信息写入到RPM的数据库中,以方便将来的查询、验证、升级和卸载等操作。
2、其他程序包管理器
由于Linux系统发行版数不胜数,想要让这些发行版统一使用同一个程序包管理器的话是不太现实的。目前主流的程序包管理器除了RPM以外,比较常见的还有Debian系的DPKG。
DPKG最早是由Debian Linux社区所研发出来的,通过DPKG,Debian所提供的软件便能简单的安装到系统中,同时还能提供安装后的软件信息。大多数从Debian衍生出来的Linux 发行版,如Ubuntu等都是使用了DPKG作为程序包管理。
发行版 | 程序包管理器 | 命令 | 前端工具 |
---|---|---|---|
RedHat/Fedora、Centos、RHEL | RPM | rpm,rpmbuild | yum |
Debian/Ubuntu | DPKG | dpkg | APT |
3、RPM包命名方式
RPM包的命名方式一般分为两种:
name-VERSION.release.arch.rpm
name-VERSION.release.arch.src.rpm
1)name:表示软件包的名称,如httpd;
2)VERSION:表示软件包的版本号,通常格式为“major.minor.release”,release是发布的版本号,通常表示这个RPM包编译了几次;
3)release:表示该RPM使用的Linux发行版本,如el5,代表RHEL5。
4)arch:代表适用的硬件平台,目前RPM包支持的平台有:i386、i586、i686等,另外noarch表示无硬件平台限制。
5).rpm或.src.rpm:为RPM包的后缀,.rpm包是编译好的二进制安装包,可直接使用rpm命令进行安装;而.src.rpm则表示代码包,需要对其进行编译生成.rpm包进行安装。
其他特殊名称包括:
devel:软件的开发包;
二、RPM的编译安装
Linux系统上的软件除了直接使用RPM命令安装之外,还可以使用编译安装的方式进行安装。
在进行软件的编译安装前,我们需做以下几点准备:
1)下载软件对应的源码包,通过源码包呈现为以.src.rpm为后缀或tar.xz等打包格式而存在。
2)提供相关的安装工具及开发环境。
源代码的编译步骤:
1)使用.configure检查编译环境;
2)使用make对源代码进行编译;
3)make instal 将生成的可执行文件安装到当前计算机中。
三、RPM命令
1、rpm命令基本功能
rpm [options] [PACKAGE_FILE]
RPM命令的使用按照功能俩说可以分为:安装、查询、校验、卸载、升级等,其对应的功能选项为:
安装:-i,--install
升级:-U,--update,-F,--freshen
卸载:-e,--erase
查询:-q,--query
校验:-V,--verify
数据库维护:--builddb,--initdb
2、rpm命令的功能选项
1)安装
命令:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
[install-options]:
-v:显示安装的详细过程;
-h:打印50个hash masks作为程序包安装的进度条;
--test:不安装,只是检查与报告该软件潜在的依赖冲突;
--nodeps:忽略依赖关系安装;
--replacepkgs:重新安装,通常用于在程序出错后重新安装程序;
--nosignature:不检查包签名信息,即不检查来源的合法性;
--nodigest:不检查包的完整性;
2)升级
命令:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
install-options:
--oldpackage:降级安装;
注意:
- 安装和升级功能的选项可通用;
- 尽可能不要对Linux内核进行升级操作,以免升级后系统无法正常运行。Linux系统支持多内核版本并存,因此可以直接安装新版本的内核;
- 如果某个原程序包的配置文件在安装后被修改了,那么升级后,新版本程序提供同一个配置文件会被重新命名为FILENAME.rpmnew,而不会覆盖原有文件;
3)卸载
命令:
rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
erase options:
--nodeps:忽略依赖关系卸载;
--allmatches:卸载所有匹配指定名称的程序包;
--test:测试卸载,不是真实的卸载;
4)查询
命令:
rpm {-q|--query} [select-options] [query-options]
select-options:
PACKAGE_NAME:查询指定的程序包是否已经安装机对应的版本信息;
-a,--all:查询所有已经安装的RPM包;
-f FILE:查询指定的文件由哪个程序包安装生成;
-p,--package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;
--whatprovides CAPABILITY:查询指定的功能由哪些程序包提供;
--whatrequires CAPABILITY:查询需要安装指定功能才能正常运行的程序包;
query-options:
--changelog:查询rpm包的修改日志;
-l,--list:查询程序安装所产生的所有文件列表;
-i,--info:查询程序包相关的信息,如版本号,大小,所属包组等;
-c,--configfiles:查询知道你个的程序提供的配置文件;
-d,--docfiles:查询指定的程序包所提供的帮助文件;
--provides:列出指定的程序包所提供的所有功能;
-R,--requires:查询指定的程序包的依赖关系;
--scripts:查询程序包自带的脚本信息;
5)校验
命令:
rpm {-V|--verify} [select-options] [verify-options]
rpm包的检验后的输出类似如下:
SM5DLUGT c /etc/profile.d/vim.sh
前面的字符分别代表:
S:file Size differs,对应文件大小不一致;
M:Mode differs (includes permissions and file type),对应的文件类型及权限不一致;
5:digest (formerly MD5 sum) differs,文件对应的MD5值不一致;
D:Device major/minor number mismatch,文件的major/minor值不匹配;
L:readLink(2) path mismatch,文件的符号链接内容
U:User ownership differs,表示文件的属主不一致。
G:Group ownership differs,表示文件的属组不一致。
T:mTime differs,表示文件的修改时间不一致;
c:只有在文件是配置文件的时候才会出现该标识;
6)rpm数据库的重建
rpm程序包管理器的数据库路径为/var/lib/rpm,rpm命令的查询动作是通过查询此处的数据库来进行显示。当此数据库出现问题的时候,rpm的查询将无法正常进行。
通过命令 rpm 可以初始化或重建该数据库:
rpm {--initdb|--rebuilddb}
--initdb:初始化数据库,当rpm不存在任何数据库时,可初始化创建一个新的数据库;当存在一个数据库时,不执行任何操作;
--rebuilddb:重新构建,通过读取当前系统上的所有已安装过的程序包进行数据库的重建;
3、rpm包的验证
RPM程序包的验证有两种,一种是包来源的合法性验证,另一种是包的完整性验证。这两种验证分别依赖于制作者的数字签名和程序特征码完成。
数字签名是包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特性码,附加原始数据后面。
验证过程:
前提:必须有可靠机制获取到包制作者的公钥;
1、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法。
2、对文件进行相应的完整性校验工具MD5|SHA-1 等得到特征码对比制作者提供的加密特征码,一致则认为包完整。
对于centos发行版来说,通过下面命令可以获取并导入信任的包制作者的密钥:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
四、RPM命令的使用方式
安装RPM包:
[root@localhost tmp]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:zsh-5.0.2-28.el7 ################################# [100%]
升级RPM包:
[root@localhost tmp]# rpm -Uvh zsh-5.0.2-28.el7.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:zsh-5.0.2-28.el7 ################################# [100%]
卸载RPM包:
rpm -e vim-enhanced-7.4.160-2.el7.x86_64
查询RPM包:
[root@localhost tmp]# rpm -q zsh
zsh-5.0.2-28.el7.x86_64
查询程序包安装完后生成的所有配置文件:
[root@localhost tmp]# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc