设为首页 收藏本站
查看: 1190|回复: 0

[经验分享] RPM包管理功能全解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-24 09:26:27 | 显示全部楼层 |阅读模式
一、程序包管理概述

   1.程序包语言
      (1)系统级开发:一般直接调用硬件
  C/C++:httpd,vsftpd, nginx
  go语言
      (2)应用级开发:java/Python/perl/ruby/php:
java: hadoop, hbase, (基于jvm虚拟机)
Python:openstack, (基于pvm虚拟机)
perl: (perl解释器)
ruby: (ruby解释器)
php: (php解释器)
   2.程序语言格式
      (1)C/C++程序格式:
  源代码:文本格式的程序代码;
编译开发环境:编译器、头文件、开发库
二进制格式:文本格式的程序代码--> 编译器 --> 二进制格式(二进制程序、库文件、配置文件、帮助文件)
      (2)java/python程序格式:
源代码:编译成能够在其虚拟机(jvm/pvm)运行的格式;
开发环境:编译器、开发库
二进制
   3.项目构建工具:
c/c++:make
java:maven
   4.程序包管理器:要完成安装、升级、卸载、查询、校验(校验为Linux所有)功能
      (1)功能
将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作;
      (2)组成方式
              1)程序包的组成清单(每个程序包都单独实现):文件清单、 安装或卸载时运行的脚本
              2)数据库(公共):/var/lib/rpm/
                   程序包的名称和版本、依赖关系、 功能说明、安装生成的各文件的文件路径及校验码信息...
      (3)不同系列Linux所用程序包管理器:
debian:dpt,dpkg, ".deb"
redhat:redhatpackage manager, rpm, ".rpm"; rpm is package manager;
S.u.S.E:rpm,".rpm",
Gentoo:ports
ArchLinux:
   5.包的命名格式
        (1)源代码:name-VERSION.tar.*z
VERSION:major.minor.release 主版本号.次版本号.发行号
        (2)RPM包:name-VERSION-release.arch.rpm
VERSION:major.minor.release
release.arch:rpm包的发行号,arch 平台号
   6.RHEL制作RPM包时会拆包:主包和支包,方便安装所需要组件而非全部
主包:name-VERSION-release.arch.rpm
支包:name-function-VERSION-release.arch.rpm
     function(功能):devel, utils, libs, ...
   7.程序包管理器前端工具:自动解决依赖关系;
    yum:rhel系列系统上rpm包管理器的前端工具;
    apt-get(apt-cache):deb包管理器的前端工具;
    zypper:suse的rpm管理器前端工具;
   dnf:Fedora22+系统上rpm包管理器的前端工具,yum的升级版;
   8.获取程序包的途径:
(1)系统发行版的光盘或官方的文件服务器(或镜像站点):
http://mirrors.aliyun.com、http://mirrors.sohu.comhttp://mirrors.163.com
(2)各个项目自己的官方站点
(3)第三方组织:
     1) EPEL等可靠地开源社区组织
     2) 搜索引擎:http://pkgs.orghttp://rpmfind.nethttp://rpm.pbone.net
(4)自动编译二进制代码、制作




二、RPM方式管理(CentOS 7.1为例讲解)
rpm命令:rpm  [OPTIONS] [PACKAGE_FILE]
安装:-i,--install
升级:-U,--update, -F, --freshen
卸载:-e,--erase
查询:-q,--query
校验:-V,--verify
数据库维护:--builddb,--initdb
   前提:挂载官方镜像CentOS-7-x86_64-Everything-1503-01.iso,RPM包位置Packages目录
wKiom1Z6O7Sj7XW1AAOoRO6eNDU517.jpg
     Last login: Mon Dec 2106:57:01 2015 from 172.16.250.39
      [iyunv@localhost ~]# mkdir /media/cdrom       #创建挂载点目录
mkdir:无法创建目录"/media/cdrom": 文件已存在
      [iyunv@localhost ~]# mount /dev/cdrom  /media/cdrom   #挂载光盘
mount:/dev/sr0 写保护,将以只读方式挂载
     [iyunv@localhost ~]#   

   1.安装:
      (1)rpm  {-i|--install}  [install-options]  PACKAGE_FILE ...
  rpm  -ivh  PACKAGE_FILE ...
    GENERALOPTIONS(通用选项):
-v:verbose,详细信息
-vv:更详细的输出
     [install-options]:
-h:hashmarks输出进度条;每个#表示2%的进度;
--test:测试安装,检查并报告依赖关系及冲突消息等;
--nodeps:忽略依赖关系;不建议;
--replacepkgs:重新安装
--nosignature:不检查包签名信息,不检查来源合法性;
--nodigest:不检查包完整性信息;
     注意:rpm可以自带脚本;
