Linux基础学习笔记之——软件安装:RPM,SRPM与YUM

软件安装:RPM,SRPM与YUM

1、软件管理员简介

以源码的方式来安装软件,也就是利用厂商发布的 Tarball 来进行软件的安装,每次安装软件都需要侦测操作系统的环境、设定编译参数、实际的编译、最后还要依据个人喜好的方式来安装软件到定位。这个过程真的很麻烦。如果能够将软件预设在相同的硬件与操作系统上面编译好的话,不就能让相同的 Linxu 发行版具有完全一致的软件版本了吗?那么厂商编译过的可执行文件,我们不就可以直接使用了吗?如果在安装的时候还加上一些与这些程序相关的信息,将它建立成为数据库,那不就可以进行安装、卸载、升级与验证等等的相关功能了?确实如此,Linux 上面至少就有两种常见的这方面的软件管理员,分别是 RPM 和 Debian 的 dpkg。

1.1、Linux 界的两大主流:RPM 和 DPKG

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

目前在 Linux 界软件安装方式最常见的有两种,分别是:

  • dpkg:

    主要是衍生于 Debian 的其他 Linux 发行版,包括:B2D,Ubuntu 等。

  • rpm:

    包括:Fedora,CentOS,SuSE 等。

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

发行版代表 软件管理机制 使用指令 在线升级机制(指令)
Red Hat/Fedora RPM rpm,rpmbuild YUM(yum)
Debian/Ubuntu DPKG dpkg APT(apt-get)

1.2、什么是 RPM 和 SRPM

RPM 全名为 “Redhat Package Manager”。RPM 是以一种数据库记录的方式来将你所需要的软件安装到你的 Linux 系统的一套管理机制。它最大的特点是将你要安装的软件先编译过,并且打包成为 RPM 机制的包装文件,通过安装好的软件里面默认的数据库记录,记录这个软件安装的时候具备的相依赖性软件。当安装到你的主机时,RPM 会先依照软件里面的数据查询 Linux 主机的相依赖性软件是否满足,若满足组予以安装,若不满足则不予以安装。那么安装的时候就将该软件的信息整个写入 RPM 的数据库中,以便未来的查询、验证与卸载。

但这样也造成了一定的困扰。由于 RPM 文件是已经包装好的数据,也就是说,里面的数据已经被 “编译完成” 了!所以,该软件几乎只能安装在原本默认的硬件与操作系统版本中。即你的主机环境必须要与当初建立这个软件文件的主机环境完全一样才行!所以,可想而知,不同的发行版所发布的 RPM 文件,并不能用在其他的发行版上。因此,这样可以发现这些软件管理机制的问题是:

  1. 软件文件安装的环境必须与打包时的环境需求一致或相当;
  2. 需要满足软件的相依赖性需求;
  3. 卸载时需要特别小心,最底层的软件不能先移除,否则可能造成整个系统的问题!

那怎么办呢?如果我真的想要安装其他发行版提供好的 RPM 文件呢?就是用 SRPM。顾名思义,他就是 Source RPM 的意思,也就是 RPM 里面包含源码。特别注意的是,这个 SRPM 所提供的软件内容 “并没有经过编译”,它提供的是源码

通常 SRPM 的拓展名是以 ***.src.rpm 这种格式命名的。不过,既然 SRPM 提供的是源码,那它和 Tarball 有什么区别呢?SRPM 虽然是源码,但是它仍然提供了该软件所需要的相依赖性软件说明、以及所有 RPM 文件所提供的数据。同时,它与 RPM 不同的是,它也提供了参数配置文件(就是 configure 和 makefile)。所以,如果你下载的是 SRPM,那么安装的时候,就必须

  • 先将该软件以 RPM 管理的方式编译,此时 SRPM 会被编译成 RPM 文件;
  • 然后将编译完成的 RPM 文件安装到 Linux 系统中。
文件格式 文件名格式 直接安装与否 内含程序类型 可否修改参数并编译
RPM xxx.rpm 已编译 不可
SRPM xxx.src.rpm 不可 未编译原码

