RPM(Redhat Package Manager)的缩写,本意为:Red Hat 软件包管理,目前已经成为Linux工业标准。现在OpenLinux/SUSE/等分发版本的linux都有采用。


RPM包里面都包含什么?

        里面包含可执行的二进制程序,这个程序和windows的软件包中的.exe文件类似是可执行的;

        RPM包中还包括程序运行时所需要的文件,这也是和windows的软件包类似;




包管理器的功能:

    打包、安装、卸载、升级、校验、数据库管理等




包的前端工具:

    dpkg --> apt-get (ubuntu)

    rpm -->yum(增强型前端工具),yum(Yellow Dog)



RPM包管理的用途:

1、可以安装、删除、升级和管理软件;当然也支持在线安装和升级软件;

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

3、可以在查询系统中的软件包是否安装以及其版本;

4、作为开发者可以把自己的程序打包为RPM包发布;

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

6、依赖性检查,查看是否有软件包由于不兼容而扰乱了系统;



RPM包的使用权限:

RPM软件的安装、删除、更新只有root权限才能使用;对于查询功能任何用户都可以进行操作;如果普通用户拥有安装目录的权限,也可以进行安装等操作;




RPM包的命名格式:

name-version-relase.arch.rpm

name:软件包名称

verion:带有主,次和修订的软件包版本

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

arch:适用于的硬件平台

    x86:i386,i486,i586,i686等;

    x86_64:x86_64

    powerpc:ppc

    noarch:依赖于虚拟机

例如:bash-4.2.3-3.centos5.x86_64.rpm




RPM分包机制:

核心包:包含程序最常用的功能

httpd-2.2.15-39.el6.centos.x86_64.rpm

开发包:包含开发所需要的库模块

httpd-devel-2.2.15-39.el6.centos.x86_64.rpm

帮助文档:

httpd-manual-2.2.15-39.el6.centos.noarch.rpm

工具包:

httpd-tools-2.2.15-39.el6.centos.x86_64.rpm




RPM命令参数:

    -e   卸载rpm包

    -q   查询已安装的软件信息

    -i    安装rpm包

    -u   升级rpm包

    -c   显示所有配置文件

    -d   显示所有文档文件

    -h   显示安装进度

    -l    列出软件包中的文件

    -a   显示出文件状态

    -p   查询/校验一个软件包文件

    -v   显示详细的处理信息

    --replacepkgs       重新安装rpm包

    --justdb                升级数据库,不修改文件系统

    --percent              在软件包安装时输出百分比

    --version              显示版本信息

    --dump                显示基本文件信息

    --nomd5             不验证文件的md5支持

    --nofiles              不验证软件包中的文件

    --whatrequire      查询/验证需要的一个依赖性的软件包

    --whatprovides    查询/验证提供一个依赖性的软件包

    --test                   仅做测试,不真正意义上的安装




RPM安装程序包:

    rpm -i zsh-4.3.10-7.el6.x86_64.rpm

常用组合选项:-ivh 

     # rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm 

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

        1:zsh                    ########################################### [100%]


如果依赖于其它包:

    1、解决依赖关系

    2、忽略依赖关系

            能安装上,但有可能无法运行;

            --nodeps     



卸载程序包:

      #rpm -e zsh #只需哟包名,不需要版本号

如果被其它包所依赖:

    1、将依赖于此包的所有包一并卸载

    2、忽略依赖关系

            能卸载,但依赖于此包程序包可能会运行不正常;

            --nodeps

如果包的配置文件安装后曾经被改动过,卸载的时候,此文件将不会卸载,而是被重命名并保留,例如

 warning: /etc/zprofile saved as /etc/zprofile.rpmsave



升级程序包:

新版本替换老版本

rpm [option] /path/to/package_file

    1、升级或安装

            -Uvh

    2、纯升级

            -Fvh

    3、--force:强制升级

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




查询操作:

1、查询某包是否安装

    rpm  -q

    # rpm -q zsh

       zsh-4.3.10-7.el6.x86_64


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

  rpm -qa

  # rpm -qa

    mozilla-filesystem-1.9-5.1.el6.x86_64

    openssh-server-5.3p1-104.el6_6.1.x86_64

    basesystem-10.0-4.el6.noarch

    glib-networking-2.28.6.1-2.2.el6.x86_64

    createrepo-0.9.9-18.el6.noarch

    ............


3、查询包的描述信息

    rpm -qi package_name

   # rpm -qi zsh

    Name        : zsh                          Relocations: (not relocatable)

    Version     : 4.3.10                            Vendor: CentOS

    Release     : 7.el6                         Build Date: Mon Nov 25 01:40:59 2013

    Install Date: Mon Jan 19 22:32:22 2015         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, Mon Nov 25 03:33:46 2013, 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.


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

     rpm -ql package_name

    # rpm -ql zsh

    /bin/zsh

    /etc/skel/.zshrc

    /etc/zlogin

    /etc/zlogout

    /etc/zprofile

    ...........


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

    rpm -qc package_name     

    # rpm -qc zsh

    /etc/skel/.zshrc

    /etc/zlogin

    /etc/zlogout

    /etc/zprofile

    /etc/zshenv

    /etc/zshrc

    

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

    rpm -qd package_name   

    # rpm -qd zsh

    /usr/share/doc/zsh-4.3.10/BUGS

    /usr/share/doc/zsh-4.3.10/CONTRIBUTORS

    /usr/share/doc/zsh-4.3.10/FAQ

    /usr/share/doc/zsh-4.3.10/FEATURES

    /usr/share/doc/zsh-4.3.10/LICENCE

    /usr/share/doc/zsh-4.3.10/MACHINES

    ...........


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

    rpm -q --scripts package_name   

    # rpm -q --scripts zsh

    postinstall scriptlet (using /bin/sh):

    if [ ! -f /etc/shells ] ; then

        echo "/bin/zsh" > /etc/shells

    else

        grep -q "^/bin/zsh$" /etc/shells || echo "/bin/zsh" >> /etc/shells

    fi

    ...........


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

    rpm -qf /path/to/some_file   

    校验:

        用于检查包安装生成的文件属性是否发生变化

    rpm -V package_name

            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

    

        某属性无变化,显示为(空)


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


前提:在当前系统上导入包的制作者的公钥

   导入:

    rpm --import /path/to/key_file


    # rpm -qa gpg-pubkey*

    显示所有已经导入的gpg格式的公钥


    # rpm -qi gpg-pubkey-NAME

    显示密钥的详细信息


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


    手动检查:

    rpm -K /path/to/package_file

    rpm --checksig /path/to/package_file


     不检查包完整性:

    rpm -K --nodigest

     不检查来源合法性:

    rpm -K --nosignature


数据库重建:

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


重建:

rpm --initdb:初始化

如果事先没有库,会新建一个;如果有,则不新建;


rpm --rebuilddb: 重建

直接重建,覆盖原有的数据库