vivion34 发表于 2018-5-22 13:17:47

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)
  

  yum源镜像网站:
  http://mirrors.sohu.com
  rpm包搜索网站:
  http://rpmfind.net/
  http://rpm.pbone.net/
  二、软件包及软件包管理工具
  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
# rpm -q apache
package apache is not installed    #显示未安装
# rpm -q bash
bash-4.1.2-15.el6_4.x86_64    #显示程序版本等信息              rpm -qa    查询所有已安装的包
# rpm -qa | grep "^bas"    #支持grep,但不支持globbing
basesystem-10.0-4.el6.noarch
bash-4.1.2-15.el6_4.x86_64
# rpm -qa | grep "^bin"
binutils-2.20.51.0.2-5.42.el6.x86_64
#  rpm -qi packages_name    查询软件包摘要信息    #此处的i亦可为--info
# 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
# 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
# rpm -V zsh    #程序相关文件未修改时,执行命令后没有任何提示
# vim /etc/zlogin    #修改文件
# 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:重建,旧档不会保存    #此选项常用
# 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后导入,例如
  # wget http://mirrors.sohu.com/centos/RPM-GPG-KEY-CentOS-6
  # rpm --improt /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
  
页: [1]
查看完整版本: Linux之RPM