すでにインストールされている場合でも、yumdownloaderですべての依存関係をダウンロードする方法はありますか?
ローカルリポジトリを作成しようとしており、必要なパッケージのみを含めたいと考えています。
代わりに、次のように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
みんなの情報として、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
次に、yum
の--installroot
スイッチと組み合わせてプラグインを使用します。これにより、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
スレッドが古いことに気づきましたが、誰かがこれに遭遇した場合は、yumを使用して目的の動作を実行できます。
まず、downloadonlyプラグインをインストールします(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
実際には、このようなレポを構築することは維持するのが難しいことに気付きました。このレポを作成した理由は次のとおりです。
私たちが直面する可能性のある問題は次のとおりです。
結局、ourの問題に対するより良い解決策は、公式リポジトリをプロキシして、使用したパッケージをキャッシュすることでした。これはうまくいく:
Nginxと組み込みのプロキシサポートを使用しました。
またお試しください
repoquery -R --resolve --recursive <name> | xargs -r yumdownloader
例えば。:
repoquery -R --resolve --recursive firefox | xargs -r yumdownloader
ルークの答え とコメントに基づいて...
これを書いている時点では、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
は、有効なリポジトリの依存関係を満たすパッケージを見つけられない場合でも警告を表示しないことに注意してください。黙ってスキップします。