1.3、什么是 i386,i586,i686,noarch,x86_64

现在我们知道 RPM 和 SRPM 的格式分别为:

xxxxxxx.rpm		#RPM 的格式,已经被编译且包装完成的 rpm 文件
xxxx.src.rpm	#SRPM 的格式,包含未编译的源码信息

那么我们怎么知道某个软件的版本、使用的平台、编译发布的次数呢?只要通过文件名就可以了:

zabbix-server-mysql       -5.0.3          -1          .el7.x86_64    .rpm
#软件名称                软件的版本信息      发布的次数    适合的硬件平台    拓展名
  • 软件名称

  • 版本信息

  • 发布的次数

    通常就是编译的次数!那么为什么要重复编译呢?这是由于同一版的软件中,可能由于某些 bug 或者是安全上的顾略,所以必须进行小幅度的 patch 或重设一些编译参数。设定完之后重新编译并打包成 RPM 文件!因此就有不同的打包次数了!

  • 操作系统平台

    我们可以针对比较高阶的 CPU 来进行优化参数的设定,这样才能使用高阶 CPU 所带来的硬件加速功能。所以就有所谓的 i386,i586,i686,noarch,x86_64 等的文件名出现了!

    平台名称 说明
    i386 几乎适用于所有的 x86 平台。
    i586 针对 586 等级的计算机
    i686 针对 686 等级的计算机
    x86_64 针对 64 位的 CPU
    noarch 就是没有任何硬件等级上的限制。一般来说,这种类型的 RPM 文件,里面应该没有 binary program 的存在,较常见的是属于 shell script 方面的软件。

1.4、RPM 的优点

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

1.5、RPM 属性相依赖性的克服方式:YUM 在线升级

为了重复利用既有的软件功能,因此很多软件都会以函数库的方式发布出部分功能,以方便其他软件的呼叫应用。此外,为了节省用户的数据量,目前的 Linux 发行版在发布软件时,都会将软件的内容分为一般使用与开发使用两大类。所以你才会看到类似 pam-x.x.rpm 与 pam-devel-x.x.rpm 之类的文件名。而预设的情况下,大部分的 software-devel-x.x.rpm 都不被安装。

因为上述现象,因此 RPM 软件文件就会有所谓的属性相依赖的问题产生。那如何解决呢?前面不是谈到 RPM 软件文件内部会记录相依赖属性的数据吗?那如果我先将这些依赖属性先列出,在有安装需求的时候,先到这个列表去找,同时与系统内已安装的软件相比较,没安装到的相依赖软件一口气同时安装起来,那不就解决了相依赖属性的问题吗?这就是 YUM 机制的由来

CentOS:(1)先将发布的软件放置到 YUM 服务器内,然后(2)分析这些软件的相依赖属性问题,将软件内的记录信息写下来(header)。然后再将这些信息分析后记录成软件相关性的列表。这些列表数据与软件所在的本机或网络位置可以称呼为容器或软件仓库(repository)当客户端有安装软件的需求时,客户端会主动地向地向网络上面的 yum 服务器的软件库地址下载清单列表,然后通过列表的数据与本机的 RPM 数据库已存在的软件数据相比较,就能够一口气安装所有需要的具有相依赖性的软件了。整体流程如下:
在这里插入图片描述

所以,软件仓库内的列表会记载每个文件的相依赖性关系,以及所有文件的网络位置(URL)!由于记录了详细的软件网络位置,所以有需要的时候,当然就会自动从网络下载该软件了!

当客户端有升级、安装需求时,yum 会向软件库要求清单的更新,等到清单更新到本机的 /var/cache/yum 里面后,等一下更新时就会用到这个本机清单与本机的 RPM 数据库进行比较,这样就知道该下载什么软件。接下来 yum 就会跑到软件服务器(yum server)下载所需要的软件(因为有记录软件所在的网址),然后通过 RPM 的机制开始安装软件了!


