Réponses:
Vous pouvez utiliser à la repotrackplace comme ceci:
repotrack -a x86_64 -p /repos/Packages [packages]
Malheureusement, il y a un bug avec le -adrapeau (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 repoquerypour 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
--recursiveoption à la commande repoquery pour qu'elle fonctionne de manière récursive.
yum-utilsprojet 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' noarcharchitecture qui peut être nécessaire aux x86_64paquets. Vous pouvez vérifier la source: yum.baseurl.org/gitweb?p=yum.git;a=blob;f=rpmUtils/…
Pour l'information de tous, yumdownloaderne 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 yumtel 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 --installrootcommutateur de yum. Cela empêche yumde 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.noarchdit No package yum-plugin-downloadonly.noarch available.quoi faire?
yum search yumdownloaderretouryum-utils.noarch
Cannot find a valid baseurl for repo: base/$releasever/x86_64lorsque j'ajoute le --installrootdrapeau.
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 --downloaddiryum 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 repotrackcorrespondra à toutes les architectures suivantes quand x86_64est spécifié: x86_64, athlon, i686, i586, i486, i386et noarch.
Pour mes fins , je suis seulement intéressé par x86_64et noarchpaquets, et je sais que ma distribution n'a pas de athlonpaquets.
La commande suivante obtient une liste des URL de packages, filtre les i?86architectures 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 repotrackcela 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--resolveoption de la repoquerie ne fonctionne pas récursivement pour les dép.