RPM程序包管理以及yum的应用

在早期我们使用源代码的方式来安装软件时,都需要先把源程序代码编译成可执行的二进制安装程序,然后进行安装。这就意味着每次安装软件都需要经过预处理-->编译-->汇编-->链接-->生成安装文件--> 安装,这个复杂而艰辛的过程。为简化安装步骤,便于广大用户的安装部署程序,程序提供商就在特定的系统上面编译好相关程序的安装文件并进行打包,提供给大家下载,我们只需要根据自己的系统去下载相应的安装包进行安装即可,其类似 Windows 的安装方式,由程序开发者直接在已知的系统上面编译好,再将该程序直接给用户来安装,如此而已。但是,程序包该怎么管理呢,这就是我们程序包管理器的事啦!

什么是程序包管理器
    用于管理Linux 下软件包的软件,其主要功能为:将编译好的程序打包成一个文件或有限的几个文件,可用于实现安装、卸载、升级、查询等功能。
程序包管理器的两大主流
    dpkg:最早是由 Debian Linux 社群所开发出来的, 只要是衍生亍 Debian 的其他 Linux distributions 大多使用 dpkg 这个机制来管理软件的, 包括B2D, Ubuntu 等等,其前端工具有apt-get。
    RPM:最早是由Red Hat这家公司开发出来的,后来实在太好用,因此很多distributions 就使用其来作为软件安装的管理方式。包括 Fedora, CentOS, SUSE 等等,其前端工具有yum。

程序包的组成格式与存放路径:
    1、二进制程序
        主要存放的路径:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin, /usr/local/APP/{bin,sbin}
        注意:有些特殊的应用程序放置于libexec目录中;有些第三方应用默认安装于/opt目录。
    2、库文件(开发库、运行库)
      主要存放的路径:/lib64, /usr/lib64, /usr/local/lib64, /usr/local/APP/lib
    3、配置文件
      主要存放的路径:/etc, /usr/local/APP/etc或conf目录
    4、帮助文件
      主要存放的路径:/usr/share/man, /usr/local/share/man, /usr/local/APP/man

RPM程序包管理器使用详解
    RPM包的命名格式:

     但对于一个程序来说,其可能具有很多功能,其中有些是常用功能,有些是特殊功能,有些是二次开发相关的功能,如果把所有的功能打包在一块,无疑程序包会增大很多,对一些普通用户无需使用的功能都需一并下载安装,无形间就造成了资源的浪费,特此在对程序包的打包就衍生出了分包机制,一般把程序分包成主包与子包。例如一个bash程序有20个功能:常用功能有10个,特殊A:4个,特殊B:3个,二次开发相关功能:3个,那么包的命名方式如下:
     核心包,主包:命名与源程序一致
           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

CentOS系统上rpm命令管理程序包:
   安装、卸载、升级、查询、校验、数据库维护

安装:
       rpm {-i|--install} [install-options] PACKAGE_FILE ...
            -v: verbose
            -vv: 显示更多信息
            -h: 以#显示程序包管理执行进度;每个#表示2%的进度

rpm -ivh PACKAGE_FILE ...

[install-options]
           --test: 测试安装,但不真正执行安装过程;dry run模式;
          --nodeps:忽略依赖关系;
      --replacepkgs: 重新安装;
      --nosignature: 不检查来源合法性;
        --nodigest:不检查包完整性;
        --noscipts:不执行程序包脚本片断;
           %pre: 安装前脚本; --nopre
           %post: 安装后脚本; --nopost
          %preun: 卸载前脚本; --nopreun
         %postun: 卸载后脚本;  --nopostun

在没有网络的前提下,你想要安装一个名为 pam-devel 的软件,你手边只有原版光盘你可以透过挂载原版光盘来进行数据的查询与安装。请将原版光盘放入光驱,底下我们尝试将光盘挂载到 /media 当中, 并据以处理软件的下载罗:

  • 挂载光盘,使用: mount /dev/cdrom /media/cdrom
  • 找出文件的实际路径:find /media -name ‘pam-devel*‘
  • 测试此软件是否具有相依性: rpm -ivh pam-devel... --test
  • 直接安装: rpm -ivh pam-devel...
  • 卸载光盘: umount /dev/cdrom

[[email protected] Packages]# rpm -ivh   python-netaddr-0.7.5-4.el6.noarch.rpm

warning: python-netaddr-0.7.5-4.el6.noarch.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY

Preparing...

########################################### [100%]

package python-netaddr-0.7.5-4.el6.noarch is already installed

