一点点RPM

1、软件管理器简介

         随着Linux的不断发展及越来越多的人投入到Linux大家庭中,软件管理器的作用对于还无法熟练掌握源码编译安装的人们还是显得尤为重要,同时,由Linux开发商在为其编译完成的软件包在某种程度上要比在网络上流传的软件包要安全的多;所以,掌握Linux常用的软件管理器还是非常重要的;

         目前常见的软件包管理器包括:RPMDPKG,简单介绍如下(见鸟哥):

代表厂商

软件管理机制

管理命令

在线升级

Red Hat/Suse

RPM

rpm

YUM(yum)

Debian/Ubuntu

DPKG

dpkg

APT(apt-get)

2RPM简介

    RPM(Redhat Package Manager)是由Red Hat公司所发展出来一种软件包管理机制,在之前,由于软件安装需要依赖其他属性的缘故,安装的过程将会非常复杂而RPM则会大大简化这一过程;

RPM会将软件提前编译并打包成RPM包的格式,同时通过打包好的软件里的默认数据库记录下此软件在安装过程中所要求的依赖关系,在执行软件安装时,会先依照软所记录的数据查询当前系统的环境是否满足,如满足,则执行安装;如不满足则不予以安装;

但是,RPM包的缺点也是很多的:

1、软件包的安装环境已经在制作时提前决定好了,所以不同的厂商发布的RPM文件通常不会通用;

2、厂商提供的RPM包安装时方便,安全性高,但通常版本较低,如果要体验新特性,新版本,一般这种RPM包是不会满足我们的需求的;

3、由于依赖关系的存在,RPM包的卸载升级也需要格外谨慎;最好是只卸载升级与其他软件依赖关系不大的软件包;

 

3、从程序组成说起

   软件在编译前,是一段源代码,而在编译后,会分割成一段段我们能够更好理解的文件,基本如下:

二进制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/sbin, /usr/local/sbin,

库文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64

配置文件:/etc, /etc/DIR, /usr/local/{etc,conf}

帮助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc

    更简单的说,我觉得rpm就是将这些文件按照自己需要打包在一起成为一个软件包,而由于主观需要或其他元素,内容并不会往往是我们所需求的;

4、看看格式

         centos 6.6的自带的mysql为例:

1.png

       要补充的是,Linux当中,很多源码包会因为功能被拆分为如下的多个包,仍然以httpd为例:

2.png

5、看看rpm包来源

   a.系统的发行光盘镜像或官方站点(或站点镜像服务器)

    挂载光盘:mount -r /dev/cdrom /media/cdrom

    官方站点,镜像:

        mirrors.sohu.com

        mirrors.163.com

        mirrors.aliyun.com

    b.程序包的官方站点

    c.第三方组织:epel

    d.搜索引擎

        http://rpmfind.net

        http://rpm.pbone.net

        http://pkgs.org

建议:安装之前要验证其的来源合法性和包的完整性;

6RPM管理命令

         归根结底,在我们正确获得所要的RPM包后,RPM包的管理使用就成为重中之重了,而RPM包管理通过rpm这个命令来完成,总结下常用选项如下:

a. 安装篇:

rpm

Usagerpm {-i|–install} [install-options] Package_file…

安装:

常用组合:

-ivh

-i, –install

安装

-h

hash,#来表示安装进度,一个#相当于2%

-v, -vv, -vvv

显示安装过程中的详细信息;-vv,-vvv显示更多信息;

–test

测试安装,而仅报告依赖关系及冲突信息等;

–nodeps

忽略依赖关系

–replacepkgs

覆盖安装:重新安装并覆盖原有的文件,

–force

强制安装

注意事项

程序包之间存在依赖关系,选用-nodeps时,安装可能会成功,但未必能够成功执行;选用-replacepkgs时,要注意配置文件;

b、升级篇

rpm

rpm   {-U|–upgrade} [install-options] PACKAGE_FILE… 升级或安装

rpm   {-F|–freshen} [install-options] PACKAGE_FILE… 仅升级

升级选项:

常用组合:

-Uvh

-Fvh

-U

升级或安装

-F

