rpm简介

rpm( Red Hat Package Manager )是一个开放的软件包管理系统。它工作于Red Hat Linux及其他Linux系统,成为Linux中公认的软件包管理标准。

rpm将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作

rpm维护一个所有已安装的软件包和文件的数据库,可以让用户进行功能强大的软件包查询和验证工作。

rpm的功能

安装:-i, --install

卸载:-U, --update, -F, --freshen

升级:-e, --erase

查询:-q, --query

验证:-V, --verify

数据库维护:--builddb, –initdb

rpm软件包命名格式

rpm包的命名格式一般分两大部分组成。

第一部分是源代码版本号,比如:

name-VERSION.tar.gz

name: 源代码包的名称

VERSION分为:

  • major: 主版本号,一般程序功能有重大改变才会变动
  • minor: 次版本号,程序功能某个小的分支有变动,才会变动
  • release: 发行号,修正了某个BUG或升级了某段代码,才会变动

第二部分是rpm打包制作的版本。

如果用源代码比作面粉,rpm包比作馒头,它们的区别在于: 面粉有不同的工艺,拿面粉又做出了各种可口的馒头。

这样最终的软件包格式就构成了:

name-VERSION-release.arch.rpm

其中

name-VERSION仍然沿用源代码包的命名

release : 是rpm包打包制作的发行号

arch:是指明适用于哪种操作系统平台,有i386, x64(amd64), ppc, noarch等

获取程序包

除了系统发行版的光盘自带的rpm软件包外,通常还需要到网上下载,下面是几个可信的获取软件包的途径

(1) 官方的文件服务器(或镜像站点)

http://mirrors.aliyum.com

http://mirrors.sohu.com

http://mirrors.163.com

(2) 项目的官方站点

(3) 第三方组织:

(a) EPEL

(b) 搜索引擎

http://pkgs.org

http://rpmfind.net

http://rpm.pbone.net

(4) 自己动手编译。

下载后建议检查程序包的合法性和完整性。

rpm命令使用

安装

命令格式:

rpm {-i|--install} [install-options] PACKAGE_FILE … 

通用选项

-v : verbose ,详细信息

-vv : 更详细的信息

[install-options]:

-h:hash marks输出进度条,每个#表示2%的进度

--test:测试安装,检查并报告依赖关系及冲突消息等

--nodeps:忽略依赖关系

--replacepkgs:强制重新安装已经安装的软件包

--nosignature:不检查包签名信息,不检查来源合法性;

--nodigest:不检查包完整性信息;

注意:每一个程序安装时可能会运行脚本,做一些准备操作。rpm包可以自带脚本,这些脚本有四类,分别在不同的时刻被触发,分别是:

preinstall : 安装过程开始之前运行的脚本,%pre , --nopre

postinstall : 安装过程完成之后运行的脚本,%post , --nopost

preuninstall : 卸载过程真正开始执行之前运行的脚本,%preun, --nopreun

postuninstall : 卸载过程完成之后运行的脚本,%postun , --nopostun

应用:

1、下图是正常安装过程

2、忽略依赖关系

3、强制重新安装

升级

命令格式:

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

其中

-U:如果有安装老版本则升级,如果老版本安装不存在,则安装最新版本

-F:如果有安装老版本就升级,如果老版本安装不存在,则不予理会

通用选项:

-v : verbose ,详细信息

-vv : 更详细的信息

[install-options]:

-h:hash marks输出进度条,每个#表示2%的进度

--test:只进行升级测试

--oldpackage:降级,如果新版本存在很多问题,就要用到降级

--force:强制升级,如果新版本不再为其它程序提供依赖服务,这时会报错,可用强制升级

注意:

(1) 内核升级可能会有若然隐患问题,所以不要对内核进行升级,如果要测试新版本内核,可用直接安装新版本内核,让与老版本并存。

(2) 如果某程序包在安装后配置文件曾做过修改,在升级时,新版本程序提供的同名配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名( FILENAME.rpmnew )后提供。

应用:

1、-U和-F的区别:

2、升级“老版本”

卸载

命令格式:

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...

其中:

--allmatches:卸载所有匹配指定名称的程序包的各版本

--nodeps:忽略依赖关系

--test:测试卸载,dry run模式

查询

命令格式:

rpm {-q|--query} [select-options] [query-options]

其中:

[select-options]

PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本

