Réponses:
Vous pouvez utiliser à la repotrack
place comme ceci:
repotrack -a x86_64 -p /repos/Packages [packages]
Malheureusement, il y a un bug avec le -a
drapeau (arch). Il téléchargera i686 et x86_64.
Voici comment y remédier:
if opts.arch:
#archlist = []
#archlist.extend(rpmUtils.arch.getArchList(opts.arch))
archlist = opts.arch.split(',') # Change to this
else:
archlist = rpmUtils.arch.getArchList()
Vous pouvez utiliser repoquery
pour obtenir une liste des packages de groupe:
repoquery --qf=%{name} -g --list --grouppkgs=all [groups]
Que vous pouvez nourrir dans le repotrack:
repoquery --qf=%{name} -g --list --grouppkgs=all [groups] | xargs repotrack -a x86_64 -p /repos/Packages
--recursive
option à la commande repoquery pour qu'elle fonctionne de manière récursive.
yum-utils
projet en amont . La raison pour laquelle il télécharge plus de paquets que prévu est que la fonction rpmUtils.arch.getArchList()
renvoie toutes les architectures compatibles pour celle donnée. Cela inclut par exemple l' noarch
architecture qui peut être nécessaire aux x86_64
paquets. Vous pouvez vérifier la source: yum.baseurl.org/gitweb?p=yum.git;a=blob;f=rpmUtils/…
Pour l'information de tous, yumdownloader
ne fait pas le travail. Pour ceux qui ont une expérience de la gestion de paquets avec `yum, il est naturel de s'attendre à ce que la ligne de commande suivante télécharge de manière récursive un RPM de paquet et toutes ses dépendances:
yumdownloader --resolve <package>
Mais ce n'est pas le cas. Peut-être qu’il affiche les dépendances de premier niveau ou celles qui ne sont pas déjà installées. Je ne suis pas sûr.
Voici une méthode qui fonctionne sur CentOS 6.5. Suivez les étapes pour installer le plugin downloadonly yum
tel que donné par Red Hat . Fondamentalement, sur CentOS 6.x, faites:
$ sudo yum install yum-plugin-downloadonly.noarch
Ensuite, utilisez le plugin en combinaison avec le --installroot
commutateur de yum
. Cela empêche yum
de résoudre et ensuite d'ignorer les dépendances déjà installées sur le système.
sudo yum install \
--installroot=</path/to/tmp_dir> \
--downloadonly --downloaddir <rpm_dir> <package>
Vous auriez téléchargé les RPM du package <package>
et toutes ses dépendances dans le répertoire <rpm_dir>
. Exemple, avec Git:
$ mkdir root rpms
$ sudo yum install --installroot=/home/roy/root \
--downloadonly --downloaddir rpms/ git
sudo yum install yum-plugin-downloadonly.noarch
dit No package yum-plugin-downloadonly.noarch available.
quoi faire?
yum search yumdownloader
retouryum-utils.noarch
Cannot find a valid baseurl for repo: base/$releasever/x86_64
lorsque j'ajoute le --installroot
drapeau.
Je me rends compte que le fil est vieux, mais au cas où quelqu'un tomberait dessus, vous pouvez utiliser yum pour accomplir le comportement souhaité.
Commencez par installer le plugin downloadonly (instructions pour RHEL): (RHEL5)
$ yum install yum-downloadonly
(RHEL6)
$ yum install yum-plugin-downloadonly
Ensuite, exécutez la commande comme suit:
$ yum install --downloadonly --downloaddir=/some/arbitrary/path [package]
Si vous ignorez le --downloaddir
yum sera automatiquement téléchargé sur/var/cache/yum
Donc, à moins que vous ayez besoin d'utiliser yumdownloader en particulier, je pense que ce serait le moyen le plus simple d'atteindre l'objectif.
Si vous venez du futur (Fedora 23+), où miam est remplacé par dnf, ce script bash pourrait vous être utile.
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
J'ai trouvé que dans la pratique, la construction d'une pension comme celle-ci était difficile à maintenir. Nous avons construit ce repo parce que:
Les problèmes que nous pouvons traverser étaient:
En fin de compte, la meilleure solution à notre problème consistait à utiliser un proxy pour le dépôt officiel et à mettre en cache les packages que nous utilisions. Cela fonctionne bien parce que:
Nous avons utilisé Nginx et le support de proxy intégré.
S'appuyant sur la réponse de Luke et les commentaires ...
A ce jour repotrack
correspondra à toutes les architectures suivantes quand x86_64
est spécifié: x86_64
, athlon
, i686
, i586
, i486
, i386
et noarch
.
Pour mes fins , je suis seulement intéressé par x86_64
et noarch
paquets, et je sais que ma distribution n'a pas de athlon
paquets.
La commande suivante obtient une liste des URL de packages, filtre les i?86
architectures et affiche les noms des packages au fur et à mesure de leur téléchargement:
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'
Notez que repotrack
cela ne vous avertit pas s'il ne peut pas trouver un package qui satisfait une dépendance dans vos dépôts activés. Il passe silencieusement.
Essayez aussi
repoquery -R --resolve --recursive <name> | xargs -r yumdownloader
par exemple:
repoquery -R --resolve --recursive firefox | xargs -r yumdownloader
--requires
--resolve
option de la repoquerie ne fonctionne pas récursivement pour les dép.