2、RPM 软件管理程序:rpm

2.1、RPM 默认安装的路径

一般来说,RPM 类型的文件在安装的时候,会先去读取文件内记载的设定参数内容,然后将该数据用来对比 Linux 系统的环境,以找出是否有属性相依赖的软件尚未安装的问题。若环境检验合格了,那么 RPM 文件就开始被安装到你的 Linux 系统上。安装完毕后,该软件相关的信息会被写入 /var/lib/rpm/ 目录下的数据库文件中。上面的这个目录很重要!因为未来如果我们有任何软件升级的需求,版本之间的比较就是来自于这个数据库。而如果你想要查询系统已经安装的软件,也是从这里查询的。同时,目前的 RPM 也提供数字签名信息,这些数字签名也是这个目录内记录的呢!

那么软件内的文件到底放置在哪?当然与文件系统有关:

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

2.2、RPM 安装(install)

[root@li ~]# rpm -ivh package_name
选项与参数:
-i:install 的意思
-v:查看更细节的安装信息画面
-h:以安装信息列显示安装进度
#1、安装 zabbix-agent 软件
[root@li ~]# rpm -ivh ~/zabbix-agent2-5.0.3-1.el7.x86_64.rpm
警告:/root/zabbix-agent2-5.0.3-1.el7.x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID a14fe591: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:zabbix-agent2-5.0.3-1.el7        ################################# [100%]

#2、安装两个以上文件时
[root@li ~]# rpm -ivh A.rpm B.rpm

#3、直接由网络上的某个文件安装,以网址来安装
[root@li ~]# rpm -ivh URL/packagename.rpm

2.3、RPM 升级与更新(upgrade/freshen)

参数 说明
-Uvh 后面接的软件即使没有安装过,则系统将给予直接安装;若后面接的软件有安装过旧版,则系统自动更新至新版
-Fvh 后面的软件并未安装到系统上,则不会被安装;即只安装到系统上的软件才会被升级

2.4、RPM 查询(query)

RPM 在查询的时候,其实查询的地方是在 /var/lib/rpm/ 这个目录下的数据库文件。另外,RPM 也可以查询未安装的 RPM 文件内的信息!那如何去查询呢?

[root@li ~]# rpm -qa	#已安装软件
[root@li ~]# rpm -q[licdR] 已安装的软件	
[root@li ~]# rpm -qf 存在于系统上面的某个文件名
[root@li ~]# rpm -qp[licdR] 未安装的某个文件名	#查阅 RPM 文件
选项与参数:
查询已安装的软件信息:
-q:仅查询,后面接的软件名称是否有安装
-qa:列出所有的,已经安装在本机上的所有软件名称
-qi:列出该软件的详细信息,包含开发商、版本和说明等
-ql:列出该软件所有的文件与目录所在完整文件名
-qc:列出该软件的所有配置文件(找出在 /etc 底下的文件名而已)
-qd:列出该软件的所有说明文件(找出与 man 有关的文件而已)
-qR:列出与该软件有关的相依赖性的软件(Required 的意思)
-qf:后面接文件名,找出该文件属于哪一个已安装的软件
-q --scripts:列出是否含有安装后需要执行的脚本文件,可用于 debug
查询某个 RPM 文件内含有的信息:
-qp[icdlR]:与上面的功能一样
#1、找出是否安装了 logrotate 软件
[root@li ~]# rpm -q logrotate
logrotate-3.8.6-19.el7.x86_64
[root@li ~]# rpm -q logrotating
未安装软件包 logrotating

#2、列出上面软件,属于该软件所提供的所有目录与文件
[root@li ~]# rpm -ql logrotate
/etc/cron.daily/logrotate
...

