回答:
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
--recursive
repoqueryコマンドにオプションを追加して、再帰的に機能するようにします。
yum-utils
プロジェクトに提出する必要があります。予想よりも多くのパッケージをダウンロードする理由は、関数rpmUtils.arch.getArchList()
が指定されたアーキテクチャと互換性のあるすべてのアーキテクチャを返すためです。たとえば、パッケージnoarch
に必要なアーキテクチャが含まれx86_64
ます。ソースを確認できます:yum.baseurl.org/gitweb?p
みんなの情報についてyumdownloader
は、仕事をしていません。`yumを使用したパッケージ管理の経験がある人なら、次のコマンドラインがパッケージRPMとそのすべての依存関係を再帰的にダウンロードすると予想するのは自然です。
yumdownloader --resolve <package>
しかし、そうではありません。第1レベルの依存関係またはまだインストールされていない依存関係が出力される場合があります。私はわかりません。
CentOS 6.5で機能する1つの方法を次に示します。手順に従って、Red Hatが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
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を使用して目的の動作を実現できます。
最初にダウンロード専用プラグインをインストールします(RHELの手順):(RHEL5)
$ yum install yum-downloadonly
(RHEL6)
$ yum install yum-plugin-downloadonly
次に、次のようにコマンドを実行します。
$ yum install --downloadonly --downloaddir=/some/arbitrary/path [package]
無視すると、--downloaddir
yumは自動的にダウンロードされます/var/cache/yum
したがって、特にyumdownloaderを使用する必要がない限り、これが目標を達成する最も簡単な方法だと思います。
yumがdnfに置き換えられている未来(Fedora 23以降)から来ている場合は、この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に対して再帰的に機能しません。