Answers:
您可以这样使用repotrack:
repotrack -a x86_64 -p /repos/Packages [packages]
不幸的是,-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()
您可以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
--recursive选项添加到repoquery命令以使其递归工作。
yum-utils项目中。之所以下载比预期多的软件包,是因为该函数rpmUtils.arch.getArchList()返回给定软件包的所有兼容体系结构。例如,它包括软件包noarch可能需要的体系结构x86_64。您可以检查源:yum.baseurl.org/gitweb?p=yum.git;a=blob;f=rpmUtils/…
对于每个人的信息,yumdownloader都不会做。对于具有`yum软件包管理经验的人来说,很自然地期望以下命令行将递归下载软件包RPM及其所有依赖项:
yumdownloader --resolve <package>
但事实并非如此。可能是它打印了一级依赖项或尚未安装的依赖项。我不确定。
这是在CentOS 6.5上可以使用的一种方法。按照步骤安装Redhatyum提供的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
sudo yum install yum-plugin-downloadonly.noarch说No package yum-plugin-downloadonly.noarch available.怎么办?
yum search yumdownloader回归yum-utils.noarch
Cannot find a valid baseurl for repo: base/$releasever/x86_64添加--installroot标志时出现此错误。
我知道线程很旧,但是如果有人偶然发现了该线程,则可以使用yum完成所需的行为。
首先安装downloadonly插件(RHEL的说明):(RHEL5)
$ yum install yum-downloadonly
(RHEL6)
$ yum install yum-plugin-downloadonly
接下来运行命令,如下所示:
$ yum install --downloadonly --downloaddir=/some/arbitrary/path [package]
如果您忽略了--downloaddiryum,则会自动下载到/var/cache/yum
因此,除非您需要专门使用yumdownloader,否则我认为这是实现目标的最简单方法。
如果您来自未来(Fedora 23+),而yum将被dnf取代,那么您可能会发现此bash脚本很有用。
rpmDownloader:
#!/bin/sh
set -xev
rm -fr packages
#dnf download $1 --destdir packages
export PATH=.:$PATH
echo $PWD
DEPS=$(rpmResolver $1)
dnf download $DEPS --destdir packages
rm -fr ${1}-dependencies
mv packages ${1}-dependencies
rpmResolver:
#!/bin/sh
goal=$1
deps=$(rpm -q --qf '[%{REQUIRENAME}\n]' $goal | egrep -v '^(rpmlib|rtld|config|/)')
goals=
while true; do
subs=$(rpm -q --qf '%{NAME}\n' --whatprovides $deps | sort -u | tr '\n' ' ')
if [ ."$subs" = ."$goals" ]; then
echo -n "$goals "
exit 0
fi
goals=$(echo $goals $subs | tr ' ' '\n' | sort -u | tr '\n' ' ')
for sub in $subs; do
subdeps=$(rpm -q --qf '[%{REQUIRENAME}\n]' $sub | egrep -v '^(rpmlib|rtld|config|/)')
deps=$(echo $deps $subdeps | sort -u)
done
done
我发现在实践中构建这样的仓库很难维护。我们建立此仓库的原因是:
我们可以遇到的问题是:
最后,更好地解决我们的问题是代理官方存储库并缓存我们使用的软件包。效果很好,因为:
我们使用了Nginx和内置的代理支持。
以卢克的回答和评论为基础...
写这篇文章的repotrack时候将匹配以下所有架构的x86_64规定是:x86_64,athlon,i686,i586,i486,i386,和noarch。
就我的目的而言,我只对x86_64和noarch软件包感兴趣,而且我知道我的发行版中没有任何athlon软件包。
以下命令获取软件包URL的列表,过滤出i?86体系结构,并在下载软件包时打印出软件包名称:
repotrack --arch=x86_64 --urls gs1000-server \
| sed '/\.i[3-6]86\.rpm$/d' \
| xargs -I {} sh -c 'curl -s -O {}; echo {} | rev | cut -d '/' -f 1 | rev'
请注意,repotrack如果在启用的存储库中找不到满足依赖关系的程序包,则不会发出警告。它默默地跳过它。
也试试
repoquery -R --resolve --recursive <name> | xargs -r yumdownloader
例如:
repoquery -R --resolve --recursive firefox | xargs -r yumdownloader
来源:https : //www.thegeekdiary.com/downloading-rpm-packages-with-dependencies-yumdownloader-vs-yum-downloadonly-vs-repoquery/
--requires--resolve选项不适用于deps。