发布于 2016-01-04 07:18:22 | 206 次阅读 | 评论: 0 | 来源: PHPERZ
RPM RPM 包管理器
RPM Package Manager (RPM) 是一个强大的命令行驱动的软件包管理工具,用来安装、卸载、校验、查询和更新 Linux 系统上的软件包。
RPM包概述
程序管理器其实就是将编译好的应用程序的各组成部分(二进制程序、库文件、配置文件、帮助文件)组织起来,打包成为一个或几个程序包文件,可以完成或帮助安装、升级、卸载、查询、校验等相关操作。
程序包管理器的内容包括:
1、程序包的组成清单(每个程序都单独实现):文件清单、安装或卸载时候运行的脚本、
2、数据库由所有程序功能同使用:定义每一个程序包名称和版本、报之间的依赖关系、功能说明、安装生成的文件路径即校验码信息。
Linux程序包管理三大主流:
debin:dpt工具,将程序包打包成以“.deb"为后缀的文件;
rathat:RPM(redhat package manager)将程序包打包成以“.rpm”为后缀的文件,RPM工具使用C语言卡发的软件。
S.u.S.E:RPM,对其使用的就是rathat的RPM工具。
RPM包命名格式:name-VERSION-release.arch.rpm
VERSION:major.minor.release ; (VERSION中的release与RPM中的release不是一会儿事儿)
RPM包中的release:release.os.arch表示对RPM包发行号。os代表使用的操作系统 arch(archetecture):平台信息如x84_64 i386,ppc 等。例如:redis-3.0.2-1.centos7.x64.rpm
RPM的依赖关系:
RPM最大的特点是将你要安装的软件先编译过,并且打包成RPM机制的安装包,通过包装好的软件里头默认的数据库记录这个软件要安装的时候必须具备的依赖属性软件。当你的linux主机安装时,RPM会先依照软件里的数据查询Linux主机的依赖属性软件是否满足,若满足则予以安装、若不满足则不予以安装。正因为软件的这种依赖关系需要注意如下问题:
软件安装的环境必须与打包时的环境需求一致或相当
需要满足软件的属性需求
反安装时需要特别的小心,最底层的软件不可先删除,否则可能造成整个系统问题
RPM的优点:
RPM内含已经编译过的程序与设置文件等数据,可以让用户免除重新编译的困扰
RPM在被安装前,会先检查系统的硬件容量、操作系统版本等,可以避免文件被错误安装
RPM文件本身提供的软件版本信息、依赖属性软件名称、软件用途说明、软件所含文件等信息,便于了解软件
RPM管理的方式使用数据库记录RPM文件的相关参数,便于升级、删除、查询与验证
RPM包获取的途径:
优先选择系统发行版的光盘或官方 文件服务器(或镜像站点)
项目官方站点
第三方组织:
a、 EPEL:
b、搜索rpm包引擎
rpmfind.net
rpm.pbone.net
自己动手,丰衣足食
RPM默认安装路径:
/etc |
一般配置文件放置的目录 |
/usr/lib |
程序使用的动态库文件 |
/usr/bin |
可执行二进制文件 |
/usr/share/doc |
软件使用手册与帮助文档 |
/usr/share/man |
man page文件 |
CentOS 系统上RPM命令管理程序:软件的安装、升级、卸载、查询和校验、数据库维护等
rpm命令:
rpm [OPTIONS] [PACKAGE_FILE]
-i,--install :安装
-U,--update;-F,--freshen:升级
-e,--erase :卸载
-q,--query:查询
-V,--verify:校验
--builddb,--initdb:数据库维护
安装:
rpm {-i} [install-options] PACHAGE_FILE...
rpm -ivh PACKAGE_FILE..
GENRAL OPTIONS:
-v:verbose 详细信息
-vv:更详细信息
install-options
-h:hash marks 输出哈希进度条,查看安装进度(hash每个#表示2%的进度)
-test:测试安装,检查并报告依赖关系即冲突消息等
--nodeps 忽略依赖关系,不一定能用
--replacepkgs:重新安装
当误删除配置文件,将源配置文件删除,重新安装此软件即可解决。
--noscripts:rpm安装时可以自带四类脚本:
--nopre : preinstall---安装过程开始之前运行的脚本,%pre
--nopost:postinsatll---安装过程完成之后运行的脚本,%post
--nopreun:preuninstall---卸载过程真正开始执行之前运行的脚本,%preun
--nopostun:postuninstall---卸载过程完成之后运行的脚本,%postun
--nosignature:不检查包签名信息,不检查 来源 合法性
--nodigest: 不检查包完成性信息
卸载:-e
rpm {-e|--erase} [--allmatches][][][] [--test] PACHAGE_NAME...
--allmatche :指定卸载所有匹配名称程序包的各版本
--nodeps:忽略依赖关系
--test:测试卸载,不真正执行,dru run模式
查询:-q
rpm {-q|--query} [select-options][query-options]
PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本。
select-options
-a,--all:查询已安装的所有包
rpm -qa | grep “string”
-f,--file FILE:查询指定文件是由哪个rpm包提供
-g,--group GROUP:指定包组
-p,--package PACKAGE_FILE:对于未安装的程序包执行查询操作。
rpm -qp PACKAGE_FILE
rpm -qpl
rpm -qpi
rpm -qpc
rpm -qpd
rpm -qpR
--wahtprovides CAPABILITY :表示查询指定的CAPABILITY由那个程序包提供
--whatrequires CAPABILITY :查询指定的 CAPABILITY 被哪个包所依赖
[query-options]:
--changelog :查询rpm包的修改 日志
-l,--list:列出安装rpm包生成的所有文件。
rpm -ql ssh
-i,--info:查询程序包相关的信息,版本号,大小,所属的包组……
rpm -qi bash |less
-c,--configfiles:查询指定的程序包的配置文件
rpm -qc bash
-d,--docfiles :查询指定的程序包,提供的文档。
rpm -qd bash
--provides:列出指定的程序包提供的所有CAPABILITY
rpm -q --provides bash
-R,--requires: 查询指定程序包所依赖的程序包
--scripts:查询程序包包含的脚本。
校验:-V
rpm -V zsh
RPM校验内容如下,根据提示内容获取文件更改信息。
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
数据库重建:
rpm -ql bash 怎么能查询到bash安装的相关信息呢?这就是数据库的作用了,数据库中记录着安装的RMP包的所有信息。rpm的查询操作都是基于数据库来查询的。
rpm管理器 数据库路径:/var/lib/rpm/
查询操作:通过此处的数据库进行;
centos 6 查看帮助信息:man rpm
centos 7 查看帮助信息:man rpmdb
rpm {--initdb|--rebuilddb}
--initdb :初始化数据库。当前无任何数据库时,可是进行初始化,创建一个新的,当前有不执行任何操作
--rebuilddb:重建数据库,通过读取当前的RPM相关信息
包来源于合法性、完整性验证:
RPM是打包好的安装包,源码都是开放的,安装时候可能会被一些坏蛋更改里边的设置,或注入病毒在里边。那如何才能保证安装包的可靠性呢?这里就来说一下合法性校验和完整性校验。
首先RPM包的制作者会在制作完RPM包是后,使用单向加密算法计算出特征码,用自己的私钥加密特征码,并将特征码加密后放在包文件后边。使用者使用RPM包时用,拿着制作者的公钥去解密特征码,计算出一个特征值,此为包的来源合法性验证;同时使用者拿着这个公钥用同样的单向加密算法去计算包文件,得到的特征码与包文件后边的特征码进行比对,如果两者是一致的,则包的完整性有效。以上描述可用下图来表示:
RPM的公钥:在光盘中 /media/cdrom/RPM-GPG-KEY-CentOS-6 (或本地/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 本地的文件是执行导入操作后将其复制到该目录中的)就是RPM包的公钥。手动将其导入到系统中,再安装软件时候就不会出现NOKEY的报错了。
rpm --import /media/cdrom/RPM-GPG-KEY-CentOS-6
或 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
验证:安装次组织签名的程序时,会自动执行验证操作;
手动验证方式:rpm -K PACKAGE_FILE
例:
[root@localhost Packages]# rpm -K zsh-html-4.3.11-4.el6.centos.x86_64.rpm
zsh-html-4.3.11-4.el6.centos.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
以上就是RPM安装方法的内容,还等什么自己动手试试吧。