-a, --all:列出所有已经安装过的包

-f FILE:查询指定的文件由哪个程序包安装生成

-p, --package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作

--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供

--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖

[query-options]

--changelog:查询rpm包的changlog,注意非源码包的历史修订

-l, --list:程序安装生成的所有文件列表

-i, --info:程序包相关的信息,版本号、大小、所属的包组,等

-c, --configfiles:查询指定的程序包提供的配置文件

-d, --docfiles:查询指定的程序包提供的文档

--provides:列出指定的程序包提供的所有CAPABILITY

-R, --requires:查询指定的程序包所依赖的CAPABILITY

--scripts:查看程序包自带的脚本片断

常用用法:

-qi PACKAGE //查询程序包information

-qf FILE //查询文件由哪个程序包生成

-qc PACKAGE //查询程序包的配置文件

-ql PACKAGE //查询程序包生成的文件列表

-qd PACKAGE //查询程序包安装后生成的文档

-qpi PACKAGE_FILE //查询未安装程序包的information

-qpl PACKAGE_FILE //查询未安装程序包将要生成的文件列表

-qpc PACKAGE_FILE, ... //查询未安装程序包将要提供的配置文件

应用:

1、查询bash软件包提供的所有CAPABILITY

2、查询sed软件包所依赖的CAPABILITY

3、查询未安装php-common软件包的配置文件

校验

命令格式:

rpm {-V|--verify} [select-options] [verify-options]

一般用于对软件包安装后,校验软件包所有的文件有没有发生修改。

例如:

# rpm -V zsh       //没有返回任何提示,即校验通过

# vim /usr/share/zsh/4.3.10/scripts/newuser        //在注释行添加一个“#”

# rpm -V zsh

# [root@localhost Packages]# rpm -V zsh

   S.5....T. /usr/share/zsh/4.3.10/scripts/newuser        //文件大小发生变化,MD5校验和发生变化,文件修改时间发生变化

如果一切都被校验正确,屏幕上就不会显示输出。如果出现有修改,相关信息就会被显示至屏幕。输出的格式中,单用“ . ” 表示测试通过,如果是下列字符则代表某类测试失败:

5: MD5校验和

S: 文件大小

L: 符号链接

T: 文件修改时间

D: 设备

U: 用户

G: 组群

M: 模式( 包含权限和文件类型 )

?: 不可读文件

rpm包来源合法性验证和完整性验证

在上面演示的图片中,在每次安装软件包时都会有一个警告信息。软件包在打包制作时,会附加上用单向加密了的软件包自身的特征码,只有与之对应的公钥才能解密验证包的合法性并得到特征码,再利用特征码验证软件包的完整性。由于在本地没有对应的公钥所以才会出现上面的警告信息。这时需要获取公钥,公钥的获取很关键,直接关系着软件包的来源合法性。

首先要获取并导入信任的包制作者的密钥,对于CentOS发行版来说:

系统在安装完成后,系统会自动复制一份公钥至/etc/pki/rpm-gpg/ 下,用命令导入公钥,如下:

[root@localhost ~]# rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

还有一种就是把密钥路径指向发行版光盘:

[root@localhost ~]# rpm -import /media/RPM-GPG-KEY-CentOS-7

接下来安装软件包时系统就可以自动验证了。

还可以在安装软件包前,手动验证:

数据库重建

rpm管理器数据库路径:

/var/lib/rpm/

所有的查询操作都是通过此处的数据库进行的。

命令格式:

rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]

其中:

--initdb:初始化数据库,当前无任何数据库可实始化创建一个新的;当前有时不执行任何操作

--rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建

应用:

