二十二、软件安装RPM、SRPM与YUM

一、软件管理员简介

在前一章我们提到以源代码的方式来安装软件,也就是利用厂商释出的 Tarball 来进行软件的安装。这种情况下每次安装软件都需要侦测操作系统与环境、设置编译参数、实际的编译、 最后还要依据个人喜好的方式来安装软件到定位。整个过程十分繁琐。

假设我们的 Linux 系统与厂商的系统一模一样,那么在厂商的系统上面编译出来的可执行文件, 也可以在我们的系统上运行。也就是说,厂商先在他们的系统上面编译好了我们使用者所需要的软件, 然后将这个编译好的可执行的软件直接释出给使用者来安装,如此一来,由于我们本来就使用厂商的 Linux distribution ,所以当然系统 (硬件与操作系统) 是一样的,那么使用厂商提供的编译过的可执行文件就没有问题啦!

如果在安装的时候加上一些与这些程序相关的信息,将这些信息创建成为数据库,那就可以进行安装、反安装、 升级与验证等等的相关功能了(类似 Windows 下面的“新增移除程序”)。 Linux 上面至少就有两种常见的这方面的软件管理员,分别是 RPM与 Debian 的 dpkg 。CentOS 主要是以 RPM 为主。

1.1 RPM与DPKG

Linux 开发商先在固定的硬件平台与操作系统平台上面将需要安装或升级的软件编译好, 然后将这个软件的所有相关文件打包成为一个特殊格式的文件,在这个文件内还包含了预先检查系统与前驱软件的脚本, 并提供记载该软件提供的所有文件信息等。最终将这个软件文件释出。用户端取得这个文件后,只要通过特定的指令来安装, 那么该软件文件就会依照内部的脚本来侦测相依的前驱软件是否存在,若安装的环境符合需求,那就会开始安装, 安装完成后还会将该软件的信息写入软件管理机制中,以达成未来可以进行升级、移除等动作。

目前对于Linux安装方式最常见的有两种,分别是:

  • dpkg:这个机制最早是由 Debian Linux 社群所开发出来的,通过 dpkg 的机制,Debian 提供的软件就能够简单的安装起来,同时还能提供安装后的软件信息,实在非常不错。 只要是衍生于 Debian 的其他 Linux distributions 大多使用 dpkg 这个机制来管理软件的, 包括 B2D, Ubuntu 等等。
  • RPM:这个机制最早是由 Red Hat 这家公司开发出来的,后来实在很好用,因此很多distributions 就使用这个机制来作为软件安装的管理方式。包括 Fedora, CentOS, SuSE等等知名的开发商都是用这咚咚。

如前所述,不论 dpkg/rpm 这些机制或多或少都会有软件属性相依的问题,那该如何解决呢?
其实前面不是谈到过每个软件文件都有提供相依属性的检查吗?那么如果我们将相依属性的
数据做成列表, 等到实际软件安装时,若发生有相依属性的软件状况时,例如安装 A 需要先
安装 B 与 C ,而安装 B 则需要安装 D 与 E 时,那么当你要安装 A ,通过相依属性列表,管
理机制自动去取得 B, C, D, E 来同时安装, 不就解决了属性相依的问题吗?

没错!您真聪明!目前新的 Linux 开发商都有提供这样的“线上升级”机制,通过这个机制, 原
版光盘就只有第一次安装时需要用到而已,其他时候只要有网络,你就能够取得原本开发商
所提供的任何软件了呢! 在 dpkg 管理机制上就开发出 APT 的线上升级机制,RPM 则依开
发商的不同,有 Red Hat 系统的 yum , SuSE 系统的 Yast Online Update (YOU) 等。

在这里插入图片描述

二、dpkg介绍

2.1 简介

dpkg是一个用于安装、建立、移除以及管理Debian包的工具。使用dpkg的一个主要同时也是用户友好的前端是aptitude。dpkg本身可以通过命令行进行控制,其中dpkg可以带一个、零个或多个参数。其中action-parameter告知dpkg需要做什么,options控制dpkg的某些行为。

在这里插入图片描述

2.2 关于包的信息

dpkg中维护了关于可用包的一些信息。这些信息被划分为三类:states,selection states以及flags。这些值主要通过dselect进行更改。

2.2.1 states

  • not-installed:这个包还没有在我们的系统上安装
  • config-files:只有包的configuration file在我们的系统上存在
  • half-installed:这个包的安装步骤已经开始,但是出于某些原因并没有完成
  • unpacked:这个包已经unpacked,但是还没有进行configured
  • half-configured:这个包已经unpacked并且开始了configuration,但是由于某些原因没有完成
  • triggers-awaited:这个包等待着由另外一个包来trigger processing
  • triggers-pending:这个包已经进行了triggered
  • installed:这个包已经正确的进行了unpacked以及configured

2.2.2 selection state

  • install:这个包被选定为进行安装
  • hold:a packet marked to be on hold is not handled by dpkg,unless forced to do that with option --force-hold
  • deinstall:这个包被选定为进行deinstallation(我们想要移除该包的全部文件,除了配置文件)
  • purge:这个包被选定为被purged(我们想要移除该包位于系统目录中的全部文件,包括配置文件)
  • unknown:包的选定是未知的。a package that is also in a not-installed state, and with an ok flag will be forgotten in the next database store.

2.2.3 flags

  • ok:一个标记为ok的包处于已知的state,但是可能需要更进一步的处理
  • reinstreq:一个标记为reinstreq的包是broken的并且需要reinstallation。这些包不能被移除,除非用选项–force-remove-reinstreq强制执行

2.3 动作


dpkg-query actions

  • -l,–list package-name-pattern:列出符合给定模式的包
  • -s,–status package-name:汇报出给定包的状态
  • -L,–listfiles package-name:list files installed to your system from package-name
  • -S,–search filename-search-pattern:search for a filename from installed packages
  • -p,–print-avail package-name:display details about package-name,as found in /usr/local/var/lib/dpkg/available. Users of APT-based frontends should use apt-cache show package-name instead

2.4 选项

参考:

https://man7.org/linux/man-pages/man1/dpkg.1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值