#3、列出 logrotate 这个软件的相关说明数据
[root@li ~]# rpm -qi logrotate
Name        : logrotate
Version     : 3.8.6
Release     : 19.el7
Architecture: x86_64
Install Date: 2020年07月31日 星期五 17时10分30秒
Group       : System Environment/Base
Size        : 107068
License     : GPL+
Signature   : RSA/SHA256, 2020年04月04日 星期六 05时01分10秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : logrotate-3.8.6-19.el7.src.rpm
Build Date  : 2020年04月01日 星期三 11时26分19秒
Build Host  : x86-02.bsys.centos.org		#是在哪部户籍上面编译的
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : https://github.com/logrotate/logrotate
Summary     : Rotates, compresses, removes and mails system log files
...

#4、分别找出 logrotate 的配置文件与说明文件
[root@li ~]# rpm -qc logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf
/etc/rwtab.d/logrotate

[root@li ~]# rpm -qd logrotate
/usr/share/doc/logrotate-3.8.6/CHANGES
/usr/share/doc/logrotate-3.8.6/COPYING
/usr/share/man/man5/logrotate.conf.5.gz
/usr/share/man/man8/logrotate.8.gz

#5、若要成功安装 logrotate,他需要什么软件
[root@li ~]# rpm -qR logrotate
/bin/sh
/bin/sh
config(logrotate) = 3.8.6-19.el7
coreutils >= 5.92
...

#6、找出上面的 /bin/sh 是哪个软件提供的
[root@li ~]# rpm -qf /bin/sh
bash-4.2.46-34.el7.x86_64

3、YUM 在线升级机制

3.1、利用 yum 进行查询、安装、升级与移除功能

3.1.1、查询功能:yum [list|info|search|provides|whatprovides] 参数

[root@li ~]# yum [option] [查询工作项目] [相关参数]
选项与参数:
[option]:主要的选项,包括有:
	-y:当 yum 要等待用户输入时,这个选项可以自动提供 yes 的响应
	--installroot=/path:将该软件安装在 /path 而不使用默认路径
[查询工作项目] [相关参数]:
	search:搜寻某个软件名称或者是描述的重要关键字
	list:列出目前 yum 所管理的所有的软件名称与版本,优点类似于 rpm -qa
	info:同上,不过有点类似于 rpm -qai
	provides:从文件去搜寻软件!类似 rpm -qf
#1、搜寻磁盘阵列(raid)相关软件有哪些
[root@li ~]# yum search raid
已加载插件:fastestmirror			#yum 系统自己找出最近的 yum server
Loading mirror speeds from cached hostfile	#找出速度最快的那一部 yum server
 * base: mirror.bit.edu.cn			#底下三个软件库,且来源为该服务器
 * extras: mirrors.163.com
 * updates: mirrors.163.com
 ======================================= N/S matched: raid ========================================
dmraid.i686 : dmraid (Device-mapper RAID tool and library)
dmraid.x86_64 : dmraid (Device-mapper RAID tool and library)
dmraid-devel.x86_64 : Development libraries and headers for dmraid.
...
#在冒号(:)左边的是软件名,右边的则是在 RPM 内的 name 设定(软件名)

#2、找出 mdadm 这个软件的功能为何
[root@li ~]# yum info mdadm
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.bit.edu.cn
 * extras: mirrors.163.com
 * updates: mirrors.163.com
已安装的软件包
名称    :mdadm
架构    :x86_64
版本    :4.1
发布    :4.el7
大小    :1.0 M
源    :installed		#已安装
来自源:base
简介    : The mdadm program controls Linux md devices (software RAID arrays)
网址    :http://www.kernel.org/pub/linux/utils/raid/mdadm/
协议    : GPLv2+
描述    : The mdadm program is used to create, manage, and monitor Linux MD (software
         : RAID) devices.  As such, it provides similar functionality to the raidtools
         : package.  However, mdadm is a single program, and it can perform
         : almost all functions without a configuration file, though a configuration
         : file can be used to help with some common tasks.

#3、列出 yum 服务器上面提供的所有软件名称
[root@li ~]# yum list
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.bit.edu.cn
 * extras: mirrors.163.com
 * updates: mirrors.163.com
