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