当前位置: 首页 > news >正文

DNF 下载 RPM 依赖包及忽略特定依赖的方法

本文档详细说明如何使用dnf命令下载 RPM 软件包及其依赖,以及在本地已存在自制 RPM 包的情况下,如何忽略特定依赖进行下载和安装。


第一部分:DNF 命令下载 RPM 及其依赖包

适用于 RHEL / CentOS 8+ / Rocky / Alma / Fedora 等系统。

1. 环境准备

确保系统已安装提供dnf download命令的插件包:

sudo dnf install -y dnf-utils # 或 sudo dnf install -y dnf-plugins-core

2. 下载方法一(推荐):dnf download --resolve

这是最直接、最常用的方式,直接从仓库下载指定的 RPM 及其依赖。

场景命令示例
基本下载dnf download --resolve wget
指定下载目录dnf download --resolve --destdir /tmp/rpms/ wget
指定架构dnf download --resolve --arch x86_64 --destdir /tmp/rpms/ wget
包含弱依赖(推荐包)dnf download --resolve --alldeps --setopt=install_weak_deps=True wget

说明:执行后,所有 RPM 文件将保存在当前目录或--destdir指定的目录中。

3. 下载方法二:dnf install --downloadonly

此方法模拟安装过程,将所需的所有 RPM 包下载到缓存目录。

# 下载到默认缓存目录sudodnfinstall--downloadonlyhttpd# 下载到指定目录sudodnfinstall--downloadonly--downloaddir=/tmp/rpms/ httpd

默认缓存路径

/var/cache/dnf/<repo_name>-xxxx/packages/

4. 离线安装

将下载好的 RPM 包拷贝至目标离线机器,执行安装:

dnfinstall./*.rpm# 或dnf localinstall ./*.rpm

注意:不建议使用rpm -ivh *.rpm,因为它无法自动处理依赖关系。


第二部分:忽略依赖(本地已有自制 RPM 包)

当在本地已经构建了部分 RPM 包(例如定制化的库或组件),希望 DNF 在下载或安装时不处理这些特定的依赖,可采用以下方案。

方案 1(最推荐):构建本地仓库(Local Repository)

核心思想:不是强行忽略依赖,而是让 DNF 知道这些依赖已经由你的自制 RPM 满足了。

操作步骤
  1. 创建本地仓库目录并放入自制 RPM

    mkdir-p/opt/local-rpmscpyour-custom-package*.rpm /opt/local-rpms/
  2. 生成仓库元数据

    createrepo_c /opt/local-rpms

  3. 配置本地仓库文件

    cat>/etc/yum.repos.d/local.repo<<EOF [local] name=Local Custom RPMs baseurl=file:///opt/local-rpms enabled=1 gpgcheck=0 EOF
  4. 刷新 DNF 缓存

    dnf clean all dnf makecache

优点

  • 最符合 DNF/YUM 的设计理念。
  • 依赖关系清晰,不会破坏系统稳定性。
  • 便于后续的升级和维护。

方案 2:使用--exclude排除依赖(下载阶段)

核心思想:在下载时明确告诉 DNF 跳过某些包。

dnf download--resolve\--exclude=conflicting-lib\--exclude=another-unwanted-dep\--destdir/tmp/rpms\main-package

或者结合install命令:

sudodnfinstall\--downloadonly\--downloaddir=/tmp/rpms\--exclude=conflicting-lib\main-package

⚠️注意:此方式仅跳过下载,如果目标环境中确实缺少这些依赖,安装阶段仍会失败。

方案 3:在 RPM Spec 中声明 Provides(高级/根本解决)

核心思想:让你的自制 RPM “冒充”系统依赖,从根本上解决依赖冲突。

在你的自制 RPM 的.spec文件中添加Provides字段:

Name: my-custom-lib Version: 1.0 Release: 1%{?dist} # 声明提供了某个 so 文件或虚拟包 Provides: libxxx.so.1()(64bit) Provides: system-library-name = 2.0

这样,当其他软件依赖libxxx.so.1system-library-name时,DNF 会自动识别为已满足,不再下载对应的系统包。


总结与建议

场景推荐方案
单纯下载依赖dnf download --resolve
离线环境部署方案一(本地仓库)+dnf install ./*.rpm
自制 RPM 替代系统库方案三(Spec Provides)结合方案一
临时跳过某些包下载方案二(--exclude

最佳实践流程

开发自制 RPM → 加入本地仓库 → 配置 dnf → 正常下载/安装
http://www.jsqmd.com/news/588117/

相关文章:

  • 用lazarus封装了linux的rsync
  • 成都拉布灯箱技术白皮书:2026年户外广告新趋势解析
  • TimescaleDB实战:5分钟搞定物联网传感器数据存储与查询(附Grafana配置)
  • 2026鸿蒙应用开发Kuikly:驱动高效落地的核心实践
  • Buildroot与Qt5的X11VNC集成:解决EGLFS与XCB插件冲突的实践指南
  • 如何快速构建微信视频号直播数据管道:5大核心特性深度解析
  • ToonFlow
  • PLC控制四轴攻丝机全伺服工程案例(含接线图):附带启动停止原点定位等控制指令详解及文本屏即用程序
  • python_获取飞书审批数据
  • 可独立部署的健身饮食管理推荐:wger,Docker一键安装部署教程
  • 计算机网络 之 【TCP协议】(面向字节流、TCP异常情况、保活机制、文件与Socket的关系、网络协议栈的本质)
  • 深度解析ComfyUI-Easy-Use中Flux采样器Guidance参数的技术实现与优化策略
  • 音频转换神器fre:ac:让无损音乐管理更简单
  • 手把手教你拆解Coze‘城市觉醒’工作流:从提示词工程到插件调用的保姆级避坑指南
  • 腾讯上线小程序版 Agent[特殊字符],微信文件直接甩给 AI,还能操控家里电脑
  • 实战派】COMSOL土石坝滑坡模拟:手把手带你看懂网格变形骚操作
  • 串口函数配置表
  • 2026年穿墙螺杆生产厂家联系方式,丝杠/钢板止水带/止水钢板/不锈钢止水钢板/u型丝预埋件,穿墙螺杆源头厂家哪家好 - 品牌推荐师
  • 2026高考志愿填报核心技巧深度解析——一线实战视角全揭秘
  • 3步打造waifu2x-caffe轻量化部署方案:图像增强绿色版打包全流程
  • 从浮点到整数:深入解析QAT量化模型的推理计算机制
  • 2026全网首发:Claude Code 终端智能体系统底层架构拆解(附3万字PDF白皮书)
  • 设计租房改造无痕装饰片,不伤墙可移除,输出:租房党低成本,提升幸福感。
  • 如何快速掌握DREAM3D:材料科学数据分析的完整指南
  • 2025届必备的五大降重复率平台实测分析
  • [Flutter for OpenHarmony第三方库]Flutter for OpenHarmony 三重闯关踩坑实录:网络请求、列表刷新与底部导航的甜蜜冒险
  • 循环神经网络系列算法原理与数学表达研究 ——RNN、LSTM 与 BiLSTM
  • 如何解决微信QQ语音无法播放?Silk音频转换工具让跨设备播放不再难
  • 三维空间智能体体系技术方案:基于空间计算操作系统(SpaceOS™)的目标连续控制与空间智能体系构建方案
  • 从零到精通的Android Kotlin实战学习旅程:50个项目带你掌握移动开发核心技能