Linux之RPM

一、前言

二、软件包及软件包管理工具

三、安装程序的方式

四、rpm命令及常用选项

五、其他

 

一、前言

 

主流发行版的软件包管理工具

Debian:dpt(debian package tools), ----->为了解决程序复杂的文件依赖关系,建立在dpt基础上,开发了依赖于dpt的前端工具apt-get

RedHat:rpm,早期为Redhat Package Manager,后来做为Linux软件包管理工业标准,为RPM is Package Manager;受debian的apt-get启发,RedHat开发了基于rpm的前端管理工具----->yum(Yellowdog Updater Modified)

 

二、软件包及软件包管理工具

 

    1. Linux软件包的组成部分:

        二进制程序安装路径:/bin, /sbin | /usr/bin, /usr/sbin | /usr/local/bin, /usr/local/sbin   

        库文件安装路径:/lib, /usr/lib, /usr/local/lib    #库文件也是可执行程序,但是其本身不能单独执行

        配置文件安装路径:/etc

        帮助文件安装路径: /usr/share/doc, /usr/share/man    #路劲中有man手册,README,INSTALL;man的配置文件/etc/man .config,可定义默认搜索路径

 

    2.rpm包名含义

        bash-4.1.2-15.el6_4.x86_64

        bash:程序名

        4.1.2:4为主版本号,1是次版本号,2是发行号

        15.el6:rpm包的发行号

        el6:适用的操作系统;el6为Red Hat Enterprise Linux,rehl6的缩写

        x86_64:适用的cpu架构

        注:程序有时不止一个安装包,由主包和分包组成,rpm主包命名遵循上述格式如bind-9.8.2-0.17.rc1.el6.x86_64.rpm,分包命名时则类似bind-chroot-9.8.2-0.17.rc1.el6.x86_64.rpm,

 

    3.软件包管理工具的功能:打包、安装、查询、升级、卸载、校验、数据库管理(重建)

        其中rpm程序的打包过程是根据spec文件来完成的

 

    4.软件包管理工具打包程序的管理规则:

        (1).提供文件清单

        (2).提供文件安装路径

        (3).提供程序功能说明

        (4).提供文件依赖关系

    以上规则的遵循,为程序的部署安装提供了极大的便利

 

三、安装程序的方式

   

    1.通用二进制文件

    2.软件包管理器,例如rpm

    3.软件包管理器的前端工具,例如yum

    4.源代码编译安

 

四、rpm命令及常用选项

 

rpm

    -i或--install:安装

    -v:显示详细信息;-vv,-vvv,v越多,表示详细级别越高,越来越详细

    -h:以井号显示安装进度,一个井号表示2%

    -l或--list:

    -d或--docfiles:

  

1.安装

常用安装选项组合:rpm -ivh packages_name    #以下的packages_name都表示rpm安装包

忽略依赖关系安装:rpm -ivh packages_name --nodeps    #安装、卸载程序时都可以使用--nodeps忽略依赖关系

测试安装:rpm -ivh packages_name --test

重新安装:rpm -ivh packages_name --replacepkgs

有时安装程序时有警告信息

warning: /etc/sysconfig/named created as /etc/sysconfig/named.rpmnew

此前可能已经有同样名字的配置文件,文件也是我们需要的,这时这种机制的存在则会创建一个新的配置文件而不覆盖设定好的配置文件

 

2.卸载rpm -e packages_name

 

卸载时,可能产生警告

warning: /etc/sysconfig/named saved as /etc/sysconfig/named.rpmsave

这是由于我们修改过程序的配置文件,这种机制的存在让我们卸载程序时保留了我们可能已经设定好的配置文件

 

3.查询rpm -q packages_name 或者 rpm --quare packages_name

[root@TESTHOST ~]# rpm -q apache
package apache is not installed    #显示未安装
[root@TESTHOST ~]# rpm -q bash
bash-4.1.2-15.el6_4.x86_64    #显示程序版本等信息

              rpm -qa    查询所有已安装的包

[root@TESTHOST ~]# rpm -qa | grep "^bas"    #支持grep,但不支持globbing
basesystem-10.0-4.el6.noarch
bash-4.1.2-15.el6_4.x86_64
[root@TESTHOST ~]# rpm -qa | grep "^bin"
binutils-2.20.51.0.2-5.42.el6.x86_64
[root@TESTHOST ~]#

              rpm -qi packages_name    查询软件包摘要信息    #此处的i亦可为--info