升级

–oldpackage

降级到旧版本

同样支持-h, -v ,-vv,-vvv,-force选项

注意事项

1. 一定不要对内核执行升级;Linux允许多内核共存,所以,可以直接安装多个不同版本的内核

2.如果程序包的配置文件安装后曾经被修改,升级时,新版本的配置文件不会覆盖老版本的配置文件,而是把新版本的配置文件重命名(加后缀.rpmnew)后保存;

c、卸载篇

rpm

rpm   {-e|–erase} [–allmatches] [–nodeps]    [–test] PACKAGE_NAME …

卸载选项:

-e

卸载

–allmatches

如果一个程序包同时安装多个版本,则卸载所有  

–test

测试写在:dry-run模式

同样支持-h, -v ,-vv,-vvv,-force,-nodeps选项

注意事项

如果程序包的配置文件安装后曾被修改,卸载时,此文件通常不会被删除,而是被重命令(加后缀.rpmsave)后留存;

d、查询篇

rpm

rpm   {-q|–query} [select-options] [query-options]

常用选项:

yeah,所有的一切都以加上q为前提;

-q

查询某包或某些包是否安装

-qa

查询已安装的所有包

-qf

查询某文件是有哪个安装包安装生成

-qi

查询某包的简要说明信息

-qip

查询某未安装的包文件的相关信息

-ql

查询某包安装生成的文件列表

-qc

查询某包安装完成后生成的所有配置文件

-qd

查询某包安装完成后的所有帮助文件

-q –changelog

查询某包制作时随版本变化的changelog信息

-q –provides

查询某包提供的capabilities

-q –requires

查询某包依赖的capabilities

-q –scripts

查询某包安装或卸载时的执行脚本

注意事项

脚本有四类:

preinstall:安装过程开始前执行的脚本;postinstall:安装过程完成后执行的脚本;preuninstall:卸载开始前执行的脚本;postuninstall:卸载过程完成后执行的脚本

e、校验篇查询包安装之后生成的文件是否发生了改变

         查询方式:

                   rpm {-V|–verify} [select-options] [verify-options]

         常见用法:

                   rpm -V PACKAGE_NAMES

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  符号链接

U User ownership differs  属主

G Group ownership differs  属组

T mTime differs  最后修改时间

P caPabilities differ

注:

    1、文件属性正常,则会显示点’.’,否则会显示其代表字符,如:

    修改了httpd配置文件后:

    [root@AZtest ~]# rpm -V httpd

    S.5….T.  c /etc/httpd/conf/httpd.conf

    2RPM校验也会用到-a(所有已安装包)-f(指定文件)-p(指定RPM)–noscripts–nodeps等选项;

                  

f、程序包的合法性验证:

   来源合法:由信任的制作者提供

       依赖于:制作者的数字签名,签名是作者使用自己的私钥加密程序包特征码进行的;

   内容合法:包未被2次修改,完整性校验成功;

       依赖于:制作者提供的程序包特征码:

   验证方式:安装者用同样的特征码提取算法提取程序包的特征码,并与原作者提供的相比较;

   验证其光盘中程序包的来源及完整性:

       rpm –import /path/to/RPM-GPG-KEY-FILE

验正:rpm {-K|–checksig} PACKAGE_FILE

             –nosignature:不检查来源合法性

             –nodigest:不检查完整性

f、重建数据库篇

         rpm管理器数据库:/var/lib/rpm,如果某些操作导致RPM数据库/var/lib/rpm内的文件损坏,可使用如下命令

rpm

rpm   {–initdb|–rebuilddb} [-v] [–dbpath DIRECTORY] [–root DIRECTORY]

重建数据库:

–initab

初始化数据库,即数据库完全不存时,可新建之

–rebuilddb

无论当前数据存在与否,都会直接重建此库

注意事项

     最后说一句,为了强迫自己记忆和手敲,不记录例子了。。。

原创文章,作者:AZ,如若转载,请注明出处:http://www.178linux.com/9664

评论列表(1条)

  • stanley
    stanley 2015-12-06 20:27

    总结的很不错,献有人总结的如此详细,已置顶