软件包管理器之一——RPM介绍及应用

一、前言:

在没有软件包管理器前,用户都是通过源代码的方式来安装软件。但是我们很容易发现,在每次安装软件时都必须对操作系统的境、编译的参数进行对应的编译,并且操作过程很是复杂,这对于不熟悉操作系统的朋友来说真心困难,那么有没有一款软件能让用户能很简单的安装所需的软件呢?

随着自由软件蓬勃发展,Linux系统的飞快发展,很多软件开发者、企业和社区将这些软件开始通过收集、整理、编译制作成distributions发布到常用的Linux操作系统上,但是后来发现,这样做在日后软件更新、系统更新上面都需要做很多操作。为了解决这个问题,一些社区和企业开始思考关于Linux的软件管理方式。

通过社区与企业的共同努力,Linux开发商将固定的硬件平台和操作系统需要安装或升级的软件编译好,并且将这些软件通过特定的打包方式将软件打包成一个特殊格式的文件,这些软件的文件含有能检测操作系统环境和软件依赖性的脚本,并提供记载该软件提供的所有文件信息等,最后将这个软件发布出去供用户使用。那么用户得到这个软件包,通过特定的命令,就能执行检测系统环境,根据环境所需的要求,对软件进行安装。这就是软件管理器的诞生。



二、目前常见Linux软件安装方式有2种

2.1、dpkg

这个软件安装方法是通过Debian Linux社区开发出来的,通过dpkg机制,Debian所提供的软件就能通过很简单的方法安装软件,并且能记录安装后的软件信息。只有是Debian的Linux distributions大多数都是使用这个方法管理软件。例如B2D、Ubuntu

2.2、RPM

这个软件安装方法是由Red Hat公司开发出来的,由于非常的简单实用,很多的distributions都使用这个机制来安装和管理软件。例如:CentOS、SuSe等



三、程序包管理器

功能:将编译好的程序打包成一个文件或有限的几个文件,可以用于实现安装、卸载、升级、查询等功能

包含

1、数据库

程序名及版本

依赖关系: X --> Y,Z

功能性说明(rpm -qi bash)

安装生成的各文件路径及校验码

2、程序的组成清单

文件清单

安装卸载时运行的脚本



四、RPM介绍

RPM(RedHat Package Manager),RPM通过以一个种数据库记录的方式来将你所需的软件安装到你的Linux系统上的。在你所安装的软件前先通过编译完成,打包成RPM格式的文件,数据库记录的方式搜索对应需要具备的依赖关系的软件,那么当你在安装该软件的时候,RPM会查看你系统环境和依赖性关系来判定你是否能安装此软件。若能满足,则允许安装。否则将不给予安装。并且在安装的时候将该软件的信息写入RPM的数据库中,以便日后查询、检验和升级。



五、RPM包的命名格式

name    -     version    -        release         .arch       .rpm

软件名字     软件的版本信息    rpm包的发行号    适合的硬件平台   扩展名

软件名字(name):每一个软包的名称

软件的版本信息(version):组成部分有 major.minor.release

major:主版本号

minor:次版本号

release:大版本的发行号,是属于源码包的发行号

rpm包的发行号(release):当前rpm包是什么的发行号,与程序源码(version里的)的发行号无关,仅用于标识对rpm包不同制作的修订,比如升级了什么补丁

适用的硬件平台(arch):

x86:i386,i486,i586,i686等

x86_64:x86_64

powerpc:ppc

noarch:没有任何硬件等级上的限制

例如: bash-4.2.3-3.centos5.x86_64.rpm     #表示bash-4.2.3  ,第三次发行,支持CentOS5系统,支持硬件平台x86_64位系统

小贴士:获取rpm包的途径:

1、发行的光盘或站点服务器

镜像:

http://mirrors.163.com

http://mirrors.sohu.com

2、项目的官网

源代码

rpm包

3、很多第三方机构或个人制作并公开发布许多的rpm包

http://rpmfind.net

http://rpm/pbone.net



六、打包工具的分包机制

假设一个程序有20个功能:常用功能有8个,特殊功能A:3个,特殊功能B:6个,二次开发相关功能:3个。那如果用户只需要常用功能,可是必须要全部安装,那么就会很占用空间,而且其他功能根本不会使用,这时就会分包机制了。

分包机制:

核心包(主包) + 子包(分包)组成

核心包:命令与源程序一致

例如:bash-4.2.3-3.centos7.x86_64.rpm

子包:(安装子包前必须安装核心包)

例如: bash-a-4.2.3-3.centos7.x86_64.rpm
       bash-devel-4.2.3-3.centos7.x86_64.rpm   #devel就表示开发功能


七、RPM包的使用

7.1、安装(组合选项:-ivh)

rpm [option] Package_file

-i:install安装操作