四类:--noscripts
preinstall:安装过程开始之前运行的脚本,%pre, --nopre
postinstall:安装过程完成之后运行的脚本,%post, --nopost
preuninstall:卸载过程真正开始执行之前运行的脚本,%preun,--nopreun
postuninstall:卸载过程完成之后运行的脚本,%postun, --nopostun
      (2)实例演示
                1)[iyunv@localhostPackages]#rpm  -ivh  zsh-5.0.2-7.el7.x86_64.rpm   #安装zsh程序,显示过程
wKiom1Z6O7uRAejeAAEsIPdmFDQ622.jpg
                2)[iyunv@localhost Packages]# rpm -ivh --testzsh-5.0.2-7.el7.x86_64.rpm
[iyunv@localhostPackages]# rpm -ql  zsh
测试安装zsh,并不会真正的安装。查看zsh程序安装所生成的所有文件列表显示无程序
wKiom1Z6O8jA1lJtAAEdRWtp5X8357.jpg
                3)[iyunv@localhost Packages]# rpm -ivh--nosignature zsh-5.0.2-7.el7.x86_64.rpm
安装时不检验签名信息,此处则不再显示警告信息,NOKEY
wKioL1Z6O-XjrRtSAADlBPb6_wA807.jpg
                5)[iyunv@localhost Packages]# rpm -ivh--nodigest zsh-5.0.2-7.el7.x86_64.rpm
安装时不检查安装包的完整性,直接强制安装
一般除非在十分确定自己做什么和相信此程序视乎才会使用
                6)[iyunv@localhost Packages]# rpm -ivh --test  php-mysqlnd-5.4.16-23.el7_0.3.x86_64.rpm
         [iyunv@localhost Packages]# rpm -ivh --nodeps  php-mysqlnd-5.4.16-23.el7_0.3.x86_64.rpm
  #测试安装 php-mysqlnd,需要安装php-pdo(x86-64),直接安装会报错,安装不了
  #--nodeps 参数会忽略安装包之间的依赖关系,但时安装后很大可能不能正常使用,痴肥依赖关系实际上用不到,如.doc的帮助文档等
wKioL1Z6PXHR22KAAAJeAdHHO9E850.jpg

   2.升级:
      (1)rpm {-U|--upgrade}[install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
     -U:升级或安装  -Uvh;    rpm  -Uvh PACKAGE_FILE ...
      -F:纯粹升级,必须存在老版本,不支持安装操作-Fvh     rpm  -Fvh PACKAGE_FILE ...
--oldpackage:降级;
--force:强制升级;
         注意:
                1) 不要对内核做升级操作;Linux支持多内核版本并存,可直接安装新版本内核;
     2)如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件 不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
       (2)实例演示
                1)[iyunv@localhost Packages]# rpm -e zsh   
          [iyunv@localhost Packages]# rpm -F zsh-5.0.2-7.el7.x86_64.rpm
          [iyunv@localhost Packages]# rpm -U zsh-5.0.2-7.el7.x86_64.rpm
  #卸载zsh程序包
  #用 -F参数升级安装zsh程序细胞,查询结果显示无法安装
# -C 参数则在当不存在原有安装包的时候能够安装该程序
wKioL1Z6PXrRfGPAAAIoC_ZLcG4454.jpg
                2)将zsh-4.3.10版本升级到zsh-5.0.2版本
wKioL1Z6PYuAhvTRAAJ-WS58YfA937.jpg
       [iyunv@localhost /]# rpm -q zsh          #查看当前系统上的zsh程序
           未安装软件包 zsh         #显示当前系统上未安装zsh相关程序
       [iyunv@localhost /]# rpm -ivhzsh-4.3.10-9.el6.x86_64.rpm           #安装4.3.10版本
           警告:zsh-4.3.10-9.el6.x86_64.rpm: 头V3 RSA/SHA1 Signature, 密钥 IDc105b9de: NOKEY
          准备中...                         ################################# [100%]
          正在升级/安装...
                 1:zsh-4.3.10-9.el6                ################################# [100%]
       [iyunv@localhost /]# rpm -q zsh              #显示当前zsh版本信息
           zsh-4.3.10-9.el6.x86_64
       [iyunv@localhost /]# cd /media/cdrom/Packages/               #移动到光盘镜像5.0版本位置
       [iyunv@localhost Packages]# rpm -Fzsh-5.0.2-7.el7.x86_64.rpm           #升级安装更高版本
          警告:zsh-5.0.2-7.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 IDf4a80eb5: NOKEY
       [iyunv@localhost Packages]# rpm -q zsh          #显示当前zsh版本信息
             zsh-5.0.2-7.el7.x86_64

   3.卸载:
      (1)rpm {-e|--erase}[--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
    --allmatches:卸载所有匹配指定名称的程序包的各版本;
    --nodeps:忽略依赖关系
    --test:测试卸载,dryrun模式
      (2)实例演示
                1)[iyunv@localhostPackages]#rpm  -e  --test   zsh    #测试卸载zsh
        [iyunv@localhost Packages]#rpm -ql  zsh   #查看zsh程序安装所生成的所有文件列表
