使用yum下载包的所有依赖项的RPM

时间:2014-10-06 12:43:58

标签: centos yum

我正在尝试在我的系统上创建一个包含各种软件包的本地yum repo,主要是CentOS基本库。托管yum repo的服务器默认情况下不必安装与将使用yum repo的服务器相同的基本软件包。出于这个原因,我需要确保我的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?

2 个答案:

答案 0 :(得分:0)

这个bash脚本是rpm的维护者和我分享的,我put on github。希望你觉得它很有用!

您还可以阅读讨论该问题的原始SO question

该脚本适用于Fedora 23+,因为它使用dnf的下载插件。它可能很容易让它在Fedora 22上运行,因为yum肯定有类似的插件。

另外,它很有价值,因为repotrack在fedora 23上不起作用(至少它对我不起作用)。

答案 1 :(得分:0)

在寻找解决方案时遇到很多挫折之后,我编写了一个使用repotrace和wget的简单脚本。我发现yumdownloader(即使使用resolve标志)也无法解析所有依赖项。

如果您有很长的软件包列表,您必须先运行重复项,首先只使用“repotrack -u flag”下载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

快乐rpming