[注意]:该命令后面接的是RPM包文件,可以用空格做分割同时安装多个程序,如电脑可以上网的话,也可以直接指定网络上的RPM包,进行安装。

升级:
        rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... upgrage:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”;

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...  freeshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作;                           rpm -Uvh PACKAGE_FILE ...

     rpm -Fvh PACKAGE_FILE ...
               --oldpackage:降级;
               --force: 强行升级;

注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核;
            (2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;

查询:

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

[select-options]
               -a: 所有包
               -f: 查看指定的文件由哪个程序包安装生成
               -p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作;
               --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供;
               --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;

  [query-options]
               --changelog:查询rpm包的changlog
               -c: 查询程序的配置文件
               -d: 查询程序的文档
               -i: information
               -l: 查看指定的程序包安装后生成的所有文件;
               --scripts:程序包自带的脚本片断
               -R: 查询指定的程序包所依赖的CAPABILITY;
               --provides: 列出指定程序包所提供的CAPABILITY;

组合的 用法:
              -qi PACKAGE:列出该软件的详细信息,包括开发商,版本与说明

-qf FILE:由后面接的文件名称,找出该文件属于哪一个已经安装的软件

-qc PACKAGE:列出该软件的所有配置文档

-ql PACKAGE:查看指定的程序包安装后生成的所有文件;

-qd PACKAGE:列出该软件的所有说明档
              -qpi PACKAGE_FILE:未安装包的描述信息

-qpl PACKAGE_FILE:包安装生成的文本
              -qa:列出所有的已经安装的软件

-qR:列出与该软件有关的被需要的其他文件

-qpc:包安装会生成的配置文件

-qpd:包安装会生成的帮助文件


[[email protected] Packages]# rpm -qi zsh

Name        : zsh                          Relocations: (not relocatable)

Version     : 4.3.10                            Vendor: CentOS

Release     : 7.el6                         Build Date: 2013年11月25日 星期一 01时40分59秒

Install Date: 2015年08月31日 星期一 04时35分11秒      Build Host: c6b9.bsys.dev.centos.org

Group       : System Environment/Shells     Source RPM: zsh-4.3.10-7.el6.src.rpm

Size        : 5009102                          License: BSD

Signature   : RSA/SHA1, 2013年11月25日 星期一 03时33分46秒, Key ID 0946fca2c105b9de

Packager    : CentOS BuildSystem <http://bugs.centos.org>

URL         : http://zsh.sunsite.dk/

Summary     : A powerful interactive shell

Description :

The zsh shell is a command interpreter usable as an interactive login

shell and as a shell script command processor.  Zsh resembles the ksh

shell (the Korn shell), but includes many enhancements.  Zsh supports

command line editing, built-in spelling correction, programmable

command completion, shell functions (with autoloading), a history

mechanism, and more.


[[email protected] bin]# rpm -qf /bin/cat

coreutils-8.4-37.el6.x86_64   ###被查询文件的安装包

[[email protected] bin]# rpm -qc coreutils-8.4-37.el6.x86_64

/etc/DIR_COLORS

/etc/DIR_COLORS.256color

/etc/DIR_COLORS.lightbgcolor

/etc/pam.d/runuser

/etc/pam.d/runuser-l

/etc/pam.d/su

/etc/pam.d/su-l

/etc/profile.d/colorls.csh

/etc/profile.d/colorls.sh   ###/etc/*都是以安装软件包的配置文档

[[email protected] bin]#

卸载:
          rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
           [--notriggers] [--test] PACKAGE_NAME ...

校验:
         rpm {-V|--verify} [select-options] [verify-options]
                                    -V :后面加的是程序名称,若该程序属有的文件发生改变就会显示;
                    -Va :显示目前系统上面所有可能被修改过的文件;
                    -Vp :后面加的是文件名,显示该程序内可能被更改过的文件;
                    -Vf :后面加的是文件名,显示某个文件是否被修改过。           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 caP abilities differ:包的能力发生改变

例如:


[[email protected] ~]# rpm -V zsh

S.5....T.    /usr/share/zsh/4.3.10/scripts/newuser

[[email protected] ~]#

RPM包的校验主要有来源合法性验证包的完整性验证
    数字签名:包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特性码,附加原始数据后面。
    验正过程:
        前提:必须有可靠机制获取到包制作者的公钥;
        1、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法;
        2、使用与制作者同样的意向加密算法提取原始数据的特征码,并与解密出来的特征作比对,相同,则意味着完整性没问题;
rpm包来源合法性及完整性检验:
            在当前系统上导入包的制作者的公钥:
                rpm --import /path/to/key_file
          显示所有已经导入的gpg格式的公钥:


[[email protected] Packages]# rpm -ivh zip-3.0-1.el6.x86_64.rpm

Preparing...                ########################################### [100%]

package zip-3.0-1.el6.x86_64 is already installed

[[email protected] Packages]#

从上面的执行结果中可以看到,导入公钥后就没有警告了

【注意】安装过程中会自动用已经导入的的公钥,对程序包进行检验,一般无需进行手动校验。

手动检查:
          rpm {-K|--checksig} [--nosignature] [--nodigest] PACKAGE_FILE 
              选项说明:
                    -K :等同于 --checksig ,进行检查并显示结果;
                    --nodigest:不检查包完整性;
                    --nosignature:不检查来源合法性。

数据库重建:
      rpm {--initdb|--rebuilddb}
        initdb: 初始化
           如果事先不存在数据库,则新建之;否则,不执行任何操作;
        rebuilddb:重建
           无论当前存在与否,直接重新创建数据库;

时间: 2024-10-10 14:16:09

RPM程序包管理以及yum的应用的相关文章

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

这里主要讲以CentOS为例,rpm程序包管理器的相关内容: CentOS的程序包管理器:   1) 程序包的命名规则:        源代码包:            software_name-VERSION.tar.gz            VERSION:major.minor.release                major:主版本号,通常代表重大功能改进的版本分支:                minor:次版本号,通常代表在某个版本的分支中的某个功能发生变化:     

