使用 yum 下载软件包的所有依赖项的 RPM
Posted
技术标签:
【中文标题】使用 yum 下载软件包的所有依赖项的 RPM【英文标题】:Download RPMs for all dependencies for package using yum 【发布时间】:2014-11-30 17:29:03 【问题描述】:我正在尝试在我的系统上创建一个本地 yum 存储库,其中包含主要来自 CentOS 基础存储库的各种软件包。默认情况下,托管 yum 存储库的服务器不一定安装与将使用 yum 存储库的服务器相同的基本软件包。出于这个原因,我需要确保我的 repos 包含我想要的包以及它们的每一个依赖项。
我正在使用 yum-utils 软件包中提供的 yumdownloader 工具创建我的存储库,以尝试从标准 CentOS 镜像下载使用 yum 的软件包的 RPM 文件。有用的是,它提供了一个命令行选项 --resolve,它还可以下载依赖项。但是,由于它是建立在 yum 本身之上的,yumdownloader 只会下载系统上尚不存在的软件包的依赖项。
比如我想下载包A,它依赖于包B、C和D。如果系统上已经安装了包D,yumdownloader --resolve A
只会下载A、B和C,不下载D。
有没有办法从 yum repo 下载软件包的所有依赖项的 RPM?
【问题讨论】:
serverfault.com/questions/470964/yumdownloader-vs-repotrack 的副本,其中包含我要写在这里的两个答案。 【参考方案1】:有这个 bash 脚本,rpm 的维护者很乐意与我分享,我 put on github。希望对您有用!
您还可以阅读原版SO question,其中讨论了该问题。
该脚本适用于 Fedora 23+,因为它使用 dnf 的下载插件。让它在 Fedora 22 上运行可能很容易,因为 yum 肯定有类似的插件。
此外,它很有价值,因为 repotrack 在 fedora 23 上不起作用(至少它对我不起作用)。
【讨论】:
【参考方案2】:在四处寻找解决方案后,我编写了一个使用 repotrace 和 wget 的简单脚本。我发现 yumdownloader(即使带有 resolve 标志)也不能解决所有依赖项。
如果您有很长的软件包列表,您肯定会遇到重复,首先使用“repotrack -u 标志”下载 url,然后获取唯一记录解决了必须多次下载相同 rpm 的问题。
#!/bin/bash
while read i; do
repotrack -u $i >> dep_rpm_urls_02.txt
done < list_of_packages_01.txt
awk '!seen[$0]++' dep_rpm_urls_02.txt > dep_rpm_urls_clean_03.txt
while read j; do
wget $j
echo dowloaded $j
done < dep_rpm_urls_clean_03.txt
快乐的转
【讨论】:
这个超级有用。以上是关于使用 yum 下载软件包的所有依赖项的 RPM的主要内容,如果未能解决你的问题,请参考以下文章