Linux程序包管理之RPM
RPM概念
rpm是什么
RPM 是Ret Hat Package Manager(RPM软件包管理器)的缩写,遵循GPL协议,可以运行在各种Linux上,公认的行业标准。
rpm干什么
对于终端用户来说
简化了Linux系统的安装、卸装、更新和升级的过程,用命令完成
对于开发者来说
RPM允许把软件编码包装成源代码和程序包提供给用户,过程简单,减轻了发行软件新版本所带来的负担。
管理用途
可以安装、删除、升级、刷新和管理RPM软件包
通过RPM软件管理包能知道软件包包含哪些文件,以及系统中的某个文件属于哪个包
可以查询系统中的RPM软件包是否安装并查询其安装的版本
开发者可以把自己的程序打包为RPM包并发布
软件包签名GPG和MD5的导入、验证和签名发布
依赖性的检查,查看是否有RPM软件包由于不兼容而扰乱系统
rpm包命名格式
程序包的构建过程
源代码-->目标二进制格式-->把(二进制程序,库文件,配置文件,帮助文件)组织成为一个或几个包文件
程序包管理类型
deblan: dpt(命令dpkg) 程序包以“.deb”为后缀
redhat: redhat package manager:rpm(命令rpm) 程序包以“.rpm””为后缀
Su.S.E: rpm包,(命令rpm) 与redhat的rpm包的路径格式不兼容
Gentoo:ports
ArchLinux: 轻量级Linux
程序包依赖关系
包之间:可能存在依赖关系,甚至循环依赖
x,y,z
x–>y,z
y–>a,b,c
c–>D
安装某个主包,必须安装主包依赖的副包
解决依赖关系,使用rpm前端工具
程序包前段工具
yum:rhel系列上 rpm包管理器的前端工具
agt-get(apt-cache):deb包管理器的前端工具
zypper:suse的rpm管理器前段工具
dnf: Fedora 22+系统上rpm包管理器的前端工具
获取程序包途径
(1)系统发行版的光盘或官方的文件服务器(或镜像站点)
http://mirrors.aliyun.com/
http://mirrors.sohu.com
http://mirrors.163.com
(2)项目的官方站点
http://www.zabbix.com
(3)第三方组织 社区组织维护
Fedora-EPEL:
Rpmforge:RHEL推荐,包很全
(4)搜索引擎:不安全
http://pkgs.org
http://rpmfind.net/
http://rpm.pbone.net/
http://sourceforge.net/
(5)自已动手,丰衣足食
建议:对网上下载的程序包进行md5校验,检查其完整性,合法性
来源合法性:
程序包的完整性;
rpm管理
rpm命令
rpm [OPTIONS] [PACKAGE_FILE]
安装:-i,–install
升级:-U,–update,–freshen
卸载:-e,–erase
查询:-q
校验:-V
数据库维护:–builddb,–initdb
安装:
rpm {-i|–install} [install-options] PACKAGE_FILE…
rpm -ivh PACKAGE_FILE..
GENERAL OPTIONS:
-v:详细信息
-VV:更详细的输出
[install-options]:
-h:hash marks 输出进度条;每个#表示2%的进度
–test:测试安装,检查并报告依赖关系及冲突消息,并不真正安装程序
–nodeps:忽略依赖关系,强制安装 ,但程序不一定能使用 不建议
–replacepkgs重新安装
—replacefiles 重新安装,忽略重复文件
–nosignature:不检查报名签名信息,不检查来源合法性
–nodigest:不检查包的完整性信息 (校验 MD5)
–justdb:更新数据库,但不重新安装
–noscripts 不执行全部程序包脚本
注意:rpm可以自带脚本
脚本分四类:(特定的脚本的参数,可以单独选择)
preinstall:安装过程开始之前运行的脚本,%pre –nopre
postinstall:安装过程完成之后运行的脚本 $post –nopost
preuninstall:卸载过程真正开始前运行的脚本 $preun –nopreun
postuninstall:卸载过程中运行的脚本 $postun –nopreun
升级:
rpm {-U|–upgrade} [install-options] PACKAGE_FILE..
rpm {-F|-freshen} [install-options] PACKAGE_FILE..
[PTIONS]
-U:有旧版本升级或原程序不存在执行安装
-F:只执行升级
rpm -Uvh PACKAGE_FILE..
rpm -Fvh PACKAGE_FILE.
[install-options]:
–oldpackage:降级安装旧版本
–force:强制;新版本的程序包不满足老版本的依赖关系 ,强制安装或强制升级,忽略依赖关系,也可配合rpm -ivh选项
注意:
(1)不要对内核kernel做升级操作 linux支持多内核并存,因此,直接安装新版本内核即可
(2)如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重名命为(FILEname.rpmnew)后提供
卸载:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts][–notriggers] [–test] PACKAGE_NAME …
–allmatches:卸载所有匹配指定名称的程序包的各版本
–nodeps:强制忽略依赖关系
–test:测试卸载:dry run模式
查询
rpm {-q|–query} [select-options] [query-options] PACKAGE_NAME …
select-options:
PACKAGE_NAME :查询指定程序包是否安装及安装信息
-a:所有已安装的程序包列表
-f:查询指定的文件由那个程序包安装
-g:查询指定包组中包含哪些包
-p:对未安装的程序包执行查询操作;
–whatprovides CAPABILITY:查询指定的CAPABILITY由那个程序包提供;
–whatrequires CAPABILITY:查询指定的CAPABILITY被那个程序包所依赖;
query-options:
–changelog:查询rpm包的changlog
-l:rpm包生成的所有文件列表
-i:查询程序包相关的信息,版本号,大小,所属包组等等
-c:查询指定的程序包提供的配置文件
-d:查询指定的程序包提供的帮助文档
–provides:列出指定的程序包提供的所有的CAPABILITY. 在确定–whatprovides CAPABILITY
-R:查询指定程序包的依赖关系
–scripts:查询指定程序包自带的脚本片段
哪个包所依赖
rpm2cpio 包文件|cpio –itv 预览包内文件
rpm2cpio 包文件|cpio –id “ *.conf” 释放包内文件
用法:
-ql ,-qd,-qc,-qi,-qa PACKAGE_NAME
-qp{i,c,d,f} PACKAGE_FILE :未安装程序的详细信息
校验
rpm {-V|–verify} [select-options] [verify-options] 程序名
只要改变服务下的任意文件,使用-V校验,都可看到修改信息
例:修改httpd的配置文件,校验httpd服务
将httpd中的某个文件改动一点点就会查询到。
显示信息的含义:
S file Size differs 文件大小
M Mode differs (includes permissions and file type) 权限
5 digest (formerly MD5 sum) differs MD5
D Device major/minor number mismatc 主次设备号不配备
L readLink(2) path mismatch 路径不匹配
U User ownership differs 属主匹配
G Group ownership differs 属组比匹配
T mTime differs 时间戳改变
P caPabilities differ
数据库重建
rpm管理器数据库路径:/var/lib/rpm/ 该目录严重保护,全额备份
查询操作:通过此处的数据库进行;
NAME
rpmdb – RPM Database Tool
SYNOPSIS
rpm {–initdb|–rebuilddb} [-v] [–dbpath DIRECTORY] [–root DIRECTORY]
–initdb:初始化数据库,当前无任何数据库可初始化创建一个新的,当前有时,不执行任何操作
–rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建(不管如何,直接重建)
例如:
程序包来源合法性和完整性验证:
来源合法性验证:RSA
完整性验证:SHA256
公钥加密:
对称加密:加密、解密使用同一密钥;
非对称加密:密钥是成对儿的
public key: 公钥,公开所有人
secret key: 私钥, 不能公开
获取并导入信任的包制作者的公钥:
rpm -K|checksig rpmfile 检查包的完整性和签名
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7发行版光盘提供: RPM-GPG-KEY-CentOS-7
rpm -qa gpg-pubkey
对于Centos发行版来说:rpm-import /etc/pki/rpm-gpg/RPM-GPG-KEY-centos-7
验正:
(1)安装此组织签名的程序时,会自动执行验证
(2)手动验证:rpm- k PACEAGE-FILE
实例演示:
查看当前安装软件包的RPM数据库
查询单个软件包
查询所有软件包
利用本地centos iso光盘装rpm软件包
思路:
确定需要什么包-->挂载centos.iso镜像光盘-->进入到光盘内-->查找某包-->安装某包-->卸载某包
这里以安装tree为例
1.只读挂载:mount -r /dev/cdrom /media 2.进入光盘内部:cd /media/ 3.查看要挂载包的版本:ls |grep tree
4.安装:rpm -ivh 版本
包来源合法性及完整性验证
1.导入检查公钥:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 2.验证:
安装此包会自动验证
手动验证:rpm -K