结论:--test不会真的卸载程序
wKiom1Z6PYGx-_fAAADax9vyAxo318.jpg
                2)[iyunv@localhost Packages] rpm -e  zsh
#卸载程序
wKiom1Z6PYSADyLwAAB3H36W2uM287.jpg

   4.查询:
      (1)rpm {-q|--query}[select-options] [query-options]
   [select-options]
PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本;
-a,--all:查询所有已经安装过的包;
-f  FILE:查询指定的文件由哪个程序包安装生成;
-p,--package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;
--whatprovidesCAPABILITY:查询指定的CAPABILITY由哪个程序包提供;
--whatrequiresCAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
   [query-options]
--changelog:查询rpm包的changlog;
-l,--list:程序安装生成的所有文件列表;
-i,--info:程序包相关的信息,版本号、大小、所属的包组,等;
-c,--configfiles:查询指定的程序包提供的配置文件;
-d,--docfiles:查询指定的程序包提供的文档;
--provides:列出指定的程序包提供的所有的CAPABILITY;
-R,--requires:查询指定的程序包的依赖关系;
--scripts:查看程序包自带的脚本片断;
       用法总结:
   -qi  PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE,-qd PACKAGE
   -qpi  PACKAGE_FILE, -qpl PACKAGE_FILE, -qpcPACKAGE_FILE, ...d
      (2)实例演示
                1)[iyunv@localhost Packages]# rpm -ql  php-mysqlnd
#查询程序安装所以生成的所有文件列表
wKioL1Z6PenzGuSHAAEp55JfFXI611.jpg
                2)[iyunv@localhost Packages]# rpm -qi zsh   
#显示程序的相关信息
wKiom1Z6PdnD7k-TAAOjfdBEbmg086.jpg
    显示内容注解:
[iyunv@localhost Packages]# rpm -qi zsh   
Name        : zsh           #安装包名称
Version     : 5.0.2        #版本号
Release     : 7.el7        #发行号
Architecture: x86_64       #所编译的安装平台64位架构平台
Install Date: 2015年12月22日 星期二 09时30分50秒       #安装日期
Group       : System Environment/Shells        #属在组:系统环境的shell中的一种
Size        : 5834441        #程序大小
License     : MIT             #许可证:麻省理工大学
Signature   : RSA/SHA256, 2014年07月04日 星期五 13时54分12秒, KeyID 24c6a8a7f4a80eb5   #签名
Source RPM  : zsh-5.0.2-7.el7.src.rpm         #安装源码RPM包
Build Date  : 2014年06月10日 星期二 10时47分02秒       #RPM包创建时间
Build Host  : worker1.bsys.centos.org       #创建的主人
Relocations : (not relocatable)       #重新安置
Packager    : CentOS BuildSystem <http://bugs.centos.org>        #制作人
Vendor      : CentOS        #卖主
URL         : http://zsh.sourceforge.net/        # 文件所在URL
Summary     : Powerful interactive shell       # 简介:强大的交互式shell
Description :       #详细描述
Thezsh shell is a command interpreter usable as an interactive login
shelland as a shell script command processor. Zsh resembles the ksh
shell(the Korn shell), but includes many enhancements.  Zsh supports
commandline editing, built-in spelling correction, programmable
commandcompletion, shell functions (with autoloading), a history
mechanism,and more.
     3)[iyunv@localhost Packages]# rpm -qd zsh     #查看包所提供文档位置
wKioL1Z6Pe7jiPzdAASCiyTtUzU776.jpg
                4)[iyunv@localhostPackages]# rpm -qc  zsh     #显示zsh相关的配置文件的位置
wKioL1Z6PfOzeuBVAACOYADTTQg122.jpg
                5)[iyunv@localhostPackages]# rpm -q --changelog  zsh    #查询zsh的改变日志