Linux程序包管理之rpm的更多相关文章

  1. Linux程序包管理初步-rpm的使用

    在Linux系统上,一般而言,对于程序包管理器来说分为三类: debian:dpt,dpkg;             (程序包后缀.deb) rhel:rpm (程序包后缀.rpm) suse:rp ...

  2. 【程序包管理】Linux程序包管理之rpm安装总结

    rpm简介 rpm( Red Hat Package Manager )是一个开放的软件包管理系统.它工作于Red Hat Linux及其他Linux系统,成为Linux中公认的软件包管理标准. rp ...

  3. Linux程序包管理rpm与yum

    Linux程序包管理 Linux中软件的安装主要有两种形式:一种是直接下载源代码包自行编译后安装,另一种直接获取rpm软件包进行安装. 程序的组成部分: 二进制程序:程序的主体文件,比如我们运行一个l ...

  4. Linux程序包管理之yum及源代码安装

    第十六章.Linux程序包管理之yum及源代码安装 目录 yum介绍 yum配置文件 yum的repo配置文件中可用的变量 yum命令的使用 使用光盘作为本地yum仓库 如何创建yum仓库 编译安装的 ...

  5. Linux下程序包管理工具RPM

    实验环境: CentOS release 6.6 (Final)  一台 IP地址:172.16.249.230 RPM 是 Red Hat Package Manager 的缩写,本意是Red Ha ...

  6. Linux 程序包管理-RPM

    程序简介:  POSIX(Portable Openratin System)跨平台系统:不同操作系统平台的标准C库(glibc)都是遵循POSIX规范的,这样基于标准库开发程序的源代码可以夸平台编译 ...

  7. 十六、程序包管理之 rpm

    c语言程序的构建过程 1.程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接--> 可执行程序 开放源码:就是程序码,文本格式的源代码,写给人类看的程序 ...

  8. Linux 程序包管理-YUM

    前端工具YUM管理程序包:  rpm管理软件虽然方便,但是需要手工解决软件包的依赖关系:很多时候安装一个软件需要首先安装一个或多个(有时多达上百个)其它软件,手工解决很复杂:使用yum可以解决这个问题 ...

  9. Linux程序包管理.md

    rpm 简介 RPM包管理员(简称RPM,全称为The RPM Package Manager)是在Linux下广泛使用的软件包管理器.RPM此名词可能是指.rpm的文件格式的软件包,也可能是指其本身 ...

随机推荐

  1. C# DateTime日期格式化

    在C#中DateTime是一个包含日期.时间的类型,此类型通过ToString()转换为字符串时,可根据传入给Tostring()的参数转换为多种字符串格式. 目录 1. 分类 2. 制式类型 3. ...

  2. 路由的Resolve机制(需要了解promise)

    angular的resovle机制,实际上是应用了promise,在进入特定的路由之前给我们一个做预处理的机会 1.在进入这个路由之前先懒加载对应的 .js $stateProvider .state ...

  3. Hawk 7. 常见问题

    本页面您可以通过关键字搜索来获取信息. 理性使用爬虫 爬虫是一种灰色的应用,虽然作为Hawk的设计者,但我依然不得不这么说. 各大网站都在收集和整理数据上花费了大量的精力,因此抓取的数据应当仅仅作为科 ...

  4. ASP.NET Core 中文文档 第四章 MVC(4.4)依赖注入和控制器

    原文: Dependency Injection and Controllers 作者: Steve Smith 翻译: 刘浩杨 校对: 孟帅洋(书缘) ASP.NET Core MVC 控制器应通过 ...

  5. Boost信号/槽signals2

    信号槽是Qt框架中一个重要的部分,主要用来解耦一组互相协作的类,使用起来非常方便.项目中有同事引入了第三方的信号槽机制,其实Boost本身就有信号/槽,而且Boost的模块相对来说更稳定. signa ...

  6. 【SAP业务模式】之ICS(三):前台操作

    本片博文开始讲解SAP前台是如何实现ICS业务模式的. 一.VA01开立销售订单 我这里为了方便,创建了一个订单类型ZMIV作为公司间销售的订单类型,其实公司间销售订单跟标准的销售订单是一致的.同时, ...

  7. Open-Test 测试驱动模式与版本号管理机制

    以测试用例驱动项目开发,coding/case俩条线并走模式.   1.开发人员只负责功能实现:   2.测试人员提供自测用例,研发人员jenkins持续集成项目后自动化执行自测用例,通过后方可转测试 ...

  8. 借助 SIMD 数据布局模板和数据预处理提高 SIMD 在动画中的使用效率

    原文链接 简介 为发挥 SIMD1 的最大作用,除了对其进行矢量化处理2外,我们还需作出其他努力.可以尝试为循环添加 #pragma omp simd3,查看编译器是否成功进行矢量化,如果性能有所提升 ...

  9. 三大框架SSH整合

    三大框架SSH整合 -------------------------------Spring整合Hibernate------------------------------- 一.为什么要整合Hi ...

  10. 【腾讯bugly干货分享】微信Android热补丁实践演进之路

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=1264& ...