-v:安装时显示详细信息

-vv:安装时显示更详细信息

-h:hash码,在安装过程中使用#号来显示安装进度

--test:仅作测试,不做安装操作

--noteps:忽略依赖关系,强制安装

如果某包依赖于其他包,要么解决所有的依赖关系,要么忽略依赖关系,强制安装。但是如果强制安装完成后,软件未必能正常使用

--replacepkgs:重新安装程序包
                备注:如果原有配置文件作了修改,很有可能不执行替换文件,而是将新生成的配置文件重命名后缀为 .rpmnew

例子:
#测试安装RPM包
[[email protected] mnt]# mount /dev/cdrom /mnt                                                     #挂载光盘镜像到/mnt目录下
mount: block device /dev/sr0 is write-protected, mounting read-only 
[[email protected] mnt]# cd /mnt/Packages/                                                         #进入光盘目录
[[email protected] Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm                                 #安装zsh-4.3.10-7.el6.x86_64.rpm包
warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY      #这里的是提示密钥,无法校验包的合法性
Preparing...                ########################################### [100%]                  #使用#代表安装进度,一个#代表2%
   1:zsh                    ########################################### [100%]
#仅作测试,不做安装
[[email protected] Packages]# rpm -q zsh    
package zsh is not installed
[[email protected] Packages]# rpm --test -ivh zsh-4.3.10-7.el6.x86_64.rpm                          #仅作测试安装,实际上未安装
warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
[[email protected] Packages]# rpm -q zsh                                                              
package zsh is not installed

7.2、卸载

rpm [option] Package_name

-e:erase删除

卸载的时候也会存在依赖关系的

如果被其他包所依赖:

1、将依赖于此包的所有包一并卸载

2、忽略依赖关系

能卸载,但依赖于此包程序包可能会运行不正常

--nodeps

练习:
[[email protected] Packages]# rpm -q zsh            #查看软件是否安装,显示出包的信息证明已经安装。查询命令下面会继续介绍
zsh-4.3.10-7.el6.x86_64
[[email protected] Packages]# rpm -e zsh            #卸载zsh软件
[[email protected] Packages]# rpm -q zsh
package zsh is not installed                     #提示该软件未安装

注意:如果包的配置文件安装后曾被改动过,卸载时,此文件将不会卸载,而是重命名并保存,会出现下面的字段

warning: /etc/zshrc saved as /etc/zshrc.rpmsave

例如:
[[email protected] Packages]# rpm -e zsh
warning: /etc/zshrc saved as /etc/zshrc.rpmsave
[[email protected] Packages]# ls /etc/ | grep "zsh*"
zshrc.rpmsave

7.3、升级(一般而言是新版本取代老版本)

rpm [option] Package_file

(1)、升级或安装 (如果有老版本就升级,如果没有就安装)

组合 -Uvh

(2)、直接升级 (如果有老版本就安装新版本)

组合 -Fvh

升级的时候也可能会出现版本冲突等问题,所以如果想强制升级可以使用 --force

注意:不应该对内核执行升级操作,而是安装(因为Linux系统允许多内核并存)

7.4、查询

(1)、查询某包是否安装

rpm -q package_name.....

(2)、查询所有已经安装的包

rpm -qa           a表示all

按条件过滤: rpm -qa | grep ‘PATTERN‘

(3)、查询包的表述信息

rpm -qi package_name         (这里查询仅查询已安装的包)

(4)、查询某包生成了哪些文件

rpm -ql package_name

①查询某包生成了哪些配置文件

rpm -qc package_name

②查询某包生成了哪些帮助文件

rpm -qd package_name

③查询程序包的相关脚本

rpm -q --scripts package_name

脚本有四类

lpreinstall:安装前脚本

lpostinstall:安装后脚本

lpreuninstall:卸载前脚本

lpostuninstall:卸载后脚本

(5)、查询某文件是由哪个包安装生成的

rpm -qf /path/to/some_file

(6)、对尚未安装的包执行查询

rpm [option] /path/to/package_file

-q  :查看软件包是否安装

-qpi:安装以后会生成哪些配置文件

-qpl:安装以后会生成什么文件

-qpc:安装以后会生成什么配置文件

-qpd:安装以后相关脚本

练习:
[[email protected] Packages]# rpm -q zsh             #查看zsh软件是否安装                    
zsh-4.3.10-7.el6.x86_64
[[email protected] Packages]# rpm -qa | grep zsh     #查看zsh软件是否安装  
zsh-4.3.10-7.el6.x86_64
[[email protected] Packages]# rpm -qd zsh            #查询zsh包生成了哪些帮助文件
[[email protected] Packages]# rpm -qpl httpd-2.2.15-29.el6.centos.x86_64.rpm  #在未安装httpd时,查询安装httpd会生成什么文件
[[email protected] Packages]# rpm -qf /etc/bashrc    #查询bashrc这个文件是通过什么程序包安装生成的
setup-2.8.14-20.el6_4.1.noarch

7.5、校验(用于检查包装后文件属性是否发生变化)

rpm -V Package_name

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    能力发生变化(可以理解为功能)

某属性无改变,则显示为 .

[[email protected] Packages]# tail -5 /etc/zshrc 
}
_src_etc_profile_d
unset -f _src_etc_profile_d
#test file                                       #在 /etc/zshrc文件中最后一行添加了最后一段
[[email protected] Packages]# rpm -V zsh            #查询该zsh软件的配置文件是否更改
S.5....T.  c /etc/zshrc                          #看出文件大小,MD5校验,修改时间都发生了变化