# 从近到远显示出该程序每次改版更新的相关信息
wKiom1Z6PeXSYOUdAAMRaA-Go9c686.jpg
                6)[iyunv@localhostPackages]# rpm -q --provides  zsh    #显示程序包所提供的功能
wKioL1Z6PfnTydONAACNsPM7s-M648.jpg
                7)[iyunv@localhostPackages]# rpm -qR  zsh      #显示安装包所要依赖的库及其他相关
wKiom1Z6PeiBo11vAANNOmLxlRA801.jpg
                8)[iyunv@localhostPackages]# rpm -q  --scripts  zsh      #显示程序包自带的运行脚本片段
  此处有四类脚本中的三类:
#postinstall scriptlet(using /bin/sh):安装完成会后执行脚本
#preuninstall scriptlet(using /bin/sh):卸载开始之前执行脚本
#postuninstall scriptlet(using /bin/sh):卸载完成之后执行脚本
wKioL1Z6Pf3z9ctDAAOZbdUEA-c258.jpg
                9)[iyunv@localhost Packages]# rpm -q--whatprovides   zsh
#显示zsh功能是被哪个程序包所提供
wKioL1Z6PgKA1ADmAABtAaDEpk0456.jpg
                10)[iyunv@localhost Packages]# rpm -q--whatrequires   zsh   
#查询功能被哪个所依赖,此处zsh未被系统上安装的包做依赖
wKioL1Z6PgKDM2XzAABqc3p0ZjE961.jpg


   5.校验:
      (1)rpm {-V|--verify}[select-options][verify-options]        
   S file Size differs         #文件大小改变
   M Mode differs(includes permissions and file type)          #文件权限改变(包括许可和文件类型)
   5 digest (formerlyMD5 sum) differs          #MD5校验码是否改变
   D Device major/minornumber mismatch         #设备的主次版本号是否错配
   L readLink(2) pathmismatch       # readlink路径是否错配
               U User ownership differs              #用户本身关系
   G Group ownershipdiffers          # 用户组本身关系
   T mTime differs                             # 修改时间modify time
    PcaPabilities differ
      (2)实例演示
               测试安装的程序的校验信息
       [iyunv@localhost Packages]# rpm -ivh  --nodepsphp-5.4.16-23.el7_0.3.x86_64.rpm
       [iyunv@localhost Packages]# rpm -V php
# 忽略依赖关系安装php程序,此处为了测试使用
#测试程序的校验信息
wKiom1Z6PfLwTjnlAAL6s_ftmN4057.jpg


   6.包来源合法性验正和完整性验证:
      (1) 检验方式
    数字签名:用私钥加密对应程序的特征码
      (2) 获取并导入信任的包制作者的密钥:
   1)对于CentOS发行版来说:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
wKiom1Z6PfKyDnEAAADU2kOBWzc817.jpg
   2)对于官方光盘内秘钥导入:[iyunv@localhostcdrom]# rpm --import RPM-GPG-KEY-CentOS-7
           此处的RPM-GPG-KEY-CentOS-7为光盘内适配当前系统的光盘所自带的验证秘钥,不同系统不同
当秘钥导入到系统之后,再次安装后会自动执行验证,此时不会警告NOKEY
wKiom1Z6PfTTVDZIAAO0DqiXUYE256.jpg
       (3)验证:
   1) 安装此组织签名的程序时,会自动执行验证;
    2) 手动验正:rpm   -K    PACKAGE_FILE   
在导入秘钥的CentOS7.1上验证  
wKioL1Z6Pgei6OFDAACR2geLb3M024.jpg
在未导入秘钥的CentOS 6.7 系统上验证
wKiom1Z6PfWy_0SOAADQZ3-2FSM657.jpg


  7.数据库重建:
      (1)rpm管理器数据库路径:/var/lib/rpm/
      查询操作:通过此处的数据库进行;
      (2)获取帮助:CentOS命令查询位置不同
      CentOS6:man rpm
      CentOS7:man rpmdb
      (3)rpm{--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
  --initdb:初始化数据库,当前无任何数据库可实始化创建一个新的;当前有时不执行任何操作;
  --rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;
[--dbpath DIRECTORY]  :指明建立位置
      (4)实例演示
                1)在指定目录下/rpmdb下初始化一个rpm的数据库
  注意:此时的库是没用的,所以大小和原来的库不同
wKioL1Z6PgqSgpfkAANh-NnzAJo323.jpg
                2)查看/var/lib/rpm
wKioL1Z6PgzRT7BWAANlu-gZ_h8028.jpg


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-155545-1-1.html 上篇帖子: CentOS6.5-升级GCC5.3.0 下篇帖子: rpm包管理功能全解(CentOS系统)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表