使用 yumdownloader 下载所有依赖项,即使已经安装?

Luk*_*uke 38 yum repository

有没有办法使用 yumdownloader 下载所有依赖项,即使它们已经安装?

我正在尝试创建一个本地存储库,并且只想包含我们需要的包。

Luk*_*uke 35

你可以repotrack像这样使用:

repotrack -a x86_64 -p /repos/Packages [packages]
Run Code Online (Sandbox Code Playgroud)

不幸的是,-a标志(拱门)有一个错误。它将下载 i686 和 x86_64。

以下是修复方法:

if opts.arch:
    #archlist = []
    #archlist.extend(rpmUtils.arch.getArchList(opts.arch))
    archlist = opts.arch.split(',') # Change to this
else:
    archlist = rpmUtils.arch.getArchList()
Run Code Online (Sandbox Code Playgroud)

您可以使用repoquery来获取组包列表:

repoquery --qf=%{name} -g --list --grouppkgs=all [groups]
Run Code Online (Sandbox Code Playgroud)

您可以将其输入到 repotrack:

repoquery --qf=%{name} -g --list --grouppkgs=all [groups] | xargs repotrack -a x86_64 -p /repos/Packages
Run Code Online (Sandbox Code Playgroud)

  • 我不建议更改源代码。如果真的,这是一个错误,它应该被提交到上游 `yum-utils` 项目中。它下载比预期更多的包的原因是因为函数 `rpmUtils.arch.getArchList()` 返回给定一个的所有兼容架构。例如,它包括 `x86_64` 软件包可能需要的 `noarch` 架构。可以查看源码:http://yum.baseurl.org/gitweb?p=yum.git;a=blob;f=rpmUtils/arch.py​​;h=d63ec2545d13efe0883ca0a84ccf410ebc8d4f3b;hb=HEAD#l213 (2认同)

pdp*_*pdp 19

对于每个人的信息,yumdownloader不做这项工作。对于使用 `yum 进行包管理的任何人来说,很自然地期望以下命令行会递归下载包 RPM 及其所有依赖项:

yumdownloader --resolve <package>
Run Code Online (Sandbox Code Playgroud)

但事实并非如此。可能会打印第一级依赖项或尚未安装的依赖项。我不确定。

这是一种适用于 CentOS 6.5 的方法。按照Red Hatyum给出的步骤安装 downloadonly 插件。基本上,在 CentOS 6.x 上,请执行以下操作:

$ sudo yum install yum-plugin-downloadonly.noarch
Run Code Online (Sandbox Code Playgroud)

然后结合使用插件--installrootyum. 这可以防止yum解析并跳过系统上已安装的依赖项。

sudo yum install \
  --installroot=</path/to/tmp_dir> \
  --downloadonly --downloaddir <rpm_dir> <package>
Run Code Online (Sandbox Code Playgroud)

您将下载包的 RPM,<package>以及它在目录中的所有依赖项<rpm_dir>。例如,使用 Git:

$ mkdir root rpms
$ sudo yum install --installroot=/home/roy/root \
  --downloadonly --downloaddir rpms/ git
Run Code Online (Sandbox Code Playgroud)

  • 当我添加 `--installroot` 标志时,我收到此错误 `Cannot find a valid baseurl for repo: base/$releasever/x86_64`。 (8认同)
  • 通过 [此链接](https://bugzilla.redhat.com/show_bug.cgi?id=850686) 上的解决方案摆脱了 Centos 7 上的 `Cannot find a valid baseurl...` 问题:添加 `- -releasever=/` 参数 (3认同)

小智 5

也试试

repoquery -R --resolve --recursive <name> | xargs -r yumdownloader
Run Code Online (Sandbox Code Playgroud)

例如:

repoquery -R --resolve --recursive firefox | xargs -r yumdownloader
Run Code Online (Sandbox Code Playgroud)

来源:https : //www.thegeekdiary.com/downloading-rpm-packages-with-dependencies-yumdownloader-vs-yum-downloadonly-vs-repoquery/