软件安装与升级——rpm

软件安装与升级——rpm

Linux的自由软件非常多,为了方便软件的管理,目前有两大主流软件管理工具:dpkgRPM。本文主要介绍RPM的相关信息。

RPM与SRPM

RPMRedHat Package Manager的简称,是一种软件管理机制,起初是有RedHad公司发展出来的。RPM是以一种数据库记录的方式来将我们所需的软件安装到Linux系统中。RPM软件包制作时,会将安装软件源码进行编译,并将安装该软件时所需的关联软件记录到软件包的数据库中,。当开始安装软件时,RPM会通过软件包里的数据库数据检查安装环境中是否已安装关联软件,若关联软件已安装则开始安装该软件,若关联软件未安装则不予安装。安装时,RPM会将软件信息写入相关的数据库,以便未来的查询、验证和删除。通过RMP的这些机制,我们可以发现其有以下优点:

  • RPM内含已经编译过的程序与配置文件等数据,可以让用户免除重新编译的困扰
  • RPM在被安装前,会先检查系统的硬盘容量、操作系统版本等,避免文件被错误安装
  • RPM文件本身提供软件版本信息、关联软件名称、软件用途说明、软件所含文件等信息,便于了解软件
  • RPM使用数据库记录文件的相关参数,便于软件升级、移除、查询、验证

但由于RPM的这个机制,其在软件管理时也有以下问题:

  • 软件安装时的环境必须与制作软件包时的环境一致
  • 安装之前需要安装软件的关联软件
  • 删除软件时,与该软件关联的底层软件不可先删除,否则可能造成整个系统的问题

为了解决以上问题,SRPM出现了。SRPMSource RPM的意思,RPM软件包里含有软件的原始码,SPRM软件包提供的软件内容并没有经过编译,提供的是原始码。通常SRPM的扩展名是以*.src.rpm的格式命名。虽然SRPMTarball一样只提供原始码,但是SRPM里面还含有软件所需的关联软件说明以及所有RPM文件所提供的数据。SRPMRPM不同的是软件包提供了参数配置文件configuremakefile。当我们使用SRPM软件包安装软件时,我们要执行以下步骤:

  • 先将软件以RPM管理的方式编译,将SRPM编译成RPM文件
  • 然后将编译完成的RPM文件安装到Linux系统中

下面是RPMSRPM的简单比较。

软件包 文件格式 直接安装 程序类型 可否修改参数并编译
RPM xxx.rpm 已编译 不可
SRPM xxx.src.rpm 原始码,未编译

软件包名称的命名格式

一般情况下,一个RPM软件包的名称包含了软件名称、版本信息、编译次数、硬件操作平台这些信息。以软件包rp-pppoe-3.11-7.el7.x86_64.rpm为例。

  • 软件名称:每个软件的名称,以上软件包的软件名称为rp-pppoe
  • 版本信息:软件的版本,版本有主版本和次版本。以上软件包的主版本为3,次版本为11。次版本就是在主版本的架构下改动部分原始码的内容
  • 编译次数:由于一些bug或安全上的考虑,软件的代码会更新并编译
  • 硬件操作平台:主要是指操作平台的CPU,由于RPM可以适用在不同的操作平台上,但不同的平台CPU设定的参数还是有所差异性。开发者可以根据不同的CPU设定不同的参数,从而充分利用CPU,让软件性能更好。以下是软件包中常见的一些名称。
平台名称 适合平台说明
i386 几乎适用于所有的 x86 平台,不论是旧的 pentum 还是新的 Intel Core 2K8 系列的 CPU 等等,都可以正常工作。iIntel 兼容的 CPU 的意思,386CPU的等级
i586 针对586等级的计算机进行优化编译,586等级的CPU有:pentum 第一代 MMX CPUAMDK5/K6 系列等
i686 pentum II 以后的 Intel 系列 CPU,及 K7 以后等级的CPU。目前市场上几乎仅剩 P-II以后的CPU
x86_64 针对64位的CPU进行优化编译设定,包括 IntelCore 2 以上等级 CPU,以及 AMDAthlon64 以后等级的 CPU
noarth 没有硬件等级限制,一般这种类型的 RPM 文件中没有 binary program 存在,较常用于 shell script 方面的软件

RPM的使用

RPM安装软件时,软件文件存放位置如下表。

