在 CentOS 系统中,YUM(Yellowdog Updater, Modified)是核心的软件包管理工具,它负责从指定的软件仓库(源)自动安装、更新和移除软件包,默认情况下,CentOS 提供了官方的基础源、更新源和扩展源,但这些源中的软件包版本相对保守,且数量有限,无法满足开发者、系统管理员对最新软件或特定功能的需求,学会如何为 YUM 增加和配置第三方源是管理 CentOS 系统的一项必备技能。
理解 YUM 源与配置文件
在开始操作之前,理解 YUM 的工作原理至关重要,YUM 的所有源配置信息都存放在 /etc/yum.repos.d/
目录下,每一个以 .repo
结尾的文件都代表一个或多个软件源,这些文件定义了源的名称、地址、是否启用、GPG 密钥验证等关键信息,当执行 yum install
或 yum update
命令时,YUM 会读取这个目录下的所有配置文件,从中获取软件包信息。
一个典型的 .repo
文件包含如下基本结构:
[repository_id] name=A descriptive name for the repository baseurl=http://mirror.example.com/centos/7/os/x86_64/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[repository_id]
:仓库的唯一标识符。name
:仓库的描述性名称。baseurl
:仓库的 URL 地址,可以是http://
、https://
、ftp://
或本地文件路径file://
。enabled
:是否启用此仓库,1
为启用,0
为禁用。gpgcheck
:是否检查软件包的 GPG 签名以确保其完整性和安全性,强烈建议设置为1
。gpgkey
:GPG 公钥的存放位置。
添加 EPEL 源
EPEL(Extra Packages for Enterprise Linux)是由 Fedora 社区维护的,为 RHEL(Red Hat Enterprise Linux)及其衍生版(如 CentOS)提供高质量软件包的仓库,它是最常用、最权威的第三方源,包含了大量在官方源中找不到的软件。
安装步骤:
EPEL 的安装非常简单,其本身就是一个可以通过 YUM 安装的软件包。
# 对于 CentOS 7 sudo yum install epel-release # 对于 CentOS 8 / Stream sudo dnf install epel-release
安装完成后,系统会在 /etc/yum.repos.d/
目录下自动创建 epel.repo
和 epel-testing.repo
两个文件。
验证安装:
可以通过以下命令查看已启用的仓库列表,确认 EPEL 是否已成功添加。
yum repolist
执行后,你会在输出的列表中看到 epel/x86_64
或类似的条目,以及它提供的软件包数量。
仓库 ID | 仓库名称 | 状态 |
---|---|---|
base/7/x86_64 | CentOS-7 – Base | 10,072 |
extras/7/x86_64 | CentOS-7 – Extras | 515 |
updates/7/x86_64 | CentOS-7 – Updates | 3,521 |
epel/x86_64 | Extra Packages for Enterprise Linux 7 – x86_64 | 13,756 |
上表清晰地展示了添加 EPEL 源后,可用软件包数量的显著增加。
添加 Remi 源
Remi 源是另一个广受欢迎的第三方仓库,它专注于提供最新版本的 LEMP/LAMP 栈组件,如 PHP、MySQL、MariaDB、PostgreSQL 等,对于 Web Remi 源是获取最新 PHP 版本的首选。
安装步骤:
Remi 源依赖于 EPEL 源,因此请确保已按照上一步骤安装了 EPEL。
- 访问 Remi 的官方网站 获取适用于你 CentOS 版本的 RPM 安装包链接。
- 使用
yum
或dnf
直接安装该 RPM 包。
# 对于 CentOS 7 sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm # 对于 CentOS 8 sudo dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm
安装后,同样会在 /etc/yum.repos.d/
目录下生成多个 remi-*.repo
文件。
使用 Remi 源:
默认情况下,Remi 提供的多个软件源是禁用的,以避免与系统默认软件包冲突,你需要根据需求手动启用。
要在 CentOS 8 上安装 PHP 7.4,你需要先启用对应的模块流:
# 重置默认的 PHP 模块(如果已安装) sudo dnf module reset php # 启用 Remi 提供的 PHP 7.4 模块 sudo dnf module enable php:remi-7.4 # 然后安装 PHP sudo dnf install php php-fpm php-mysqlnd
对于 CentOS 7,则通常使用 yum-config-manager
或 --enablerepo
参数来临时启用指定的源。
# 安装 yum-utils 以获得 yum-config-manager 命令 sudo yum install yum-utils # 启用 remi-php74 源 sudo yum-config-manager --enable remi-php74 # 或者,在安装时临时启用 sudo yum --enablerepo=remi-php74 install php php-fpm php-mysql
手动添加第三方源
除了使用现成的 RPM 包安装,你也可以手动创建 .repo
文件来添加任何可信的第三方源,这在你需要使用某个特定软件的官方仓库时非常有用。
操作步骤:
- 在
/etc/yum.repos.d/
目录下创建一个新的.repo
文件,my-custom-app.repo
。sudo vi /etc/yum.repos.d/my-custom-app.repo
- 在文件中填入仓库信息,以下是一个示例模板:
[my-custom-app] name=My Custom App Repository baseurl=https://repo.my-custom-app.com/centos/7/x86_64/ enabled=1 gpgcheck=1 gpgkey=https://repo.my-custom-app.com/RPM-GPG-KEY-MY-CUSTOM-APP
- 保存文件后,运行
yum clean all
清理缓存,然后执行yum repolist
查看新源是否已生效。
源管理最佳实践
- 安全第一:只添加你信任的、有良好声誉的源,始终启用
gpgcheck=1
以验证软件包的来源。 - 按需启用:对于像 Remi 这样提供多个版本的源,建议保持禁用状态,仅在需要时通过
--enablerepo
临时启用,或使用yum-config-manager
永久启用特定版本,避免意外升级系统核心组件。 - 定期清理:使用
yum clean all
命令可以清理旧的缓存,解决因缓存问题导致的软件包找不到或版本错误。 - 善用工具:
yum-utils
软件包提供了yum-config-manager
等实用工具,可以更方便地管理源的启用和禁用,比手动编辑文件更安全。
相关问答 FAQs
Q1: 添加了新的源(如 EPEL)之后,执行 yum update
会不会把系统所有软件都更新到这个源的版本,导致系统不稳定?
A: 这是一个非常好的问题,也是很多系统管理员的担忧,通常情况下,答案是:不会,像 EPEL 这样的高质量第三方源,其设计原则就是与官方基础包兼容,它主要提供官方源没有的额外软件包,而不是覆盖官方源的核心软件包(如 glibc
, kernel
, systemd
等)。yum update
只会更新那些在 EPEL 源中存在且版本比当前已安装版本更高的软件包,而不会大规模替换系统的核心组件,对于像 Remi 这样提供替代版本(如新版 PHP)的源,如果你启用了它,yum update
确实会尝试将相关软件(如 PHP)更新到 Remi 提供的版本,最佳实践是:对于提供替代软件的源,保持默认禁用,仅在需要安装或更新特定软件时才临时启用它。
Q2: YUM 和 DNF 有什么区别?在 CentOS 8 中我应该使用哪个命令?
A: DNF(Dandified YUM)是 YUM 的下一代版本,从 Fedora 22 开始成为默认的包管理器,并在 CentOS 8 及后续版本中取代了 YUM,DNF 在性能、依赖解析能力和内存管理上都有显著改进,并且拥有更现代的插件架构,在 CentOS 8 中,虽然你仍然可以使用 yum
命令,但这实际上是一个指向 dnf
的符号链接(别名),目的是为了保持向后兼容性,系统在后台执行的仍然是 dnf
,在 CentOS 8 或更新的系统中,推荐直接使用 dnf
命令,以适应未来的发展趋势并利用其新特性,但在 CentOS 7 系统中,你只能使用 yum
,本文中提供的命令,对于 CentOS 8 使用 dnf
,对于 CentOS 7 使用 yum
,正是基于这个原因。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复