rpm详解
-
rpm使用方法
-
rpm起源
-
rpm是什么
-
rpm命名格式
-
rpm优缺点
-
rpm获取注意
-
rpm命令使用
rpm起源
由于在linux中安装应用程序需要源码包编译安装,对于非专业人员而言难度太大,因而出现一种将源码编译好的二进制程序,库文件,配置文件,帮助文件等打包成一个或多个特定格式的程序包,而管理这类包的工具之一,则称为rpm.
rpm是什么
rpm 是 reahat package manage,最开始由redhat公司在其rhel系统上提供的程序包管理器,但是由于rpm的使用十分的方便,因此现在rpm是rpm is package manager,成为linux中通用的程序包管理器之一.
rpm命名格式
首先我们先了解一下,此类程序包的命令方法.直接上实例更加明显, php-5.4.16-21.el7.x86_64.rpm 格式为name-VERSION-rpm_release.os.arch.rpm name:程序的名称,php VERSION:程序源码包的版本号,5.4.16 rpm_release:rpm的发行号,21 os:操作系统版本,el7 arch:编译此包的cpu架构,x86_64 注:arch中有noarch,其表示此包可在任何架构平台上安装; 对于用户而言,程序能够运行则足够,但是对于某些需要在此程序上进行二次开发,或者添加额外组件的专业人员,那该怎么办呢? 因此rpm有一个拆包的机制,将一个程序分为主包跟其子包来管理,一般用户只需要安装主程序就能稳定使用,专业人员根据自己需求去安装其它子包.以下来看看哪些是子包, openssl-1.0.1e-34.el7.x86_64 openssl-devel-1.0.1e-34.el7.x86_64 openssl-libs-1.0.1e-34.el7.x86_64 子包格式为application-function-VERSION-rpm_release.os.arch.rpm function:该程序的某功能组件 常见的有:libs-->库文件 utils-->工具程序 devel-->开发组件
rpm优缺点
优点
为了更好的管理程序包的安装,卸载,更新和查询等操作,rpm提供 1.rpm包的组成文件列表(每个rpm包所必有的) 2.rpm包安装或卸载时的脚本信息 3.公共数据库保存 程序包的名称和版本 依赖关系 功能说明 安装生成的各文件的文件路径及校验码信息 等信息
缺点
1 rpm包都是在特定环境定制的,因此对安装环境有所要求. 2 在linux中,各程序之间的依赖关系由作者所设计,但由于程序包多种多样,其依赖关系则非常的复杂,如果安装一个应用程序,它会需要很多其它程序,才能正常运行起来,在安装中很常见.因此这在rpm中是个弊端.
rpm获取注意
由于rpm包是源码编译再将其打包,则rpm包也随处可见,任何人都能够进行发布rpm包.我们所需注意的是 1.包的来源性 2.包的完整性
rpm命令使用
rpm作用有:安装,卸载,更新,查询,校验常用功能
rpm RPM Package Manager rpm包管理器 rpm [options] PACKAGE_FILE ... 基本选项: --version:显示RPM版本号 -v:显示操作过程详细信息 -vv:显示更加详细的信息
安装格式: rpm {-i|--install} [install-options] PACKAGE_FILE ... -i:安装 -h:hash,以#表示安装进度 --force:强制安装 --nodeps:不检查包的依赖关系 --test:不安装,简单的检查和报告可能的冲突 --replacepkgs:覆盖安装 example: 安装rpm包,时会因依赖关系而无法安装,若想忽略依赖关系安装,则需使用--nodeps ]# rpm -ivh httpd-2.2.15-53.el6.centos.x86_64.rpm error: Failed dependencies: apr-util-ldap is needed by httpd-2.2.15-53.el6.centos.x86_64 httpd-tools = 2.2.15-53.el6.centos is needed by httpd-2.2.15-53.el6.centos.x86_64 libdb-4.7.so()(64bit) is needed by httpd-2.2.15-53.el6.centos.x86_64 libpcre.so.0()(64bit) is needed by httpd-2.2.15-53.el6.centos.x86_64 忽略依赖关系并安装 ]# rpm -ivh --nodeps httpd-2.2.15-53.el6.centos.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:httpd-2.2.15-53.el6.centos ################################# [100%]
卸载格式: rpm {-e|--erase} {ERASE OPTIONS} PACKAGE_NAME ... -e:卸载 --nodeps:不检查包的依赖关系 --test:测试卸载,跟-vv连用 --allmatches:删除此包所有的版本 注:如果程序包的配置文件被修改过,卸载时,此文件通常不会被删除,而是被重命名(加后缀.rpmsave)后留存. 还需要注意卸载时,不要加.rpm后缀,因为安装完成之后,就不是以rpm结尾的包. 建议:尽量不要卸载程序,只要不启用就可以,以免由依赖关系所引起不必要的麻烦. example: 卸载tcsh的rpm包 ]# rpm -e tcsh-6.17-24.el6.x86_64 ]#
更新格式: rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... rpm {-F|--freshen} [install-options] PACKAGE_FILE ... -U:升级或安装(如果不存在旧文件,直接安装最新包) -F:升级(如果旧文件不存在,则什么都不做) --oldpackage:降级到旧版本 --force:有冲突时强制升级 --nodeps:不检查包的依赖关系 --test:不安装,简单的检查和报告可能的冲突 注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版本内核;同样不要对python进行升级. (2) 如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供; example: (只是为做演示,是rpm的发行号更新) 1 旧版本httpd升级为新版本httpd ]# rpm -Uvh --nodeps --oldpackage httpd-2.2.15-53.el6.centos.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:httpd-2.2.15-55.el6.centos.2 ################################# [ 50%] Cleaning up / removing... 2:httpd-2.2.15-53.el6.centos ################################# [100%] 2 新版本降级到旧版本 ]# rpm -Uvh --nodeps --oldpackage httpd-2.2.15-53.el6.centos.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:httpd-2.2.15-53.el6.centos ################################# [ 50%] Cleaning up / removing... 2:httpd-2.2.15-55.el6.centos.2 ################################# [100%]
查询格式: rpm {-q|--query} [select-options] [query-options] [PACKAGE_FILE ...] -q:是否安装指定的程序包 select-options -a:查看所有已经安装的包 -f:查看某个文件自己的安装包,/path/to/file -p:查看没有安装的包 query-option --changelog:查看程序包的变化信息 -i,--info:查看包的详细信息 -c:查看包的配置文件 -l:查看包安装的文件列表 -d:查看包安装的帮助文件列表 --dump:查看包文件列表元数据的详细信息 --provides:查看包的capabilities --requires:查看包所依赖的capabilities --scripts:查看包安装或卸载时执行的脚本 此类脚本有四种: preinstall:安装过程开始之前执行的脚本 postinstall:安装过程完成之后执行的脚本 preuninstall:卸载开始之前执行的脚本 postuninstall:卸载之后执行的脚本 Capabilities:即该包能够提供的能力(例如:httpd能提供web server的能力) example: 1 查看httpd是否已经安装 ]# rpm -q httpd httpd-2.2.15-55.el6.centos.2.x86_64 2 查看系统上所有以安装的rpm包 ]# rpm -qa gcc-4.8.2-16.el7.x86_64 policycoreutils-2.2.5-11.el7.x86_64 cairomm-1.10.0-8.el7.x86_64 ... 3 查看安装/usr/sbin/httpd的rpm包 ]# rpm -qf /usr/sbin/httpd httpd-2.2.15-55.el6.centos.2.x86_64 4 查看尚未安装的包 ]# rpm -qp httpd-2.2.15-53.el6.centos.x86_64.rpm httpd-2.2.15-53.el6.centos.x86_64 5 查看httpd包的版本修改日志 ]# rpm -q --changelog httpd * Fri Nov 18 2016 Johnny Hughes <johnny@centos.org> - 2.2.15-54.2 - Roll in CentOS Branding 6 查看httpd包所安装的所有文件清单 ]# rpm -ql httpd /etc/httpd/conf.d/welcome.conf /etc/httpd/conf/httpd.conf /etc/httpd/conf/magic /etc/logrotate.d/httpd ... 7 查看httpd包的详细信息 ]# rpm -qi httpd Name : httpd Version : 2.2.15 Release : 55.el6.centos.2 Architecture: x86_64 ... The Apache HTTP Server is a powerful, efficient, and extensible web server. 8 查看httpd包提供的capabilities config(httpd) = 2.2.15-55.el6.centos.2 httpd-mmn = 20051115 httpd-suexec = 2.2.15-55.el6.centos.2 mod_actions.so()(64bit) ... webserver httpd = 2.2.15-55.el6.centos.2 httpd(x86-64) = 2.2.15-55.el6.centos.2 9 查询httpd包所依赖的capabilities ]# rpm -q --requires httpd /bin/bash /bin/sh ... rtld(GNU_HASH) system-logos >= 7.92.1-1 rpmlib(PayloadIsXz) <= 5.2-1 10 查询httpd包安装及卸载时所执行的脚本 ]# rpm -q --scripts httpd preinstall scriptlet (using /bin/sh): # Add the "apache" user getent group apache >/dev/null || groupadd -g 48 -r apache ... preuninstall scriptlet (using /bin/sh): if [ $1 = 0 ]; then ... /sbin/service httpd condrestart >/dev/null 2>&1 || : 技巧使用: 一般当安装出现缺少某库时,可以使用-qf来查询此库由哪个程序包所提供,进而解决. 例如: 当安装时出现缺少,liblogin.so.2库时: # find / -name "liblogin.so.2"|xargs rpm -qf cyrus-sasl-plain-2.1.23-13.el6_3.1.x86_64
校验格式: rpm {-V|--verify} [select-options] [verify-options] -V:检查包安装之后生成的文件是否发生了改变 如果没有输出结果,则 当有结果输出时,则根据下面查询对应原因: S 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 S:文件大小改变 M:文件权限和类型发生改变 5:MD5这一种指纹码内容改变 D:设备主/次号改变 L:Link路径改变 U:文件所属人改变 G:文件所属组改变 T:文件修改时间改变 p:文件的Capabilities发生改变 example: 在httpd所安装的文件中添加一个数 echo 1 >> /etc/httpd/conf/httpd.conf 大小改变,MD5码改变,文件修改时间改变 # rpm -V --nodeps httpd S.5....T. c /etc/httpd/conf/httpd.conf
包来源合法性验证和完整性验证: 获取并导入信任的包制造者的公匙: 对于CentOS发行版其命令 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-# 导入公匙之后时,会进行自动验证其完整性 也可手动验证: rpm {-K|--checksig} PACKAGE_FILE...
数据库重建: rpm的数据库路径:/var/lib/rpm/ 查询通过此数据库进行 centos 6 获取帮助: man rpm centos 7 获取帮助: man rpmdb rpm {--initdb|--rebuilddb}[--dbpath DIRECTORY] [--root DIRECTORY] --initdb:初始化数据库;当前系统中无数据库时,创建一个新的数据库; --rebuildb:通过读取当前系统已安装的包,重新构建一个数据库; --dbpath DIRECTORY:指定数据库安装路径 --root DIRECTORY:指明所在根目录 example: 在/tmp/rpm下创建一个数据库 # rpm --initdb --dbpath /tmp/rpm # ls /tmp/rpm __db.001 __db.002 __db.003 __db.004 Packages 当数据库损坏时,进入/tmp/rpm目录下,执行以下命令 # rpm --rebuilddb # rpm --initdb
原创文章,作者:N25_sadan,如若转载,请注明出处:http://www.178linux.com/64508