目录名称 存放文件
/etc 配置文件
/usr/bin 可执行文件
/usr/lib 程序使用的动态函数库
/usr/share/doc 基本的软件使用手册与说明文件
/usr/share/man man page 文件

RPM安装

以下是RPM安装软件时的基本语法。

# RPM安装
rpm -ivh package_name [options]

选项与参数:

  • -i:install 的意思
  • -v:查看详细的安装过程
  • -h:安装时显示安装进度
  • options:安装时的一些选项,以下是RPM安装时常用的一些选项
选项 用途
–nodeps 强制安装,当软件因关联软件未安装而无法安装时, 使用该选项可以安装软件,但安装的软件可能会因为缺少关联软件而无法正常使用
–replacefiles 覆盖文件,当软件安装过程中出现 某个文件已被安装在系统上版本不和(confilcting files)的信息时,可以使用该选项来直接覆盖文件,但覆盖之前需要考虑清楚,因为覆盖后无法复原
–replacepkgs 重新安装已经安装过的软件,当系统提示某软件已安装的信息,无法继续安装时,可以使用该选项来重新安装相应的软件
–force --replacefiles--replacepkgs的综合
–test 想要测试某软件是否可以被安装到使用者的Linux环境中,可通过该选项来进行测试,找出软件关联问题,如:rpm -ivh pkgname.i386.rpm --test
–justdb 由于RPM数据库破损或其他缘故产生错误时,可使用这个选项来更新软件在数据库内的相关信息
–nosignature 想要忽略数字签名的检查时,可以使用该选项
–prefix new_path 要将软件安装到非正规目录时,可以使用该选项。如某软件要安装到/usr/local中,而不是正规的/usr/bin/etc等目录中,就可以通过--prefix /usr/local来处理
–noscripts 不想让某软件在安装时自动执行一些系统指令时,可以使用该选项。RPM除了可以将文件放置到指定位置外,还可以自动执行一些前置作业的指令,如数据库的初始化

RPM升级与更新

RPM可以通过-Uvh-Fvh来进行升级,而选项(options)的使用则和安装时一样。

# RPM升级
rpm -Uvh package_name [options]
或
rpm -Fvh package_name [options]

-Uvh-Fvh是有一定的区别的。

指令 用途
-Uvh 后面接的软件没有安装过,系统会予以直接安装;后面接的软件有安装的旧版,系统自动更新至新版
-Fvh 后面接的软件并未安装,系统不会安装该软件;后面接的软件有安装,软件会被升级

RPM查询

RPM查询的时候,实际查询的是/var/lib/rpm这个目录下的数据库文件。此外,RPM可以查询未安装的软件信息。

rpm -qa				# 查询所有已安装软件
rpm -q[licdR] 已安装软件名称	# 查询某一已安装软件
rpm -qf 存在于系统上面的某个文件名	# 查询已安装软件的配置文件
rpm -qp[licdR] 未安装的某个文件名	# 查阅RPM文件

下面是选项与参数介绍。
查询已安装软件的信息:

  • -q:仅查询后面接的软件名称是否有安装
  • -qa:列出所有已安装在本机Linux系统上的所有软件名称
  • -qi(information):列出该软件的详细信息,包含开发商、版权与说明等
  • -ql(list):列出该软件所有的文件与目录所在完整文件名
  • -qc(configure):列出该软件的所有配置文件,即找出在/etc下的相关文件
  • -qd(document):列出该软件的所有说明文件,找出与man有关的文件
  • -qR(Required):找出与该软件有关的关联软件所含的文件
  • -qf(filename):由后面接的文件名,找出该文件属于哪一个已安装的软件
  • -q --scripts:列出是否含有安装后需要执行的脚本文件

查询某个 RPM 文件内含有的信息:

  • qp[icdlR]-qp后面接的所有参数与上面的含义一致,但是用于找出某个RPM文件内的信息,而不是已安装的软件信息

RPM验证与数字签名

验证

验证的机制就是使用/var/lib/rpm底下的数据库内容来比对目前Linux系统环境下的所有软件。这可以给系统管理员提供一个有效的管理机制。当数据不小心遗失,或误删了某个软件文件,或忘记修改了哪一个软件文件内容时,就可以用这个方法来验证比对原本的文件系统,从而找出那个文件。验证语法如下:

rpm -Va
rpm -V 已安装的软件名称
rpm -Vp 某个RPM 文件的名称
rpm -Vf 在系统上面的的某个文件