已安装的软件包
NetworkManager.x86_64                                1:1.18.4-3.el7                      @anaconda
NetworkManager-libnm.x86_64
...
可安装的软件包
389-ds-base.x86_64                                   1.3.10.1-14.el7_8                   updates
389-ds-base-devel.x86_64                             1.3.10.1-14.el7_8                   updates
389-ds-base-libs.x86_64
...
#上面提供的意义为: 软件名称									版本							在哪个软件库内

#4、列出目前服务器上可供本机进行升级的软件有哪些
[root@li ~]# yum list updates
更新的软件包
bind-export-libs.x86_64                          32:9.11.4-16.P2.el7_8.6                   updates
binutils.x86_64                                  2.27-43.base.el7_8.1                      updates
ca-certificates.noarch                           2020.2.41-70.0.el7_8                      updates
...

#5、列出提供 passwd 这个文件的软件有哪些
[root@li ~]# yum provides passwd
passwd-0.79-6.el7.x86_64 : An utility for setting or changing passwords using PAM
源    :base
passwd-0.79-6.el7.x86_64 : An utility for setting or changing passwords using PAM
源    :@anaconda

练习:利用 yum 功能,找出以 pam 为开头的软件名称有哪些?而其中尚未安装的又有哪些?

[root@li ~]# yum list pam*
已安装的软件包
pam.x86_64                                       1.1.8-23.el7                            @anaconda
可安装的软件包
pam.i686                                         1.1.8-23.el7                            base
pam-devel.i686                                   1.1.8-23.el7                            base
pam-devel.x86_64                                 1.1.8-23.el7                            base
pam_krb5.i686                                    2.4.8-6.el7                             base
pam_krb5.x86_64                                  2.4.8-6.el7                             base
pam_pkcs11.i686                                  0.6.2-30.el7                            base
pam_pkcs11.x86_64                                0.6.2-30.el7                            base
pam_snapper.i686                                 0.2.8-4.el7                             base
pam_snapper.x86_64                               0.2.8-4.el7                             base
pam_ssh_agent_auth.i686                          0.10.3-2.21.el7                         base
pam_ssh_agent_auth.x86_64                        0.10.3-2.21.el7                         base

3.1.2、安装/升级功能:yum [install|update] 软件

[root@li ~]# yum [option] [安装与升级的工作项目] [相关参数]
选项与参数:
	install:安装软件
	update:升级软件,若整个系统要升级,直接接 update 即可
#1、将未安装的 pam-devel 安装起来
[root@li ~]# yum install pam-devel
已加载插件:fastestmirror			#首先的 5 行在找出最快的 yum server
Loading mirror speeds from cached hostfile
 * base: mirror.bit.edu.cn
 * extras: mirrors.163.com
 * updates: mirrors.163.com
正在解决依赖关系		#接下来处理依赖关系
--> 正在检查事务
---> 软件包 pam-devel.x86_64.0.1.1.8-23.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

==================================================================================================
 Package                 架构                 版本                       源                  大小
==================================================================================================
正在安装:
 pam-devel               x86_64               1.1.8-23.el7               base               185 k

事务概要
==================================================================================================
安装  1 软件包			#要安装的是一个软件

总下载量:185 k
安装大小:528 k
Is this ok [y/d/N]: y
Downloading packages:
pam-devel-1.1.8-23.el7.x86_64.rpm                                          | 185 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : pam-devel-1.1.8-23.el7.x86_64                                                 1/1
  验证中      : pam-devel-1.1.8-23.el7.x86_64                                                 1/1

已安装:
  pam-devel.x86_64 0:1.1.8-23.el7

完毕!

3.1.3、移除功能:yum [remove] 软件

[root@li ~]# yum remove pam-devel
已加载插件:fastestmirror
正在解决依赖关系
--> 正在检查事务
---> 软件包 pam-devel.x86_64.0.1.1.8-23.el7 将被 删除
--> 解决依赖关系完成

依赖关系解决

==================================================================================================
 Package                架构                版本                         源                  大小
