Linux程序包管理之RPM

Linux程序包管理之RPM

RPM概念

rpm是什么

RPM 是Ret Hat Package Manager(RPM软件包管理器)的缩写,遵循GPL协议,可以运行在各种Linux上,公认的行业标准。

rpm干什么

对于终端用户来说

简化了Linux系统的安装、卸装、更新和升级的过程,用命令完成

对于开发者来说

RPM允许把软件编码包装成源代码和程序包提供给用户,过程简单,减轻了发行软件新版本所带来的负担。

管理用途

可以安装、删除、升级、刷新和管理RPM软件包

通过RPM软件管理包能知道软件包包含哪些文件,以及系统中的某个文件属于哪个包

可以查询系统中的RPM软件包是否安装并查询其安装的版本

开发者可以把自己的程序打包为RPM包并发布

软件包签名GPG和MD5的导入、验证和签名发布

依赖性的检查,查看是否有RPM软件包由于不兼容而扰乱系统

rpm包命名格式

Linux程序包管理之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服务 Linux程序包管理之RPM

将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:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建(不管如何,直接重建)

例如: Linux程序包管理之RPM

程序包来源合法性和完整性验证:

来源合法性验证: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数据库

Linux程序包管理之RPM

查询单个软件包

Linux程序包管理之RPM

查询所有软件包

Linux程序包管理之RPM

利用本地centos iso光盘装rpm软件包

思路:
确定需要什么包-->挂载centos.iso镜像光盘-->进入到光盘内-->查找某包-->安装某包-->卸载某包

这里以安装tree为例

1.只读挂载:mount -r /dev/cdrom /media 2.进入光盘内部:cd /media/ 3.查看要挂载包的版本:ls |grep tree Linux程序包管理之RPM

4.安装:rpm -ivh 版本 Linux程序包管理之RPM

包来源合法性及完整性验证

1.导入检查公钥:rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 2.验证:

安装此包会自动验证

手动验证:rpm -K 

Linux程序包管理之RPM

原创文章,作者:N24_yezi,如若转载,请注明出处:http://www.178linux.com/60356

(0)
N24_yeziN24_yezi
上一篇 2016-11-22 12:57
下一篇 2016-11-22 13:01

相关推荐

  • 第六周作业

    请详细总结vim编辑器的使用 模式化的编辑器 基本模式: 编辑模式,命令模式 输入模式 末行模式: 内置的命令行接口; 打开文件: # vim [options] [file ..] +#:打开文件后,直接让光标处于第#行的行首; +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的首; 模式转换: 编辑模式:默认模式 编辑模式 …

    Linux干货 2017-03-21
  • 计算机基础与Linux初识

    一、 计算机的组成及其功能。      计算机五大组成部件:运算器、控制器、存储器、输入设备、输出设备。其中CPU主要由运算器及控制器组成。      1、运算器:进行算数运算、逻辑运算,对数据进行加工处理。      2、控制器…

    2017-07-02
  • N25_第十二周作业

    1、请描述一次完整的http请求处理过程;     1)建立或者处理连接:建立请求或拒绝请求     2)接收请求:接收来自于网络上的主机请求报文中对特定资源的一次请求的过程;     3)处理请求:对请求报文进行解析,主要获取客户端请求的…

    Linux干货 2017-03-06
  • shell 脚本编程基础

    Shell脚本简介: Shell脚本是一种特殊的程序,它是用户与linux系统内核之间的一个接口,shell是一个工具程序,在用户登录后系统启动。它解释并运行由命令行或脚本文件输入的命令,从而实现用户与内核间的交互。 Shell脚本:也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的,是利用shell的功…

    Linux干货 2016-08-21
  • Linux安全与加密基础(二)

    Linux安全与加密基础(二) 常见的加密算法 SSL: Openssl与CA认证 ssh服务 dropbear AIDE sudo gpg gpg亦可用于对称加密与文件检验。 文件完整性的两种实施方式 被安装的文件     MD5单向散列     rpm –veri…

    Linux干货 2016-10-06
  • 分享 (History,Ls,感悟 )

    1.History 选项   -c: 清空命令历史   -d offset: 删除历史中指定的第offset个命令    n: 显示最近的n条历史   -a: 追加本次会话新执行的命令历史列表至历史文件   -n: 读历史文件中未读过的行到历史列表   -r: 读历史文件附加到历史列表 &…

    2017-07-15

评论列表(1条)

  • luoweiro
    luoweiro 2016-12-01 00:01

    知识整理的非常赞,而且符合阐述知识点,并对知识点进行验证的方式来总结,值得大家学习。