[root@TESTHOST ~]# rpm -qi bash
Name        : bash                         Relocations: (not relocatable)
Version     : 4.1.2                             Vendor: CentOS
Release     : 15.el6_4                      Build Date: 2013年07月18日 星期四 21时21分24秒
Install Date: 2015年04月10日 星期五 04时49分29秒      Build Host: c6b10.bsys.dev.centos.org
Group       : System Environment/Shells     Source RPM: bash-4.1.2-15.el6_4.src.rpm
Size        : 3139291                          License: GPLv3+
Signature   : RSA/SHA1, 2013年07月18日 星期四 21时46分10秒, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://www.gnu.org/software/bash
Summary     : The GNU Bourne Again shell
Description :
The GNU Bourne Again shell (Bash) is a shell or command language
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C shell
(csh). Most sh scripts can be run by bash without modification.

 

查询包安装生成的文件清单:rpm -ql packages_name

查询某文件是由哪个rpm安装生成的:rpm -qf /path/to/some_file

查询包安装生成的配置文件:rpm -qc packages_name

查询包安装生成的帮助文档 :rpm -qd packages_name

 

-------------------------------------------------------------

查询包相关的脚本:rpm –q --scripts packages_name

[root@TESTHOST ~]# rpm -q --scripts bash
postinstall scriptlet (using <lua>):
bashfound = false;
shfound = false;
 
f = io.open("/etc/shells", "r");
if f == nil
then
  f = io.open("/etc/shells", "w");
else
  repeat
    t = f:read();
    if t == "/bin/bash"
    then
      bashfound = true;
    end
    if t == "/bin/sh"
    then
      shfound = true;
    end
  until t == nil;
end
f:close()
 
f = io.open("/etc/shells", "a");
if not bashfound
then
  f:write("/bin/bash\n")
end
if not shfound
then
  f:write("/bin/sh\n")
end
f:close()
postuninstall scriptlet (using /bin/sh):
if [ "$1" = 0 ]; then
    /bin/grep -v ‘^/bin/bash$‘ < /etc/shells |       /bin/grep -v ‘^/bin/sh$‘ > /etc/shells.new
    /bin/mv /etc/shells.new /etc/shells
fi

以上脚本信息中关键词意思如下

preinstall:安装前脚本

postinstall:安装后脚本

preuninstall:卸载前脚本

postuninstall:卸载后脚本

-------------------------------------------------------------

查询尚未安装的包的相关信息:

rpm -qpi /path/to/rpm_file

 

4.升级

    -U:升级+安装,常用-Uvh

    -F:升级,常用-Fvh,与Uvh不同的是,如果不存在早期版本,程序将不会安装

    rpm -Uvh packages_name

    rpm -Fvh packages_name

强行升级、安装时可加如下选项   

    --force 强行升级

    --nodeps    忽略依赖关系

注意:内核不应该升级,应该尽可能安装,它允许多版本并存

 

5.校验rpm -V packages_name    或者--verify

[root@TESTHOST ~]# rpm -V zsh    #程序相关文件未修改时,执行命令后没有任何提示
[root@TESTHOST ~]# vim /etc/zlogin    #修改文件
[root@TESTHOST ~]# rpm -V zsh
S.5....T.  c /etc/zlogin    #执行命令后,出现相关提示信息,提示程序被改变过

提示信息能提示管理员,程序被改变的一些相关信息

      S file Size differs:文件大小改变  
      M Mode differs (includes permissions and file type):权限改变  
      5 digest (formerly MD5 sum) differs:MD5码改变  
      D Device major/minor number mismatch:设备的主次号改变  
      L readLink(2) path mismatch:readlink路径不匹配  
      U User ownership differs:属主改变  
      G Group ownership differs:属组改变  
      T mTime differs:最近一次的修改时间改变  
      P caPabilities differ:能力改变

 

6.rpm数据库重建

    --initdb:新建,旧档不会被覆盖

    --rebuilddb:重建,旧档不会保存    #此选项常用

[root@TESTHOST ~]# rpm --rebuilddb

rpm包的数据库文件路径:/var/lib/rpm/

 

五、其他

rpm –K zsh-4.3.10-5.el6.x86_64.rpm    #检测来源合法和文件完整性    或者使用--checksig

--nodigest    #不检测完整性

--nosignature    #不检测合法性

-------------------------------------------------------------

rpm --improt /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6    #导入公共秘钥,RedHat系列官方公钥路径/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

-------------------------------------------------------------

:有时用yum安装程序时,会产生如下警告

warning: rpmts_HdrFromFdno: Header V3RSA/SHA1 Signature, key ID c105b9de: NOKEY

Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

 

解决办法:

1.添加参数 --nogpgcheck    #如果确认安装文件无问题,可以忽略检测

2.到yum源网站更新gpg-key后导入,例如

[root@TESTHOST rpm-gpg]# wget http://mirrors.sohu.com/centos/RPM-GPG-KEY-CentOS-6

[root@TESTHOST rpm-gpg]# rpm --improt /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

本文出自 “Arvin Lau” 博客,请务必保留此出处http://64314491.blog.51cto.com/2784219/1637228

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。