首页 > 代码库 > RPM软件包管理器及使用

RPM软件包管理器及使用


一. RPM介绍及其组成:


1.)RPM包简介:

rpm分为源码包,二进制包,Delta包三种。源码包将由rpm自动编译,安装。


2.)Linux中的包管理器:

dpkg:  debian发行版本的包管理器。

rpm:redhat发行版的包管理器。



3.)程序包组成部分:

二进制程序:

/bin /sbin, /usr/bin /usr/sbin, /usr/local/bin

有些特殊程序放在/libexec目录中。

有些默认安装在/opt目录下。

库文件(开发库,运行库):

/lib64, /usr/lib64

配置文件:

/etc

帮助文件:

/usr/share/man

帮助文件:手册man,信息页info。


4.)RPM程序包管理器:

数据库:

程序名及版本号。

软件包依赖关系。

软件包功能说明。

安装生成的各文件路径校验码。

程序组成清单:

文件清单。

安装卸载时运行的脚本。


二.RPM使用操作:


1.)RPM安装软件包命令。

*安装过程中会多次显示waring key等信息,在后面会说密钥校验来解决。这里暂时忽略。

-i: 安装程序包。
    # rpm -i zsh-4.3.10-7.el6.x86_64.rpm 
    warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de:     NOKEY

-v: 安装时显示详细信息。
    # rpm -iv zsh-4.3.10-7.el6.x86_64.rpm 
    Preparing packages for installation...
    zsh-4.3.10-7.el6
    