选项与参数

  • -V:后面接软件名称,若该软件所含的文件被更改过,才会被列出来
  • -Va:列出目前系统上面所有可能被改动过的文件
  • -Vp:后面接的是文件名,列出该软件内可能被改动过的文件
  • -Vf:判断某个文件是否被改动过,有被改动过则被列出来

验证文件/etc/passwd如下:

[root@instance-d619ad0f ~]# rpm -Vf /etc/passwd
S.5....T.  c /etc/hosts.deny
S.5....T.  c /etc/profile
.M.......  g /var/log/lastlog

可以看到文件名称前面有两段字符,第一段字符有SM5T,这个是对文件的一个描述,从左到右的顺序如下:

  • S(file Size differs):文件大小是否被改变
  • M(Mode differs):文件类型或文件属性(rwx)是否被改变
  • 5(MD5 sum differs):MD5加密内容已经不同
  • D(Device major/minor number mis-match):装置的主/次代码已经改变
  • L(readLink(2) path mis-match):Link路径已经改变
  • U(User ownership differs):文件的所属人已被改变
  • G(Group ownership differs):文件的所属群组已被改变
  • T(mTime differs):文件的建立时间已被改变
  • P(caPabilities differs):功能已被改变

第二段有cg这些字符,代表的是文件类型。文件类型有以下这些:

  • c(config file):配置文件
  • d(documentation):文件数据文件
  • g(ghost file):鬼文件,通常是该文件不被某个软件所包含,较少发生
  • l(license file):许可证文件
  • r(read me):字数文件

数字签名

RPM验证是一个非常实用的工具,但它只能验证软件内的信息与/var/lib/rpm里的数据库信息,如果软件文件所提供的数据本身就有问题,使用验证是无法确定软件的正确性的。在使用Tarball安装软件时,我们可以使用md5指纹码来检查,但是md5指纹码也有可能会被窜改的。此时,我们可以通过数字签名来检验软件的来源。
软件开发商原厂推出的软件会有一个厂商自己的签名系统,这个签名会被数字化。厂商可以用数字签名系统产生一个专属于该软件的签名,并将该签名的公钥(public key)释出。当要安装一个RPM文件时,会有以下的步骤:

  1. 首先必须要先安装原厂释出的公钥文件
  2. 实际安装原厂的RPM软件时,rpm指令会读取RPM文件的签名信息,与本机系统内的签名信息比对
  3. 若签名相同则予以安装,若找不到相关的签名信息,则给予警告并停止安装

CentOS使用的数字签名系统是GNU计划的GnuPG(GNU Privacy Guard, GPG)。在CentOS中,原厂释出的GPG数字签名公钥文件位于/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7,则安装如下:

[root@instance-d619ad0f ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

安装完之后,就可以通过数字签名来查询验证软件了。

# 列出软件的密钥名称
[root@instance-d619vf0h ~]# rpm -qa | grep pubkey
gpg-pubkey-b6792c39-53c4fbdd
gpg-pubkey-8fae34bd-538f1e51
gpg-pubkey-f4a80eb5-53a7ff4b
gpg-pubkey-352c64e5-52ae6884
# 查询软件相关信息
[root@instance-d619vf0h ~]# rpm -qi gpg-pubkey-b6792c39-53c4fbdd
Name        : gpg-pubkey
Version     : b6792c39
Release     : 53c4fbdd
Architecture: (none)
Install Date: Mon 04 Jun 2018 07:39:40 PM CST
Group       : Public Keys
Size        : 0
License     : pubkey
Signature   : (none)
Source RPM  : (none)
Build Date  : Tue 15 Jul 2014 06:01:01 PM CST
Build Host  : localhost
Relocations : (not relocatable)
Packager    : CentOS-7 Debug (CentOS-7 Debuginfo RPMS) <[email protected]>
Summary     : gpg(CentOS-7 Debug (CentOS-7 Debuginfo RPMS) <[email protected]>)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
省略...
-----END PGP PUBLIC KEY BLOCK-----

RPM 软件卸载与重建数据库

软件卸载的过程一定要由最上层到最下层的顺序移除,否则会因为软件关联问题导致某些软件无法移除。

# 语法
rpm -e 软件名称

RPM操作时肯能会导致RPM数据库/var/lib/rpm内的文件破损,此时可以用--rebuilddb这个选项来重建数据库。

# 语法
rpm --rebuilddb

你可能感兴趣的:(Linux)