一点点RPM

1、软件管理器简介

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

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

代表厂商

软件管理机制

管理命令

在线升级

Red Hat/Suse

RPM

rpm

YUM(yum)

Debian/Ubuntu

DPKG

dpkg

APT(apt-get)

2、RPM简介

    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

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

6、RPM管理命令

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

a. 安装篇:

rpm

Usage:rpm {-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

    2、RPM校验也会用到-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

赞 (0)
AZAZ
上一篇 2015-12-06 20:24
下一篇 2015-12-06 20:28

相关推荐

  • yum源设置

      yum是我们经常用到的一个程序,我们主要用它来安装或删除安装包,下面我来介绍一下怎样配置yum安装源?    配置yum安装源主要有两种方法:一种是用本地镜像做安装源,二是用提供镜像下载的网站做安装源。    一 配置本地安装源    本地安装源需要有系统镜像,操作步骤如下:…

    Linux干货 2016-01-16
  • tomcat

      编程语言:硬件级:微码编程,汇编语言系统级:C,C++,…应用级:Java, PHP, Python, Ruby, Perl, C#, …Python: PVMStandard LibraryWeb Framework:Django, Flask, …Java:JVM,JDKbash:bash ex…

    Linux干货 2017-05-22
  • NET25-第11周作业

    1、详细描述一次加密通讯的过程,结合图示最佳。 第一步:他们需要实现协商好对称加密算法,单向加密算法,公钥加密算法,交换公钥等。 第二步:B用户想要将数据传给A,首先需要使用单向加密算法取出数据的特征码,并用自己的私钥对这段特征码进行加密(数字签名),B用户生成临时对称密钥,并用对称密钥加密整段数据,B用户使用 A用户的公钥加密一次性对称密钥,附加在整段数据…

    Linux干货 2017-05-15
  • keepalive配置文件详解

    第一部分:全局定义块 1、email通知。作用:有故障,发邮件报警。 2、Lvs负载均衡器标识(lvs_id)。在一个网络内,它应该是唯一的。 3、花括号“{}”。用来分隔定义块,因此必须成对出现。如果写漏了,keepalived运行时,不会得到预期的结果。由于定义块内存在嵌套关系,因此很容易遗漏结尾处的花括号,这点要特别注意。 global_defs{ n…

    2017-09-17
  • 千万不要把 bool 设计成函数参数

    我们有很多Coding Style 或 代码规范。但这一条可能会经常被我们所遗忘,就是我们经常会在函数的参数里使用bool参数,这会大大地降低代码的可读性。不信?我们先来看看下面的代码。 当你读到下面的代码,你会觉得这个代码是什么意思? widget->repaint(false); 是不要repaint吗?还是别的什么意思?看了文档后,我们才知道这个…

    Linux干货 2016-07-10
  • 高可用+LVS-NAT

    关键:floating VIP 要以组为单位同时切换 实验1: 主备VRRP 切换实验 预期: 设定配置文件: A主机 (172.18.48.61) vrrp_sync_group VG1 { group { outside_network inside_network } } vrrp_instance outside_network { state MA…

    2017-05-14

评论列表(1条)

  • stanley
    stanley 2015-12-06 20:27

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