有没有办法使用 yumdownloader 下载所有依赖项,即使它们已经安装?
我正在尝试创建一个本地存储库,并且只想包含我们需要的包。
答案1
您可以repotrack
像这样使用:
repotrack -a x86_64 -p /repos/Packages [packages]
-a
不幸的是,标志(arch)有一个错误。它将下载 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()
您可以使用repoquery
获取组包列表:
repoquery --qf=%{name} -g --list --grouppkgs=all [groups]
您可以将其输入到 repotrack 中:
repoquery --qf=%{name} -g --list --grouppkgs=all [groups] | xargs repotrack -a x86_64 -p /repos/Packages
答案2
供大家参考,yumdownloader
不做这项工作。对于任何使用 yum 进行包管理的人来说,很自然地期望以下命令行将递归下载包 RPM 及其所有依赖项:
yumdownloader --resolve <package>
但事实并非如此。它可能会打印第一级依赖项或尚未安装的依赖项。我不知道。
这是一种适用于 CentOS 6.5 的方法。按照yum
以下步骤安装 downloadonly 插件红帽。基本上,在 CentOS 6.x 上,执行以下操作:
$ sudo yum install yum-plugin-downloadonly.noarch
然后结合 的开关来使用该--installroot
插件yum
。这可以防止yum
解析并跳过系统上已安装的依赖项。
sudo yum install \
--installroot=</path/to/tmp_dir> \
--downloadonly --downloaddir <rpm_dir> <package>
您将下载该软件包的 RPM<package>
及其所有依赖项,并将其放在目录<rpm_dir>
.例如,使用 Git:
$ mkdir root rpms
$ sudo yum install --installroot=/home/roy/root \
--downloadonly --downloaddir rpms/ git
答案3
也尝试一下
repoquery -R --resolve --recursive <name> | xargs -r yumdownloader
例如:
repoquery -R --resolve --recursive firefox | xargs -r yumdownloader
答案4
我发现在实践中构建这样的存储库很难维护。我们构建这个存储库是因为:
- 我们想要从多个服务器的本地源提取包。
- 只允许安装受信任的软件包。
我们可以遇到的问题是:
- 保持软件包最新。依赖关系发生变化。有些被添加,有些被删除。
- 添加我们想要安装的新软件包。
- 上述挑战延长了推送关键更新的过程。
最终更好的解决方案是我们的问题是代理官方存储库并缓存我们使用的包。这效果很好,因为:
- 只有我们实际使用的包才存储在本地。
- 旧包自动过期。
- 当第一次使用包时,它会从官方存储库中提取,但后续请求来自缓存。
- 信任官方存储库就足以建立信任。我们的代理镜像仅从可信来源提取包。
我们使用 Nginx 和内置的代理支持。