资讯专栏INFORMATION COLUMN

rpm包管理功能全解

Lorry_Lu / 2600人阅读

摘要:程序包管理器的功能是将编译好的应用程序的各组文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装升级卸载和查询等管理操作。利用这种程序包管理器我们只能手动解决包之间的依赖关系。

软件包管理器

所有的软件都是由文件格式的程序代码(即源代码),经过编译成为一个可执行二进制文件;对于一个软件来说,其包含二进制程序、库文件、配置文件以及帮助文件。在应用中,每次要安装程序时通过找源代码然后去编译成二进制文件,这个过程要花费大量的时间,所以就有了程序包管理器。程序包管理器的功能是:将编译好的应用程序的各组文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作。

我们可以将这种软件包管理器称为手动安装程序的软件包管理器,为什么成为手动安装程序的软件包管理器呢?
因为这种软件包管理器,在软件安装的过程中不能解决包之间的依赖管理,比如,A程序的运行要基于B程序的某些库文件才能运行,所以在安装A程序之前必须安装A程序;当然也有可能出现这种情况:B程序的运行也要基于A程序的某些库文件才能运行,这样就形成了先有鸡还是先有蛋的问题。

利用这种程序包管理器我们只能手动解决包之间的依赖关系。所谓自动解决依赖关系,无非就是在某个程序安装之前对该程序包文件进行分析看其都依赖哪些程序,然后将这些程序一并安装,从而解决软件包的依赖文件,我们将自动解决依赖关系的工具称为解决依赖关系的前端工具。

Linux发行版本主要分为两类:类RedHat和类Debain,不同的发行版本上所使用的程序包管理器各不相同,下图是各发行版本所使用的程序包管理器:

程序包管理器的组成

1、程序包的组成清单(每个程序包都多带带实现)

其中包含文件清单和安全或卸载时运行的脚本

2、数据库(公共)

程序包管理器数据库存放的位置在/var/lib/rpm/目录下,其中包含程序包的名称和版本,依赖关系,功能说明以及安装生成的各文件的文件路径及校验码信息等等。

获取可靠安全程序包的途径

1、系统发行版的光盘或官方的文件服务器(或镜像站点)

http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com

2、项目的官方站点

3、第三方组织:

(1) EPEL
(2) 专门搜索rpm的搜索引擎
    http://pkgs.org
    http://rpmfind.net
    http://rpm.pbone.net

4、自己做rpm包

rpm包命名格式

在看rpm包命名格式之前先来看下源代码的命名格式:

源代码:name-VERSION.tar.gz
    其中VERSION包含: major.minor.release

rpm包命名格式

name-VERSION-release.arch.rpm
VERSION: major.minor.release --> 其为源代码的发行号
release.arch: rpm包的发行号 
    architecture: i386, x64(amd64), ppc, noarch
redis-3.0.2-1.centos7.x64.rpm

拆包:主包和子包;Linux中的软件包一般有一个主程序的安装包,再就是子程序包,所谓的子程序包就是该软件上的某一功能的安装包,或者说是该程序的一个插件。

主包: name-VERSION-release.arch.rpm
子包: name-function-VERSION-release.arch.rpm
CentOS系统上rpm命令管理程序包

rpm程序包管理器主要实现的功能有:安装、升级、查询、校检以及数据库维护

rpm命令格式

rpm [OPTIONS] [PACKAGE_FILE]

命令选项

-i, --install: 安装
-U, -update, -F, --freshen: 升级
-e, --erase: 卸载
-q, --query: 查询
-V, --verify: 校验
--builddb, --initdb: 数据库的创建

1、安装

rpm {-i|--install} [install-options] PACKAGE_FILE ...

# rpm -ivh PACKAGE_FILE
GENERAL OPTIONS
    -v: verbose,详细信息
    -vv: 更详细的输出

[install-options]

-h: hash marks 输出进度条;每个#表示2%的进度;
--test: 测试安装,检查并报告依赖关系及冲突消息等;
--nodeps: 忽略依赖关系;
    注意:当忽略依赖关系安装程序时,程序安装完成后,有可能不能正常运行,所以该安装选项不建议使用;
--replacepkgs: 重新安装;
    比如说,将某程序的配置文件中信息修改后,想还原该配置文件,但是忘记了之前的配置,此时可以将该配置文件删除后,利用该安装选项对该程序重新安装来恢复其某个配置文件;
--nosignature: 不检查包签名信息,不检查包来源的合法性;
--nodigest: 不检查包完整性信息;
--noscripts: 安装时不执行脚本文件

注意:rpm可以自带脚本

rpm包中的脚本分四类:
preinstall: 安装过程开始之前运行的脚本,%pre,--nopre
postinstall: 安装过程完成之后运行的脚本,%post,--nopost
preuninstall: 卸载过程真正开始执行之前运行的脚本,%preun,--nopreun
postuninstall: 卸载过程完成之后运行的脚本,%postun,--nopostun

安装命令演示

(1) 安装一个rpm软件包

(2) 忽略依赖关系安装

安装php的rpm包时出现依赖关系错误,此时可以忽略依赖关系对软件包进行安装

(3) 测试安装

(4) 重新安装

2、升级

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

-U: 升级或安装
-F: 升级
rpm -Uvh PACKAGE_FILE...
rpm -Fvh PACKAGE_FILE...

[install-options]

--oldpackage: 降级
--foece: 强制升级

注意:

