Existe-t-il un moyen de télécharger toutes les dépendances avec yumdownloader, même si elles sont déjà installées?
J'essaie de créer un dépôt local et je souhaite uniquement inclure les packages dont nous avons besoin.
Vous pouvez utiliser repotrack
à la place comme ceci:
repotrack -a x86_64 -p /repos/Packages [packages]
Malheureusement, il y a un bug avec le -a
drapeau (Arch). Il va télécharger 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 alimenter dans repotrack:
repoquery --qf=%{name} -g --list --grouppkgs=all [groups] | xargs repotrack -a x86_64 -p /repos/Packages
Pour l'information de tous, yumdownloader
ne fait pas l'affaire. Pour toute personne ayant une certaine expérience dans la gestion de packages avec `yum, il est naturel de s'attendre à ce que la ligne de commande suivante télécharge récursivement un RPM de package et toutes ses dépendances:
yumdownloader --resolve <package>
Mais ce n'est pas le cas. Peut-être qu'il imprime des 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 pour yum
comme indiqué par Red Hat . Fondamentalement, sur CentOS 6.x, faites:
$ Sudo yum install yum-plugin-downloadonly.noarch
Utilisez ensuite le plugin en combinaison avec le --installroot
changer de yum
. Cela empêche yum
de résoudre puis 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
Je me rends compte que le fil est vieux, mais si quelqu'un tombe dessus, vous pouvez utiliser yum pour accomplir le comportement souhaité.
Installez d'abord le plugin downloadonly (instructions pour RHEL): (RHEL5)
$ yum install yum-downloadonly
(RHEL6)
$ yum install yum-plugin-downloadonly
Exécutez ensuite 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 n'utilisiez spécifiquement yumdownloader, je pense que ce serait le moyen le plus simple d'atteindre l'objectif.
Si vous venez du futur (Fedora 23+), où yum est remplacé par dnf, vous pourriez trouver ce script bash 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'un référentiel comme celui-ci était difficile à maintenir. Nous avons construit ce dépôt car:
Les problèmes que nous pouvons traverser étaient:
En fin de compte, la meilleure solution à notre problème était de proxy les dépôts officiels et de mettre en cache les packages que nous avons utilisés. Cela fonctionne bien parce que:
Nous avons utilisé Nginx et le support proxy intégré.
Essayez aussi
repoquery -R --resolve --recursive <name> | xargs -r yumdownloader
par exemple.:
repoquery -R --resolve --recursive firefox | xargs -r yumdownloader
S'appuyant sur réponse de Luke et les commentaires ...
À ce jour, repotrack
correspondra à toutes les architectures suivantes lorsque x86_64
est spécifié: x86_64
, athlon
, i686
, i586
, i486
, i386
et noarch
.
Pour mes besoins, je ne suis intéressé que par x86_64
et noarch
packages, et je sais que ma distribution n'a pas de packages athlon
.
La commande suivante obtient une liste des URL de package, filtre 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
ne vous avertit pas s'il ne trouve pas de package satisfaisant une dépendance dans votre référentiel activé. Il l'ignore silencieusement.