-vv: 比v更加详细的信息。
    # rpm -ivv zsh-4.3.10-7.el6.x86_64.rpm 
    D: ============== zsh-4.3.10-7.el6.x86_64.rpm
    D: loading keyring from pubkeys in /var/lib/rpm/pubkeys/*.key
    D: couldn‘t find any keys in /var/lib/rpm/pubkeys/*.key
    D: loading keyring from rpmdb
    D: opening  db environment /var/lib/rpm cdb:mpool:joinenv
    D: opening  db index       /var/lib/rpm/Packages rdonly mode=0x0
    D: locked   db index       /var/lib/rpm/Packages
    D: opening  db index       /var/lib/rpm/Name rdonly mode=0x0
    
-h:安装时以#号显示安装进度条,每个#号代表2%的进度。
    # rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm 
    Preparing...                ########################################### [100%]
    1:zsh                       ########################################### [100%]
       
--test:测试能否安装。
    # rpm -ivh --test zsh-4.3.10-7.el6.x86_64.rpm 
    Preparing...                ########################################### [100%]
用rpm -q 查看这个包是没有安装的,--test的效果出来了。
    # rpm -q zsh
    package zsh is not installed
    
--nodeps: 忽略依赖关系。
    # rpm -ivh php-dba-5.3.3-26.el6.x86_64.rpm 
    error: Failed dependencies:
    php-common(x86-64) = 5.3.3-26.el6 is needed by php-dba-5.3.3-26.el6.x86_64

上面的正常安装是没有安装上,显示需要依赖php-common的包,下面的就是忽略依赖关系。不建议这么安装,即使安装上,很可能也用不了。
    # rpm -ivh --nodeps php-dba-5.3.3-26.el6.x86_64.rpm 
    Preparing...                ########################################### [100%]
    1:php-dba                   ########################################### [100%]
    # rpm -q php-dba
    php-dba-5.3.3-26.el6.x86_64


--replacepkgs: 重新安装,重新安装时原配置文件做过修改,可能不会执行替换,而只是把修改的配置文件重命名为.rpmnew的文件。
    还是使用zsh这个包。
    #rpm -qc zsh
    /etc/skel/.zshrc
    ...
    
修改下配置文件,在最后一行加入一个#hello word!
    # rpm -ivh --replacepkgs  zsh-4.3.10-7.el6.x86_64.rpm 
    Preparing...                ########################################### [100%]
    1:zsh                       ########################################### [100%]
这个时候没有给原来的配置文件重命名,还是使用原来的配置文件,里面最后一行还是hello woed。


2.)RPM卸载软件包命令。

-e:卸载rpm包。
在卸载的时候提示我有一个配置文件修改过然后给重命名保存了。
    # rpm -e zsh
    warning: /etc/skel/.zshrc saved as /etc/skel/.zshrc.rpmsave
    # rpm -q zsh
    package zsh is not installed


3.)升级软件包命令。

-U:升级或安装。
    # rpm -U zsh-4.3.10-7.el6.x86_64.rpm 
    warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de:     NOKEY
    package zsh-4.3.10-7.el6.x86_64 is already installed
由于没有更(gèng)新的安装包,下面两步就跳过了。
-F:直接升级。
--force:强制安装,升级。


4.)RPM查询操作命令。

-q: 检查软件包是否安装。
    # rpm -q zsh
    zsh-4.3.10-7.el6.x86_64
    
-ap: 查询所有安装的软件包。
    # rpm -qa | more
    system-config-firewall-base-1.2.27-5.el6.noarch
    tcp_wrappers-7.6-57.el6.x86_64
    sinjdoc-0.5-9.1.el6.x86_64
    gtksourceview2-2.8.2-4.el6.x86_64
    dejavu-fonts-common-2.30-2.el6.noarch
    ...
    
-qi: 查询软件包的安装信息。
    # rpm -qi zsh
    Name        : zsh                          Relocations: (not relocatable)
    Version     : 4.3.10                            Vendor: CentOS
    Release     : 7.el6                         Build Date: Mon 25 Nov 2013 01:40:59 AM C
    Install Date: Sun 20 Jul 2014 11:01:39 AM CST      Build Host: c6b9.bsys.dev.centos.o
    Group       : System Environment/Shells     Source RPM: zsh-4.3.10-7.el6.src.rpm
    Size        : 5009102                          License: BSD
    Signature   : RSA/SHA1, Mon 25 Nov 2013 03:33:46 AM CST, Key ID 0946fca2c105b9de
    Packager    : CentOS BuildSystem <
     
-ql: 查询安装软件包生成的文件。
    # rpm -ql zsh | more 
    /bin/zsh
    /etc/skel/.zshrc
    /etc/zlogin
    /etc/zlogout
    /etc/zprofile
    /etc/zshenv
    /etc/zshrc
    /usr/lib64/zsh
    /usr/lib64/zsh/4.3.10
    
-qc: 查询安装软件包生成的配置文件。
    # rpm -qc zsh
    /etc/skel/.zshrc
    /etc/zlogin
    /etc/zlogout
    /etc/zprofile
    /etc/zshenv
    /etc/zshrc
    
-qd: 查询安装软件包生成的帮助文件。
    # rpm -qd zsh | more
    /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
    /usr/share/doc/zsh-4.3.10/NEWS
    
-q --scriptes: 查询软件包的相关脚本。
脚本有四类:
    安装前脚本。
    安装后脚本。
    卸载前脚本。
    卸载后脚本。
    # 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
    if [ -f /usr/share/info/zsh.info.gz ]; then
    # This is needed so that --excludedocs works.
    ...
    
-qf: 查询某文件是由哪个软件包产生的。
     # rpm -qf /etc/zshenv 
     zsh-4.3.10-7.el6.x86_64
     
-qp: 对尚未安装的软件包执行查询。
    # rpm -qp zsh-4.3.10-7.el6.x86_64.rpm  
    zsh-4.3.10-7.el6.x86_64


5.)软件包来源合法性,完整性校验。

rpm --import key
这个时候在也没有warning的提示了。
    # rpm --import /media/RPM-GPG-KEY-CentOS-6 
    # rpm -qp zsh-4.3.10-7.el6.x86_64.rpm 
    zsh-4.3.10-7.el6.x86_64
    
显示已经导入的公钥:
rpm -qa gpg-pubkey*
    # rpm -qa gpg-pubkey*
    gpg-pubkey-c105b9de-4e0fd3a3
    
rpm -qi gpg-pubkey-name
    # rpm -qi gpg-pubkey-c105b9de-4e0fd3a3
    Name        : gpg-pubkey                   Relocations: (not relocatable)
    Version     : c105b9de                          Vendor: (none)
    Release     : 4e0fd3a3                      Build Date: Sun 20 Jul 2014 11:13:27 AM C
    Install Date: Sun 20 Jul 2014 11:13:27 AM CST      Build Host: localhost
    Group       : Public Keys                   Source RPM: (none)
    Size        : 0                                License: pubkey
    Signature   : (none)
    Summary     : gpg(CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.o
    Description :
    ...


三.RPM软件包数据库。

rpm数据库重建:

rpm数据库目录:/var/lib/rpm
重建:
rpm --initdb:初始化,如果没有数据库,会新建一个,如果有,就不创建。
rpm --rebuilddb: 直接重建,覆盖原有数据库。
        # cd /var/lib/rpm
        #tar czvf rpm-db.tgz ./__db00* 
        #rpm --rebuilddb
        
在网上找了下rpm数据库的报错信息:
    warning: waiting for transaction lock on /var/lib/rpm/__db.000
    error: can‘t create transaction lock on /var/lib/rpm/__db.000
这时候他们的解决办法就是重建数据库。


总结:

在使用卸载及查询的时候,不要跟软件包的全名,而是取版本号之前的字母进行操作。

如果真的需要重建rpm数据库的时候,需要先备份在重建。

在安装rpm软件包时,如果需要安装依赖包,要耐心的一个个安装,或者使用yum安装。最好不要使用强制安装或者忽略依赖关系安装,即使安装成功,也可能导致软件包不能运行。

关于第三方软件包的安装,最好验证软件包的合法性。去可靠的站点下载。




RPM软件包管理器及使用