linux自学笔记——rpm程序包管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux自学笔记——rpm程序包管理相关的知识,希望对你有一定的参考价值。


 

 

         RPM是Redhat PackageManager(RPM程序包管理器)的缩写,这一文件格式名称虽然打上了Redhat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux、Suse以及Turbo Linux的分发版本也都有采用。RPM程序包管理器可分为安装、升级、卸载、查询、校验等五种功能,以下我们将会对这五种功能的相应的用法一一说明。

 

RPM程序包:

      源代码:name-VERSION.tar.gz    源代码由RPM自动编译安装;

           VERSION: major.minor.release     主版本号.次版本号.源代码的发行版本号

RPM包的命名格式:

      name-VERSION-release.arch.rpm

           VERSION: major.minor.release

           release.arch: RPM包的发型号,同时release还包含此包适用的os

                 release.os: 2.e17.i386.rpm

                 archetcture:i386,x64,ppc,noarch

           例如:源代码经RPM编译后将会变成如下的包名:

           redis-3.0.2.tar.gz -->redis-3.0.2-1.centos.x64.rpm

RPM包的依赖关系:

      X,Y,Z

           X--? Y,Z  (X依赖于Y,Z)即要想安装X包,必须首先安装Y,Z这两个程序包;

      当然,也有一些前端工具可以自动解决依赖关系:

      yum:rhel系列系统上rpm包管理器的前端工具;

      apt-get(apt-cache):deb包管理器的前段工具;

      zypper:suse的rpm管理器的前段工具;

      dnf:Fedora 22+系统上rpm包管理器的前端工具;

程序包管理器:

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

1.     程序包的组成清单(每个程序包都单独实现)

文件清单

安装或卸载时运行的脚本

2.     数据库(公共)

程序包的名称和版本;

依赖关系;

功能说明;

安装生成的各文件的文件路径及校验码信息;

获取程序包的途径:

(1)            系统发行版的光盘或官方的文件服务器(或镜像站点):

http://mirrors.aliyun.com;

http://mirrors.sohu.com;

http://mirrors.163.com;

(2)            项目的官方站点

(3)            第三方组织

(a)            EPEL

(b)           搜索引擎

http://pkgs.org;

http://rpmfind.net;

http://rpm.phone.net;

      建议:检查其合法性

           来源的合法性;

           程序包的完整性;

Centos系统上rpm命令管理程序包:

      安装、升级、卸载、查询和校验、数据库维护

      rpm命令:rpm - RPM Package Manager

                 rpm [OPTIONS] [PACKAGE_FILE]

           安装:-i,--install;

           升级:-U,--update;-F,--freshen;

           卸载:-e,--erase;

           查询:-q,--query;

           校验: -V,--verify;

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

 

      安装:rpm {-i|--install} [install-options]PACKAGE_FILE ...

           rpm –ivh PACKAGES_FILE …

           GENERAL OPTIONS:

                 -v:verbose,详细信息;

                 -vv:更详细的输出;

           [install-options]

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

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

                 --nodeps:忽略依赖关系,强烈不建议;

                 技术分享

                 --replacepkgs:重新安装

                 技术分享

           注意:rpm可以自带脚本:

                 四类:--noscripts

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

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

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

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

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

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

                       技术分享

      我们将通过以下实例对rpm的安装功能的用法进行具体说明:

1.     首先我们把虚拟机的centos6.6的光盘镜像挂载至本地/media/cdrom中,挂载为只读模式,切查看是否挂载成功;

 技术分享

2.     进入/media/cdrom/Packages目录,安装zsh-4.3.10-7.el6.x86_64.rpm;

技术分享

     

      查询:

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

           [select-options]

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

                 -a,--all:查询所有的已经安装过的包;

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

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

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

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

 

           [query-options]

                 --changelog:查询rpm包的changelog;

                 -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

                 -qpc PACKAGE_FILE

                 -qlf  FILE:查询指定的文件所在的安装包中文件分别被安装到哪个目录下;

                 技术分享

      升级:

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

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

                 -U:升级或安装;

                 -F:升级

           rpm -Uvh PACKAGE_FILE ...

           rpm -Fvh PACKAGE_FILE ...

                 --oldpackage:降级;

                 --force:强制升级;

           技术分享

           可以看出,rpm –U 选项既可以升级也可以安装,而-F选项只能升级。

      卸载:                    

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

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

                 --nodeps:忽略依赖关系

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

      校验:

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

 

           S file Size differs  #文件大小

           M Mode differs (includes permissionsand file type)  #模式

           5 digest (formerly MD5 sum) differs  #MD5校验码

           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           #性能

      例:

           技术分享

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

           来源合法性验证:

           完整性验证:

           获取并导入信任的包制作者的秘钥:

                 对于centos发行版来说:rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

           验正:

                 (1) 安装此组织签名的程序时,会自动执行验正;

                 (2) 手动验正:rpm -KPACKAGE_FILE

      数据库的重建:

           rpm管理器数据库路径:/var/lib/rpm/

           技术分享

                 查询操作:通过此处的数据库进行;

           获取帮助:

                 Centos6:man rpm

                 Centos7:man rpmdb

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

                 --initdb:初始化数据库,当前无任何数据库可初始化创建一个新的;当时有时不执行任何操作                --rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;

          


以上是关于linux自学笔记——rpm程序包管理的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记之rpm程序包管理功能解析

Linux程序包管理之rpm包管理

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

linux程序包管理之rpm程序包管理器与yum前端工具

Linux程序包管理之rpm

Linux系统程序包管理工具 RPM