DataWizardess 2025-08-22 02:05 采纳率: 99.1%
浏览 10
已采纳

dnf-makecache.service 启动失败如何排查?

**问题描述:** 在使用基于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 directory
    • Could 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.crt
    • Metadata 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.org
    DNS 解析nslookup mirrors.fedoraproject.org
    代理配置查看/etc/environment/etc/profile.d/proxy.sh
    防火墙限制systemctl status firewalldiptables -L -n

    3. 镜像源配置错误

    /etc/yum.repos.d/目录下的.repo文件若配置错误(如错误的URL、无效的GPG密钥路径等),也会导致dnf makecache失败。

    • 解决方案:
      • 检查所有.repo文件:cat /etc/yum.repos.d/*.repo
      • 验证baseurl或mirrorlist是否有效
      • 使用dnf clean all清除缓存,再尝试重建缓存:dnf makecache

    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
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 8月22日