(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版内核;
(2)如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
3、卸载

rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

--allmarches: 卸载所有匹配指定名称的程序包的各版本;
--nodeps: 忽略依赖关系;
--test: 测试卸载,dry run模式
4、查询

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

[select-options]

PACKAGE_NAME: 查询指定程序包是否已经安装,及其版本;
-a, --all: 查询所有已经安装过的包;
-f FILE: 查询指定的文件由哪个程序安装包生成;
-p, --package PACKAGE_FILE: 用于实现对未安装的程序包执行查询操作;
--whatprovides CAPABILITY: 查询指定的CAPABILITY由哪个包提供;
--whatrequires CAPABILITY: 查询指定的CAPABILITY被哪个包所依赖;

[query-options]

--changelog: 查询rpm包的changelog;
-l, --list: 程序包安装生成的所有文件列表;
-i, --info: 程序包相关的信息,版本号、大小、所属组等;
-c, --configfiles: 查询指定的程序提供的配置文件;
-d, --docfiles: 查询指定的程序包提供的文档;
--provides: 列出指定程序包提供的所有CAPABILITY;
-R, --require: 查询指定程序包的依赖关系;
--scripts: 查询程序包自带的脚本片段;

查询命令演示

(1) 查询指定的安装后的程序

(2) 查询指定的文件由哪个程序安装包生成

(3) 查询程序包安装后生成的文件列表或者某程序的文件列表

(4) 列出指定程序包提供的所有CAPABILITY

(5) 查询指定的CAPABILITY由哪个包提供

(6) 查询指定的CAPABILITY被哪个包所依赖

(7) 查询指定程序包的依赖关系

(8) 查询程序包自带的脚本片段

5、校验

软件包的校验一般是验证其来源的合法性以及软件包完整性的验证;来源合法性验证利用数字签名奇数,完整性验证利用单项函数加密技术。

软件包校验命令

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

校验过程:

(1) 首先获取并导入信任的包制作者的密钥

对于CentOS发行版来说,利用下面的命令进行密钥的导入:
# rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

(2) 验证

a. 安装此组织签名的程序时,会自动执行验证;
b. 手动验证:rmp -K PACKAGE_FILE
6、数据库重建

rpm管理器数据库的路径/var/lib/rpm/

获取rpm数据库工具的帮助

CentOS 6: man rpm
CentOS 7: man rpmdb

数据库重建的命令

rpm {--initdb|--rebuilddb}

--initdb: 初始化数据库,当前无任何数据库可实现初始化创建一个新的;当前有时不执行任何操作;
--rebuilddb: 重新构建,通过读取当前系统上所有已经安装过的程序 包进行重新创建;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/33624.html

相关文章

  • Kubernetes Node全解

    摘要:守护进程,充当和不同云提供商工具存储卷负载均衡器等之间的抽象层。除此之外,在上还有一个健康检查端点,以及一些其他状态端点。它就像是节点上运行着的的网络代理和负载均衡器一样,通过在使用实现东西负载均衡。 今晚20:30,Kubernetes Master Class在线培训第四期《企业如何构建CI/CD流水线》即将开播,点击链接:http://live.vhall.com/7294658...

    Guakin_Huang 评论0 收藏0
  • Kubernetes中的负载均衡全解

    摘要:负载均衡器只能与和等特定的云服务提供商一起使用,且均衡器的功能根据提供者而定。因为它是作为一个基于的控制器在内部执行,因此对功能的访问相对不受限制不同于外部负载均衡器,它们中的一些可能无法在层面访问。 很多企业在部署容器的时候都会选择Kubernetes作为其容器编排系统。这是对Kubernetes的可靠性,灵活性和特性广泛的肯定。在这篇文章中,我们将对Kubernetes如何处理一个...

    lansheng228 评论0 收藏0
  • yum和apt-get的区别

    摘要:如果你的包不想开放源代码,你可以制作成,如果开源,用更方便了。形式的源代码软件包安装卸载说明命令将源代码编译并在下生成二进制的包,然后再安装该二进制包即可。显示已安装包裹的信息。 走在通往docker的大道上——yum和apt-get的区别 最后编辑时间:2017年03月09日 最近跟着《第一本docker书》研究docker,由于本人没有相关知识(包括Linux)和经验,被卡的很难受...

    Neilyo 评论0 收藏0
  • Linux软件安装管理之——RPM与YUM详解

    摘要:这里将要介绍的是系列发行版的与的详细使用方法,如需要了解系列发行版的包管理系统可查看我的另一篇文章软件安装管理之与详解。 一、序言 上一篇文章《Linux软件安装管理之——源码安装详解》详细介绍了Linux平台下的源码包安装原理,虽然使用源代码进行软件编译可以具有定制化的设置,但对于Linux distribution的发行商来说,则有软件管理不晚的问题,毕竟不是每个人都会进行源代码编...

    fredshare 评论0 收藏0
  • Linux软件安装管理之——RPM与YUM详解

    摘要:这里将要介绍的是系列发行版的与的详细使用方法,如需要了解系列发行版的包管理系统可查看我的另一篇文章软件安装管理之与详解。 一、序言 上一篇文章《Linux软件安装管理之——源码安装详解》详细介绍了Linux平台下的源码包安装原理,虽然使用源代码进行软件编译可以具有定制化的设置,但对于Linux distribution的发行商来说,则有软件管理不晚的问题,毕竟不是每个人都会进行源代码编...

    Yumenokanata 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<