==================================================================================================
正在删除:
 pam-devel              x86_64              1.1.8-23.el7                 @base              528 k

事务概要
==================================================================================================
移除  1 软件包			#没有依赖关系,仅移除一个软件

安装大小:528 k
是否继续?[y/N]:y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在删除    : pam-devel-1.1.8-23.el7.x86_64                                                 1/1
  验证中      : pam-devel-1.1.8-23.el7.x86_64                                                 1/1

删除:
  pam-devel.x86_64 0:1.1.8-23.el7

完毕!

3.2、yum 的配置文件

软件库最重要的就是那个 “repodata” 的目录,该目录是分析 RPM 软件后所产生的软件属性依赖数据放置处!因此,当你要找软件库的网址时,最重要的就是分析该网址底下一定有名为 repodata 的目录存在配置文件一般在 /etc/yum.repos.d/ 目录下

[root@li ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

上面仅列出了 base 这个软件库的内容而已,上面的数据需要注意的是:

  • [base]:代表软件库的名字!中括号一定要存在,里面的名称可以随意取。但是不能有两个相同的软件库名称,否则 yum 会不晓得该到哪里去找软件库相关软件列表文件;
  • name:只是说明一下这个软件库的意义而已,重要性不高!
  • mirrorlist=:列出这个软件库可以使用的映射站点,如果不想使用可以批注;
  • baseurl=:这个最重要,因为后面接的是软件库的实际网址!mirrorlist 是由 yum 程序自行去连接映像站点,baseurl 则是指定固定的一个软件库网址!
  • enable=1:让这个软件库被启动,enable=0 表示不启动;
  • gpgcheck=1:指定是否需要查询 RPM 文件内的数字签名;
  • gpgkey=:就是数字签名所在的位置。

接下来我们修改文件的内容,使用速度更快的国内的 yum server:

#1、先备份
[root@li ~]# sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

#2、编辑 /etc/yum.repos.d/CentOS-Base.repo 内容
[root@li ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base - Li
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-7

#released updates
[updates]
name=CentOS-$releasever - Updates - Li
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/updates/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - Li
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-7
#默认情况下,软件仓库仅有这三个有启用。所以仅修改这三个软件库的 baseurl 即可

#3、新建一个 zabbix 的 yum server
[root@li ~]# vim /etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix-5
baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/x86_64/
gpgcheck=1
enable=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-7

测试是否可用:

#列出目前 yum server 所使用的软件库有哪些
[root@li ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/Li.repo
[root@li ~]# yum repolist
源标识                                    源名称                                            状态
base/7/x86_64                             CentOS-7 - Base - Li                              10,070
extras/7/x86_64                           CentOS-7 - Extras - Li                               413
updates/7/x86_64                          CentOS-7 - Updates - Li                            1,125
zabbix                                    Zabbix-5                                              45
repolist: 11,653
[root@li ~]# yum list | grep zabbix
zabbix-agent2.x86_64                        5.0.3-1.el7                installed
pcp-export-pcp2zabbix.x86_64                4.3.2-7.el7_8              updates
pcp-export-zabbix-agent.x86_64              4.3.2-7.el7_8              updates
zabbix-agent.x86_64                         5.0.3-1.el7                zabbix
zabbix-get.x86_64                           5.0.3-1.el7                zabbix
zabbix-java-gateway.x86_64                  5.0.3-1.el7                zabbix
zabbix-js.x86_64                            5.0.3-1.el7                zabbix
zabbix-proxy-mysql.x86_64                   5.0.3-1.el7                zabbix
zabbix-proxy-pgsql.x86_64                   5.0.3-1.el7                zabbix
zabbix-proxy-sqlite3.x86_64                 5.0.3-1.el7                zabbix
zabbix-release.noarch                       5.0-1.el7                  zabbix
zabbix-sender.x86_64                        5.0.3-1.el7                zabbix
zabbix-server-mysql.x86_64                  5.0.3-1.el7                zabbix
zabbix-server-pgsql.x86_64                  5.0.3-1.el7                zabbix

由于我们是修改的系统默认的配置文件,事实上,我们应该要在 /etc/yum.repos.d/ 底下新建一个文件,该拓展名必须是 .repo 才行!yum 会先下载软件库的清单到本机的 /var/cache/yum 里面去!那我们修改了网址却没有修改软件库名称(中括号内的文字),可能就会造成本机的列表与 yum 服务器的列表不同步,此时就会出现无法更新的问题。

那怎么办呢?很简单,就清除掉本机上面的旧数据即可!

[root@li ~]# yum clean [package|header|all]
选项与参数:
packages:将已下载的软件文件删除
headers:将下载的软件头文件删除
all:将所有软件库数据都删除
[root@li ~]# yum clean all
已加载插件:fastestmirror
正在清理软件源: base extras updates
Cleaning up list of fastest mirrors

3.3、yum 的软件群组功能

通过 yum 安装一个软件是很简单的,但是如果想要安装一个大型项目呢?通过 yum 的软件群组功能即可:

[root@li ~]# yum [群组功能] [软件群组]
选项与参数:
	grouplist:列出所有可使用的 “软件群组”
	groupinfo:后面接 group_name
	groupinstall:可以安装一整套软件群组
	groupremove:卸载某个群组软件
#1、查询目前软件库与本机上的可用与安装过的软件群组有哪些
[root@li ~]# yum grouplist
可用的环境分组:
   最小安装
   基础设施服务器
   计算节点
   文件及打印服务器
   基本网页服务器
   虚拟化主机
   带 GUI 的服务器
   GNOME 桌面
   KDE Plasma Workspaces
   开发及生成工作站
已安装的组:
   开发工具
可用组:
   传统 UNIX 兼容性
   兼容性程序库
   图形管理工具
   安全性工具
   控制台互联网工具
   智能卡支持
   科学记数法支持
   系统管理
   系统管理工具
完成

#2、查看一个群组软件内容
[root@li ~]# yum groupinfo "科学记数法支持"
组:科学记数法支持
 组编号:scientific
 描述:用于数学和科学计算以及平行计算的工具。
 可选的软件包:
   atlas
   fftw
   fftw-devel
   fftw-static
   gnuplot
   gsl-devel
   ...

#3、安装 "科学记数法支持" 群组软件
[root@li ~]# yum groupinstall "科学记数法支持"
警告:分组 scientific 不包含任何可安装软件包。
Maybe run: yum groups mark install (see man yum)
指定组中没有可安装或升级的软件包

为什么无法安装呢?因为刚好 Scientific Support 里面的软件都是 “可选择的”,而不是 “必要的”!因此预设条件下,上面的软件通通不会帮你安装。如果想要安装上述的软件,可以使用 yum install atlas fftw … 一个一个安装。如果想让 groupinstall 预设安装所有的 optional 软件呢?那就要修改配置文件了,更改 groupinstall 选择的软件项目即可

[root@li ~]# vim /etc/yum.conf
distroverpkg=centos-release		#这一行下面新增
group_package_types=default,mandatory,optional

#之后再来测试安装 "科学记数法支持" 群组软件
[root@li ~]# yum groupinstall "科学记数法支持"
正在解决依赖关系
--> 正在检查事务
---> 软件包 atlas.x86_64.0.3.10.1-12.el7 将被 安装
---> 软件包 fftw.x86_64.0.3.3.3-8.el7 将被 安装
...
#可以安装了

3.4、全系统自动升级

可以通过 yum -y update 自动升级,然后通过 crontab,选择网络带宽比较轻松的时候,例行升级:

[root@li ~]# echo '10 1 * * * root /usr/bin/yum -y --enablerepo=epel update' > /etc/cron.d/yumupdate
[root@li ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
0 10 * * * root /bin/yum update -y

猜你喜欢

转载自blog.csdn.net/qq_36879493/article/details/108237221