首页 > Sysadmin > 正文

Linux 8 配置 Yum 软件源:仓库管理完整指南

huyuanwen 2026-11-04 Sysadmin

RHEL 8 基于 DNF 的 YUM v4 管理软件包,仓库配置通过 .repo 文件或 yum-config-manager 完成。

仓库配置文件格式

DNF 默认读取 /etc/dnf/dnf.conf 和 /etc/yum.repos.d/ 下的所有 .repo 文件,后者通常用于仓库配置并覆盖全局设置 [1]。配置文件采用 INI 格式,分为 main 和 repository 两类 section。

仓库 section 的 ID 必须唯一,允许字符为字母、数字、-、_、.、:。最小配置需要 repo ID 加上 baseurl、metalink 或 mirrorlist 之一 [1]。

典型 .repo 文件结构如下:

[myrepo]
name=My Custom Repository
baseurl=https://example.com/repo/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-myrepo

$basearch 会被 DNF 替换为系统架构(如 x86_64),$releasever 替换为发行版版本号。全局 [main] section 只应出现一次,定义影响所有仓库的默认选项。

yum-config-manager 添加与管理

Red Hat 官方推荐使用 yum-config-manager 命令添加仓库 [2]:

yum-config-manager --add-repo https://example.com/repo/

该命令会在 /etc/yum.repos.d/ 下创建一个以 URL 命名的 .repo 文件,仓库默认启用。创建后应检查并调整生成的配置。启用或禁用仓库使用 --enable 和 --disable 参数 [2]:

yum-config-manager --enable myrepo
yum-config-manager --disable myrepo

手动创建 .repo 文件

当需要更精细控制时,直接在 /etc/yum.repos.d/ 下创建 .repo 文件 [2]。所有 .repo 扩展名的文件都会被 YUM 读取,因此推荐将仓库定义放在这个目录而非 /etc/yum.conf。

一个完整的仓库定义通常包含以下字段:

  • name:仓库描述名称
  • baseurl:仓库地址,支持 file://、http://、https://、ftp://
  • enabled:1 启用,0 禁用
  • gpgcheck:1 启用 GPG 验证,0 禁用
  • gpgkey:GPG 公钥路径,可为本地文件或 URL
  • cost:仓库优先级成本,数值越小优先级越高
  • priority:仓库优先级,数值越小越优先

多仓库定义可以放在同一个 .repo 文件中,每个以 [repo_id] 开头。使用 exclude 字段排除特定软件包,includepkgs 只允许安装指定包,metadata_expire 控制元数据缓存过期时间(默认 48 小时)。多仓库共存时,DNF 选择 cost 最低的仓库;cost 相同时,priority 最小的仓库优先。

本地仓库与 GPG 验证

在离线环境或内部镜像场景,可使用 createrepo_c 创建本地仓库 [3]:

cd /srv/repo/
createrepo_c .

生成的 repodata/ 目录包含仓库元数据。本地仓库的 .repo 文件指向该目录:

[localrepo]
name=Local Repository
baseurl=file:///srv/repo/
enabled=1
gpgcheck=0

对于生产环境,应启用 GPG 签名验证。导入公钥后设置 gpgcheck=1 和 gpgkey 路径 [2]:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-example

GPG 验证可防止安装被篡改的软件包,官方建议不要在生产环境禁用。

排错速查表

现象 原因 处理
仓库 metadata 下载失败 baseurl 不可达或网络不通 检查 URL 和网络,或切换 mirrorlist
GPG 验证失败 公钥未导入或密钥不匹配 rpm --import 导入正确公钥
仓库未生效 .repo 文件权限或语法错误 检查文件权限和 INI 格式
包安装仍从其他仓库获取 priority/cost 设置不当 调整仓库优先级或使用 --repo 指定
createrepo_c 报错 repodata 目录损坏 删除 repodata/ 重新生成

局限性

  • 本文基于 RHEL 8 官方文档和 DNF man page 编写,WSL2 环境为 Ubuntu 24.04(非 RPM 发行版),dnf config-manager 和 createrepo_c 已在 WSL2 上验证基本功能,但 RHEL 8 特有的仓库(如 AppStream、BaseOS)未实际测试
  • RHEL 8 的 subscription-manager 和 CDN 仓库配置(/etc/yum.repos.d/redhat.repo)仅适用于注册的 RHEL 系统,未在 WSL2 中验证
  • 本地仓库 createrepo_c 生成的元数据格式需与目标发行版的 DNF 版本兼容

附录

  • yum-config-manager --add-repo <URL> 成功创建 .repo 文件,格式为 [repo_id] + name + baseurl + enabled=1
  • createrepo_c . 在空目录成功生成 repodata/ 元数据目录
  • dnf config-manager --enable/--disable 参数可切换仓库状态
  • RHEL 8 使用 YUM v4(基于 DNF),yum 命令为 dnf 的兼容别名

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。