7.6、RPM数据库重建

小贴士:rpm 的数据库目录  /var/lib/rpm

rpm --initdb:初始化

如果事先没有库,会新建一个;如果有,则不覆盖

rpm --rebuilddb:重建

直接重建,覆盖原有的数据库

7.7、校验RPM包来源合法性及完整性

前言:包制作者制作完成之后会附加数字签名于包上;

包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特征码,附加原始数据后面。

验证包来源合法性和完整性的过程:

前提:必须有可靠机制获取到包制作者的公钥

1、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法

2、使用与制作者同样的一样加密算法提取原始数据的特征码,并与解密出来的特征码比对,相同,则意味着完整性没问题

所以我们必须在当前系统上导入包的制作者的公钥

导入公钥:

rpm --import /path/to/key_file

小贴士:centos6的密钥是在光盘里的“RPM-GPG-KEY-CentOS-6 ”文件

显示所有已导入的gpg格式的公钥

rpm -qa gpg-pubkey*

显示公钥的详细信息

rpm -qi gpg-pubkey-name

检查包:安装过程中会自动执行,若要自动检测请如下操作

手动检查:

rpm -K /path/to/package_file

rpm --checksig /path/to/package_file

不检查包完整性:

rpm -K --nodigest

不检查来源合法性:

rpm -K --nosignature

