RPM程序包管理

一、概述:

1Linux下程序包分类:

 源码包:程序源代码打包压缩;

 二进制包:主流为rpm包和deb包;

 

2、程序包管理器:

 rpmRedhat Package Manager简写,最早由Red Hat开发,现在也由开源社区开发,程序包格式为rpm,大多数Linux发行版使用的包管理器,如Red Hat系列、SUSE系列等,其前端工具为yum

 dpkgDebian社区所开发出来的,软件包格式为deb,大多数Debian系列发行版使用的包管理器,DebianUbuntu等,其前端工具为apt-get

 

3、程序包的组成格式:

 1)、二进制程序:

  /bin/sbin/usr/bin/usr/sbin/usr/local/bin/usr/local/sbin/usr/local/APP/bin/usr/local/APP/sbin

  注意:有些特殊的应用程序放置于libexec目录中;有些第三方应用默认安装于/opt目录;


 2)、库文件(开发库、运行库):

  /lib64/usr/lib64/usr/local/lib64/usr/local/APP/lib


 3)、配置文件:

  /etc/usr/local/APP/etcconf目录;


 4)、帮助文件:

  /usr/share/man/usr/local/share/man/usr/local/APP/man


4、程序包命名格式:

 name:软件名;

 version版本号;

 major:主版本号;

 minor:次版本号;

 release:发行号;


 1)、源代码:name-version.tar.{gz,bz2,xz}

  versionmajor.minor.release


 2)、rpm包的命名格式:

  name-version-relase.arch.rpm

   version:major.minor.release,同源代码;

    releaserpm自身的发行号,与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订;同时,release还包含此包适用的OS


    arch:适用于的硬件平台:

     x86i386i486i586i686等;

     x86_64x86_64

     powerpcppc

     noarch:依赖于虚拟机;


5、分包机制:

 核心包,主包:命名与源程序一致;

  bash-4.2.3-3.centos7.x86_64.rpm

 子包:

  bash-a-4.2.3-3.centos7.x86_64.rpm

  bash-b-4.2.3-3.centos7.x86_64.rpm

  bash-devel-4.2.3-3.centos7.x86_64.rpm


6、获取rpm包的途径:

 1)、发行的光盘或站点服务器:

  镜像:

   阿里云开源镜像站: http://mirrors.aliyun.com/

   网易开源镜像站:http://mirrors.163.com/

   搜狐开源镜像站:http://mirrors.sohu.com/

wKioL1WWEAmy2wb-AAEaIFTIpyY107.jpg

 2)、项目的官网:

  源代码,rpm包;


 3)、很多第三方机构或个人制作并公开发布许多rpm包;

  http://rpmfind.net

  http://rpm.pbone.net


 可靠的途径:EPEL

  Fedora-EPEL


二、包管理器的功能:

 rpm包管理器的常见使用场景:打包,安装,卸载,升级,校验,数据库管理;


1、安装程序包:

#rpm [option] /path/to/package_file
 -i:install,安装程序;
 -v:显示安装信息,更详细的安装信息可用-vv,-vvv…;
 -h:以#显示安装进度,一个#代表2%;
 --test:测试安装;
 --nodeps:忽略依赖关系;
  如果依赖于其它包:
   1)、解决依赖关系;
   2)、忽略依赖关系;能安装上,但有可能无法运行;

 --replacepkgs:重新安装;
   如果原有配置文件作了修改,很有可能不执行替换,而是将应该安装生成的配置文件重命名为 .rpmnew

 -ivh:常用组合安装选项;

wKiom1WWFySDWKSsAAFTDni_OQA274.jpg

2、卸载程序包:

#rpm [option] package_name
 -e: erase:卸载程序;
 --nodeps:
  如果被其它包所依赖:
   1)、将依赖于此包的所有包一并卸载;
   2)、忽略依赖关系;能卸载,但依赖于此包程序包可能会运行不正常;
                                    
如果包的配置文件安装后曾被改动过,卸载时,此文件将不会卸载,而是被重命名并保留;
例如:
#warning:/etc/zprofilesaved as /etc/zprofile.rpmsave

RPM程序包管理_第1张图片


3、升级程序包:

 新版本替换老版本:

rpm [option]/path/to/package_file
 -F:纯升级,需要升级的程序包必须已经安装;-Fvh
 -U:升级或安装;需要升级的程序包若已安装,则升级;若未安装,则升级;-Uvh
 --force:强制升级,升级后的版本冲突等;

注意:不应该对内核执行升级操作,而是安装,系统允许多内核并存;


4、查询操作:

 1)、查询某包是否安装:

rpm -q package_name...

wKioL1WWGcjhDWReAAAvdMku2dY890.jpg

 2)、查询所有已经安装的包:

#rpm -qa
 按条件过滤:
 #rpm -qa | grep 'PATTERN'

wKiom1WWGGCSElrdAAAwIVzkUJ8399.jpg

 3)、查询包的描述信息:

#rpm -qi package_name

RPM程序包管理_第2张图片


 4)、查询某包安装生成了哪些文件:

#rpm -ql package_name


  (1)、查询某包安装生成了哪些配置文件:

#rpm -qc package_name

RPM程序包管理_第3张图片


  (2)、查询某包安装生成了哪些帮助文件:

#rpm -qd package_name

wKioL1WWGtWyMZ4ZAACF-f2Qip0855.jpg


  (3)、查询程序包的相关脚本:

#rpm -q --scripts package_name

   脚本有四类:

    preinstall:安装前脚本;

    postinstall:安装后脚本;

    preuninstall:卸载前脚本;

    postuninstall:年前后脚本;

RPM程序包管理_第4张图片


 5)、查询某文件是由哪个包安装生成的:

rpm -qf /path/to/some_file

wKiom1WWGhrCOEpJAAA9abPC53A565.jpg


 6)、对尚未安装的包执行查询:

#rpm [option] /path/to/package_file
 -qpi:描述信息;
 -qpl:安装生成哪些文件;
 -qpc:生成哪些配置文件;
 -qpd:生成哪些帮助文件;


5、校验:

 rpm包来源合法性及完整性检验:

  包制作者制作完成之后会附加数字签名于包上,可用来验证rpm包的来源合法性和包的完整性;包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特性码,附加原始数据后面;


 验正过程:

  前提:必须有可靠机制获取到包制作者的公钥;

   1)、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法;

   2)、使用与制作者同样的意向加密算法提取原始数据的特征码,并与解密出来的特征作比对,相同,则意味着完整性没问题;


导入:                           
#rpm --import /path/to/key_file

显示所有已经导入的gpg格式的公钥:
#rpm -qa gpg-pubkey*

显示密钥的详细信息:
#rpm -qi gpg-pubkey-NAME

 

 检查包:安装过程中会自动执行;

手动检查:
#rpm -K /path/to/package_file
#rpm --checksig /path/to/package_file
 
不检查包完整性:
#rpm -K --nodigest

不检查来源合法性:
#rpm -K �nosignature

 

检查程序包安装生成的文件属性是否发生变化:

#rpm -V package_name
 -V:若程序包发生变化显示以下信息;某属性无变化,显示为.
  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


6、数据库重建:

 如果rpm管理器无法正常使用,可以尝试重建数据库解决;

 数据库目录:/var/lib/rpm

 

  重建:

初始化:
#rpm --initdb
如果事先没有库,会新建一个;如果有,则不新建;

重建:
#rpm --rebuilddb
直接重建,覆盖原有的数据库


本文出自 “小马的学习记录” 博客,请务必保留此出处http://masachencer.blog.51cto.com/8683770/1670525

你可能感兴趣的:(linux,rmp,程序管理)