**问题描述:**
在使用基于DNF的Linux系统(如CentOS 8或Fedora)时,发现`dnf-makecache.service`启动失败,导致软件包元数据无法正常更新,影响系统软件安装与更新操作。常见现象包括服务启动时报错“Failed at step”、“Could not retrieve mirrorlist”或“Metadata cache creation failed”。请结合系统日志、网络配置、镜像源设置等因素,分析可能导致`dnf-makecache.service`失败的常见原因,并提供相应的排查与解决方案。
1条回答 默认 最新
请闭眼沉思 2025-10-22 02:50关注一、问题背景与现象描述
在使用基于DNF的Linux系统(如CentOS 8或Fedora)时,系统管理员可能会遇到
dnf-makecache.service启动失败的问题。该服务负责更新软件包的元数据缓存,一旦失败,将导致dnf命令无法正常执行安装、升级或查询软件包的操作。常见的报错信息包括:
Failed at step EXEC spawning /usr/bin/dnf: No such file or directoryCould not retrieve mirrorlist https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch error(26): Couldn't open file /etc/pki/tls/certs/ca-bundle.crtMetadata cache creation failed
这些问题通常与系统日志、网络配置、镜像源设置等因素密切相关。
二、排查与分析流程图
graph TD A[dnf-makecache.service 启动失败] --> B{检查系统日志 journalctl -u dnf-makecache.service} B --> C{是否有 Failed at step EXEC 错误?} C -->|是| D[确认 /usr/bin/dnf 是否存在] C -->|否| E{是否有网络连接问题?} E -->|是| F[检查 DNS、网络连接、代理设置] E -->|否| G{检查镜像源配置是否正确} G --> H[查看 /etc/yum.repos.d/*.repo 文件] H --> I[尝试手动执行 dnf makecache] I --> J{是否成功?} J -->|是| K[重启服务 systemctl restart dnf-makecache.service] J -->|否| L[检查 SSL 证书、时间同步、SELinux 等]三、常见原因与解决方案
1. 系统路径问题或 dnf 命令缺失
若服务报错
Failed at step EXEC spawning /usr/bin/dnf,则可能是系统路径错误或dnf命令本身被误删或损坏。- 解决方案:
- 检查
/usr/bin/dnf是否存在:ls /usr/bin/dnf - 若不存在,尝试重新安装
dnf包:yum install dnf
- 检查
2. 网络连接问题
报错信息如
Could not retrieve mirrorlist通常表示无法访问镜像源服务器,可能由以下原因导致:- 网络不通或 DNS 配置错误
- 代理设置未正确配置
- 防火墙限制访问
排查方法:
检查项 命令或方法 网络连通性 ping mirrors.fedoraproject.orgDNS 解析 nslookup mirrors.fedoraproject.org代理配置 查看 /etc/environment或/etc/profile.d/proxy.sh防火墙限制 systemctl status firewalld或iptables -L -n3. 镜像源配置错误
/etc/yum.repos.d/目录下的.repo文件若配置错误(如错误的URL、无效的GPG密钥路径等),也会导致dnf makecache失败。- 解决方案:
- 检查所有.repo文件:
cat /etc/yum.repos.d/*.repo - 验证baseurl或mirrorlist是否有效
- 使用
dnf clean all清除缓存,再尝试重建缓存:dnf makecache
- 检查所有.repo文件:
4. SSL证书或时间同步问题
如果系统时间与镜像服务器时间偏差较大,或SSL证书不可信,也可能导致无法下载镜像列表。
- 解决方案:
- 检查系统时间:
timedatectl - 同步时间:
timedatectl set-ntp true或使用chronyd - 更新证书包:
yum install ca-certificates
- 检查系统时间:
5. SELinux或AppArmor限制
安全模块如SELinux可能阻止
dnf访问某些资源。- 解决方案:
- 临时禁用SELinux:
setenforce 0(仅用于测试) - 检查SELinux日志:
grep dnf /var/log/audit/audit.log | audit2why - 必要时修改策略或关闭SELinux
- 临时禁用SELinux:
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报