练习:
[[email protected] Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm                              #安装时会提示你没有公钥,无法校验包的完整性与合法性
warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
[[email protected] Packages]# rpm --import /mnt/RPM-GPG-KEY-CentOS-6                            #导入密钥
[[email protected] Packages]# rpm -qa gpg-pubkey*                                               #查看所以已导入的gpg格式的密钥
gpg-pubkey-c105b9de-4e0fd3a3
[[email protected] Packages]# rpm -qi gpg-pubkey-c105b9de-4e0fd3a3                              #查看密钥详细信息
[[email protected] Packages]# rpm -ivh --replacepkgs zsh-4.3.10-7.el6.x86_64.rpm                #可以导入密钥后安装软件会自动执行检查,通过后直接安装      
Preparing...                ########################################### [100%]    
   1:zsh                    ########################################### [100%]
[[email protected] Packages]# rpm -K zsh-4.3.10-7.el6.x86_64.rpm                                #手动检查包的完整性与合法性
zsh-4.3.10-7.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK


八、知识要点总结

8.1、了解软件包管理器的来源与使用

8.2、熟悉RPM包的命名格式    name-version-release.arch.rpm

8.3、熟悉打包和分包机制

8.4、熟悉RPM命令的使用 ,包括 安装、卸载、查询、升级、校验、公钥导入、合法性的检验、RPM数据库重建

虽然在安装软件时还有其他更好的命名,比如yum(日后再介绍),但是yum也是基于RPM而衍生出来的,而且在查询软件包很有用,日后也会经常使用这个命令,所以必须要对RPM命令非常熟悉,尤其是查询命令,对日后维护Linux系统帮助很大。建议多加练习

时间: 2024-08-30 07:20:53

软件包管理器之一——RPM介绍及应用的相关文章

软件包管理器之二——YUM介绍及使用

一.前言 之前我们介绍了RPM的应用(详细请看http://windchasereric.blog.51cto.com/5419433/1676324),发觉RPM安装软件有一个很繁琐的问题,那就是包与包之间的依赖关系,如果想正常安装和使用软件程序,就必须根据要求一步一步的解决软件之间的依赖关系.那么如果程序使用的包很多,将会很消耗使用人的时间和精力.那么有没有办法解决这一问题呢? 在RPM中我们介绍了RPM软件会记录软件之间的安装信息,其中也包括了软件之间的依赖属性.那么如果我们在安装前就分析

linux软件包管理之一(rpm包管理)

开场白 1.软件的安装卸载是很平常的事情,但是在linux上面却也这么的不简单.Linux的其中一个哲学思想就是 一个程序只做一件事,并且做好. 组合小程序来完成复杂任务.这样做有很多好处.但世界上的东西总是两面的,有得必有失.各个小程序之间往往会存在着复杂的依赖关系. 2.再往前走一步.软件最初的安装方式只有一种,那就是源代码编译安装,这种方式安装的软件更贴近本机的系统运行环境,但也更复杂.不仅要解决软件之间的依赖关系(所依赖的软件还要再编译安装),还要配置开发编译环境(可能会抓狂的),一切都

Linux系统红帽软件包管理器(RPM)

1.源代码管理 绝大多数开源软件都是直接以源代码形式发布的,一般会被打包为tar.gz 的归档压缩文件.程序源代码需要编译为二进制可执行文件后才能够运行使用.源代码的基本编译流程为 ./configure:解压缩后运行该命令,它主要检查编译环境.相关库文件以及配置参数并生成 makefile make:对源代码进行编译,生成可执行文件 make install:将生成的可执行文件安装到计算机中 源代码形式的软件使用起来较为麻烦,但是兼容性和可控性较好.并且开源软件一般会大量使用其他开源软件的功能

Linux包管理工具(rpm/dpkg,yum/apt,alien)

概括: rpm/yum  redhat dpkg/apt  debian alien 转换 在 GNU/Linux( 以下简称 Linux) 操作系统中,RPM 和 DPKG 为最常见的两类软件包管理工具,他们分别应用于基于 RPM 软件包的 Linux 发行版本和 DEB 软件包的 Linux 发行版本.软件包管理工具的作用是提供在操作系统中安装,升级,卸载需要的软件的方法,并提供对系统中所有软件状态信息的查询.RPM 全称为 Redhat Package Manager,最早由 Red Ha

liunx 平台下软件包管理

RPM/DPKG 两大阵营简介 在 GNU/Linux( 以下简称 Linux) 操作系统中,RPM 和 DPKG 为最常见的两类软件包管理工具,他们分别应用于基于 RPM 软件包的 Linux 发行版本和 DEB 软件包的 Linux 发行版本.软件包管理工具的作用是提供在操作系统中安装,升级,卸载需要的软件的方法,并提供对系统中所有软件状态信息的查询. RPM 全称为 Redhat Package Manager,最早由 Red Hat 公司制定实施,随后被 GNU 开源操作系统接受并成为很

大数据学习之_01_Linux学习_02_组管理和权限管理+定时任务调度+linux磁盘分区、挂载+linux的网络配置+进程管理(重点)+软件包管理+大厂面试题+感悟分享+资料附录

10 组管理和权限管理10.1 Linux组的基本介绍10.2 文件/目录的所有者10.3 文件/目录的所在组10.4 权限的基本介绍10.5 rwx权限详解10.6 修改权限指令-chmod10.7 修改文件所有者-chown10.8 修改文件所在组-chgrp10.9 最佳实践-警察和土匪游戏11 定时任务调度11.1 crond任务调度12 linux磁盘分区.挂载12.1 分区的基本知识12.2 Linux分区12.3 挂载的经典案例12.4 查询系统整体磁盘使用情况12.5 查询指定目

linux软件包管理(下)

在vi配置文件的编写的时候我们发现#并不能注释掉一行的信息 那什么才是linux标准的注释信息呢 查看软件对应的软件包命令 rpm –ap| grep vim 大多example是需要的事例文档  双引号注释vim配置文件 言归正传说linux软件包管理 (5)校验  rpm –v 软件名  当软件的配置文件被更改时候回告诉你被改位置. s size文件大小发生改变的时候.还有一个s:md5sum  当文件内容被改变的时候MD5sum就会变化. t时间变化  d设备文件  U文件的用户  G文件

【linux_笔记】Linux软件包管理

学习资源来自:www.magedu.com 学习记录过程中难免出现错误,示例仅供参考,大神请无视.. 软件包管理 =========== 前导 =============应用程序:(程序的运行与底层的平台架构(Architecture)有着莫大的关系) 不同方式编写的程序生产二进制可执行格式的方式不同:        C语言(需要编译):源代码-->(编译)二进制格式        脚本(不需要编译):解释器(二进制程序)        高级语言与汇编语言开发程序的区别:        汇编语言

红帽软件包管理器(转)

在红帽软件包管理器(RPM)公布之前要想在Linux系统中安装软件只能采取“源码包”的方式安装,早期在Linux系统中安装程序是一件非常困难,耗费耐心的事情,因为大多数的服务程序仅仅提供编译源码,需要运维人员自行编译代码并解决许多的依赖关系,源码安装需要运维人员有很多的知识.高超的技能.甚至很好的耐心才能安装好一个程序,而且在安装.升级.卸载时还要考虑到其他程序.库的依赖关系,所以管理员在校验.安装.卸载.查询.升级等管理软件操作时难度非常大. 而RPM机制则为解决这些问题而设计的,RPM原称为