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

张开发
2026/5/18 20:19:01 15 分钟阅读
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-core2. 下载方法一推荐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 --setoptinstall_weak_depsTrue 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 满足了。操作步骤创建本地仓库目录并放入自制 RPMmkdir-p/opt/local-rpmscpyour-custom-package*.rpm /opt/local-rpms/生成仓库元数据createrepo_c /opt/local-rpms配置本地仓库文件cat/etc/yum.repos.d/local.repoEOF [local] nameLocal Custom RPMs baseurlfile:///opt/local-rpms enabled1 gpgcheck0 EOF刷新 DNF 缓存dnf clean all dnf makecache✅优点最符合 DNF/YUM 的设计理念。依赖关系清晰不会破坏系统稳定性。便于后续的升级和维护。方案 2使用--exclude排除依赖下载阶段核心思想在下载时明确告诉 DNF 跳过某些包。dnf download--resolve\--excludeconflicting-lib\--excludeanother-unwanted-dep\--destdir/tmp/rpms\main-package或者结合install命令sudodnfinstall\--downloadonly\--downloaddir/tmp/rpms\--excludeconflicting-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.1或system-library-name时DNF 会自动识别为已满足不再下载对应的系统包。总结与建议场景推荐方案单纯下载依赖dnf download --resolve离线环境部署方案一本地仓库dnf install ./*.rpm自制 RPM 替代系统库方案三Spec Provides结合方案一临时跳过某些包下载方案二--exclude最佳实践流程开发自制 RPM → 加入本地仓库 → 配置 dnf → 正常下载/安装

更多文章