在使用 Rocky Linux 时,默认的官方源服务器位于国外,对于国内用户来说,下载软件包速度可能较慢,甚至偶尔出现连接失败的情况。将系统仓库更换为阿里云镜像源,可以显著提升 dnf 的下载速度和稳定性。本文将详细介绍两种可靠的换源方法,并重点解决 EPEL 源配置中可能遇到的 epel-release 包找不到的问题,同时附带性能优化以及常见问题的解决办法。
一、准备工作:备份原始仓库文件
在进行任何修改之前,强烈建议备份系统原有的 .repo 配置文件,以便在出现问题时快速恢复。
sudo mkdir -p /etc/yum.repos.d/backup
sudo mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/上述命令会创建一个 backup 目录,并将所有仓库文件移动到该目录中。
二、方法一:使用 sed 命令批量替换(推荐)
这种方法通过一条 sed 命令,自动将官方源中的 mirrorlist 注释掉,并取消注释 baseurl 且将其域名替换为阿里云镜像。这是最安全、最一劳永逸的方式,尤其适合已经存在多个仓库文件的系统。
1. 执行替换命令
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
-i.bak \
/etc/yum.repos.d/backup/*.repo命令解释:
- 第一个
-e:将mirrorlist=开头的行注释掉(避免访问缓慢的官方镜像列表)。 - 第二个
-e:找到被注释的baseurl行,取消注释并将域名替换为阿里云镜像站。 -i.bak:在原文件基础上直接修改,并生成.bak备份。
2. 将修改后的文件复制回原目录
sudo cp /etc/yum.repos.d/backup/*.repo /etc/yum.repos.d/3. 清理并重建缓存
sudo dnf clean all
sudo dnf makecache4. 验证仓库是否生效
sudo dnf repolist如果能看到 baseos 和 appstream 等仓库且状态正常,说明替换成功。
三、方法二:手动创建阿里云仓库文件
如果您的系统比较干净(例如最小化安装后没有其他第三方仓库),或者希望直接使用阿里云官方推荐的配置,可以手动创建一个新的仓库文件。这种方法同样简单有效,且不依赖原始文件。
1. 删除旧文件(可选)
sudo rm -f /etc/yum.repos.d/Rocky-Base.repo2. 创建新的仓库文件
使用 cat 或 vim 写入以下内容(请根据您的 Rocky Linux 版本选择对应的代码块)。
适用于 Rocky Linux 9
sudo cat > /etc/yum.repos.d/Rocky-Base.repo << 'EOF'
[baseos]
name=Rocky Linux $releasever - BaseOS
baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=https://mirrors.aliyun.com/rockylinux/RPM-GPG-KEY-Rocky-9
[appstream]
name=Rocky Linux $releasever - AppStream
baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=https://mirrors.aliyun.com/rockylinux/RPM-GPG-KEY-Rocky-9
EOF适用于 Rocky Linux 8
sudo cat > /etc/yum.repos.d/Rocky-Base.repo << 'EOF'
[baseos]
name=Rocky Linux $releasever - BaseOS
baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=https://mirrors.aliyun.com/rockylinux/RPM-GPG-KEY-Rocky-8
[appstream]
name=Rocky Linux $releasever - AppStream
baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=https://mirrors.aliyun.com/rockylinux/RPM-GPG-KEY-Rocky-8
EOF3. 重建缓存
sudo dnf clean all
sudo dnf makecache四、配置 EPEL 源(完整方案)
EPEL(Extra Packages for Enterprise Linux)提供了大量 RHEL 系 Linux 发行版官方仓库中没有的软件包(例如 miniupnpc、ffmpeg 等)。但很多用户会遇到 dnf install epel-release 提示 “No match for argument” 的错误,这是因为默认的 BaseOS/AppStream 仓库中并不包含 epel-release 包。下面提供两种经过验证的有效方法,推荐使用方法一(直接配置 EPEL 仓库文件),完全绕过 epel-release 包。
✅ 方法一:直接手动创建 EPEL 仓库文件(推荐,不依赖 epel-release 包)
1. 创建 EPEL 仓库配置文件
sudo cat > /etc/yum.repos.d/epel.repo << 'EOF'
[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
baseurl=https://mirrors.aliyun.com/epel/$releasever/Everything/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-$releasever
[epel-debuginfo]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Debug
baseurl=https://mirrors.aliyun.com/epel/$releasever/Everything/$basearch/debug/
enabled=0
gpgkey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1
[epel-source]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Source
baseurl=https://mirrors.aliyun.com/epel/$releasever/Everything/SRPMS/
enabled=0
gpgkey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1
EOF说明:$releasever会自动替换为您的系统主版本号(如 9)。如果因某些原因未正确解析,可以手动将$releasever改为具体数字(例如9)。
2. 导入 EPEL GPG 密钥
sudo rpm --import https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-9(如果您使用的是 Rocky Linux 8,将命令中的 9 改为 8)
3. 更新缓存并测试
sudo dnf clean all
sudo dnf makecache
sudo dnf repolist您应该能看到 epel 仓库出现在列表中。此时可以直接安装软件,例如:
sudo dnf install miniupnpc -y✅ 方法二:通过 extras 仓库安装 epel-release(传统方法)
如果您的系统已经正确配置了 Rocky Linux 的 extras 仓库,那么 epel-release 包通常就在其中。下面先配置 extras 仓库(使用阿里云源),然后安装 epel-release,最后再将 EPEL 源也替换为阿里云镜像。
1. 创建 extras 仓库文件
sudo cat > /etc/yum.repos.d/Rocky-extras.repo << 'EOF'
[extras]
name=Rocky Linux $releasever - Extras
baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/extras/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=https://mirrors.aliyun.com/rockylinux/RPM-GPG-KEY-Rocky-9
EOF2. 安装 epel-release
sudo dnf install epel-release -y3. (可选)将 EPEL 源也替换为阿里云镜像以获得更快的速度
sudo curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-9.repo(Rocky 8 请使用 epel-8.repo)
4. 重建缓存并验证
sudo dnf clean all
sudo dnf makecache
sudo dnf repolist五、验证与优化
1. 验证仓库状态
sudo dnf repolist输出应包含 baseos、appstream、epel(以及可选的 extras),且每个仓库的计数不为零。
2. 优化 DNF 下载速度
编辑 /etc/dnf/dnf.conf 文件,添加以下参数可以启用并行下载和最快镜像检测:
echo "max_parallel_downloads=10" | sudo tee -a /etc/dnf/dnf.conf
echo "fastestmirror=True" | sudo tee -a /etc/dnf/dnf.confmax_parallel_downloads=10:同时下载 10 个软件包,充分利用带宽。fastestmirror=True:自动选择速度最快的镜像。
六、常见问题及解决方法
1. GPG 密钥错误
现象:执行 dnf makecache 时提示 GPG key retrieval failed。
解决方法:手动导入阿里云的 Rocky Linux 或 EPEL 密钥。
# Rocky Linux 9 密钥
sudo rpm --import https://mirrors.aliyun.com/rockylinux/RPM-GPG-KEY-Rocky-9
# Rocky Linux 8 密钥
sudo rpm --import https://mirrors.aliyun.com/rockylinux/RPM-GPG-KEY-Rocky-8
# EPEL 密钥(如果需要)
sudo rpm --import https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-92. 元数据下载失败(Metadata download failed)
现象:dnf makecache 报错,提示无法下载 repomd.xml。
解决方法:彻底清理 DNF 缓存后重试。
sudo rm -rf /var/cache/dnf
sudo dnf clean all
sudo dnf makecache3. $releasever 变量未正确解析
现象:baseurl 中的 $releasever 被替换成了空字符串或错误的值。
解决方法:手动将 $releasever 改为具体的数字(如 9 或 8),或者先检查系统版本:
cat /etc/rocky-release如果输出是 Rocky Linux release 9.x,则可以将仓库文件中的 $releasever 全部替换为 9。
4. curl 或 wget 命令未找到
现象:系统最小化安装,没有 curl 或 wget。
解决方法:使用 dnf 本身安装(前提是当前还能连上官方源)。如果官方源也连不上,可以临时使用 cat 手动写入仓库文件(即上文方法二),然后再安装所需工具。
# 先按方法二手动配置阿里云源
# 然后执行
sudo dnf install curl wget -y5. dnf install epel-release 提示 “No match for argument”
现象:执行 dnf install epel-release -y 返回 Error: Unable to find a match: epel-release。
解决方法:这正是本章第四节重点解决的问题。请直接采用方法一(手动创建 EPEL 仓库文件),完全绕过 epel-release 包。该方法已经过实际测试,可 100% 成功配置 EPEL 源。