Linux学习笔记——程序包管理之yum

YUM yum 是rpm程序包管理器的前段管理器.yum 主要功能是更方便的添加/删除/更新RPM 包,自动解决包的倚赖性问题,便于管理大量系统的更新问题. yum 的操作是基于yum 仓库进行的 yum repository: yum repo  yum仓库 存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata): 文件服务器: ftp:// http:// nfs:// file:/// yum 的配置 配置文件 /etc/yum.conf:为所有仓库提供公共配置

Linux学习笔记:rpm程序包管理

以CentOS为例,rpm程序包管理器的相关内容如下: CentOS的程序包管理器:    程序包的命名规则:        源代码包:            software_name-VERSION.tar.gz            VERSION:major.minor.release                major:主版本号,通常代表重大功能改进的版本分支:                minor:次版本号,通常代表在某个版本的分支中的某个功能发生变化:          

程序包管理之yum的用法

程序包管理之yum的用法: yum(全称为 Yellow dog Update Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器. 工作机制: 基于RPM包管理,能够从配置文件中指定服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次性安装所有依赖的程序包,无须繁琐地一次次下载.安装. 当yum接收到用户的安装指令后,yum将会通过读取配置文件中的信息并从指定的远程服务器上下载该程序包,并会分析该程序包的依赖关系并同时下载改程序包所依赖的

RPM程序包管理

RPM的全名"RedHat Package Manager",当初这个是RedHad公司开发的一款程序包管理套件,随着RPM的不断完善,RPM逐渐成为众多linux发行版程序包管理器的代名词,那什么是RPM,为什么会用到RPM这个程序包管理工具那,接下来我一一揭晓. RPM是以一种数据库记录的方式将所需要的软件安装到linux主机的一套管理程序,最大的特点就是将需要的软件先编译并打包,通过包装好的套件中默认的数据库记录,来记录这个套件在安装的时候需要依赖的属性模块.知道是RPM是什么,

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

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

RPM 程序包管理详解

CentOS系统上rpm命令管理程序包 一.rpm程序包管理分为安装.升级.卸载.查询和校验.数据库维护 rpm程序包的安装 rpm命令后加的选项参数有: rpm -ivh ,程序包的安装工作,后面直接接要安装的程序包名称;例如: [[email protected] Packages]# rpm -ivh zsh-5.0.2-14.el7.x86_64.rpm  准备中...                          #################################

Linux系统管理-(8)-RPM程序包管理器

Centos下RPM程序包管理器:     安装:     rpm {-i|--install} [install-options] PACKAGE_FILE ...            -v: 显示过程            -vv:  显示更详细的过程            -h: 以#显示程序包管理执行进度:每个#表示2%的进度          其他选项: --test 测试安装 --nodeps:忽略依赖关系:                    --replacepkgs: 重新

Linux程序包管理及yum安装管理

Linux程序包管理: API:ApplicationProgramming Interface   应用编程接口 POSIX:Portable OS    遵循本协议的程序均可在不同系统间移植 程序编写完成后,执行所要经过的处理步骤: 程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接 静态编译: 共享编译:直接调用.so共享对象实现 ABI:ApplicationBinary Interface  应用二进制接口 Windows与Linux所支持的可执行二进制