Comment puis-je mettre en miroir un référentiel yum mais télécharger uniquement les dernières versions de chaque package?

8

Je voudrais mettre en miroir les référentiels Yum / RPM suivants sur http://yum.puppetlabs.com/ :

Le référentiel Puppet contient tous les produits Puppet jamais sortis et est assez volumineux à environ 8 Go. Je n'ai besoin que de mettre en miroir les dernières versions des fichiers.

J'ai essayé de mettre en miroir le référentiel en utilisant reposync --newest-only:

reposync --config=puppetlabs.repo.el6 --repoid=puppetlabs-products --repoid=puppetlabs-deps --newest-only --download_path=el/6 --quiet --downloadcomps

et cela télécharge les nouveaux packages comme j'ai besoin. Cependant, reposync ne crée pas automatiquement la structure des répertoires régulière ( x86_64, noarch, SRPMS, etc.) et ne reflète pas repodata.xml. En conséquence, mes clients miam obtiennent des erreurs comme ceci:

[root@web1 ~]# yum --quiet install puppet
http://mirrors.example.org/pub/puppet/el/6/puppetlabs-deps/x86_64/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: puppetlabs-deps. Please verify its path and try again
[root@web1 ~]# 

Existe-t-il un moyen de mettre en miroir par programme uniquement les nouveaux fichiers d'un référentiel Yum et de suivre la structure de répertoire du référentiel standard?

Stefan Lasiewski
la source
2
Je ne sais pas d'emblée, mais c'est une question intéressante. Personnellement, je ne m'en fais pas. 8 Go est une infime fraction de mes 276 Go de miroirs locaux ...
Michael Hampton
Bien sûr, je sais, pourquoi s'inquiéter de 8 Go. J'essaie juste d'être efficace :) De plus, j'ai parfois besoin de configurer rapidement un autre miroir yum des dépôts EPEL ou CentOS, et ceux-ci sont assez grands. Je n'ai vraiment besoin que des dernières versions N des packages.
Stefan Lasiewski

Réponses:

7

reposync est le seul moyen fiable de le faire. Vous devrez créer un petit script bash et utiliser des paramètres de resynchronisation (-a) pour télécharger chaque architecture dans un dossier séparé, puis exécuter createrepo pour générer les métadonnées.

Voici un petit script que j'ai (il fonctionne sur Ubuntu mais peu importe, vous avez l'idée):

chat sync-repos

#!/bin/bash

reposync -n -c /etc/yum/yum.conf -p /repos/centos6 -d -r base -r updates -r extras -r centosplus -r contrib
createrepo -g /repos/centos6/base/repodata/comps.xml /repos/centos6/base
createrepo /repos/centos6/updates
createrepo /repos/centos6/extras
createrepo /repos/centos6/centosplus

reposync -n -c /etc/yum/yum.conf -p /repos -d -r vmware -r home_xtreemfs
createrepo /repos/vmware
createrepo /repos/home_xtreemfs

reposync -n -c /etc/yum/yum.conf -p /repos/vz -d -r openvz-utils -r openvz-kernel-rhel6
createrepo /repos/vz/openvz-utils
createrepo /repos/vz/openvz-kernel-rhel6

reposync -n -c /etc/yum/yum.conf -p /repos/nginx -d -r nginx-stable -r nginx-mainline
createrepo /repos/nginx/nginx-stable
createrepo /repos/nginx/nginx-mainline
Florin Asăvoaie
la source
Merci pour les conseils. Ce genre de travaux, comme reposyncinsiste sur l'ajout de la repoidà la structure de répertoires. Cela signifie une commande comme reposync --config=puppetlabs.repo.el6 --repoid=puppetlabs-products --newest-only --arch=x86_64' creates a bizarrely named directory like 'x86_64/puppetlabs-productsquand j'ai simplement besoin de 'x86_64 /'.
Stefan Lasiewski
Ouais, je trouve ça ennuyeux aussi mais peut-être que si vous en faites un lien symbolique ou quelque chose comme ça ça marchera. D'un autre côté, si vous avez le temps d'investir, reposync et createrepo sont des scripts python que vous pouvez modifier pour répondre à vos besoins :).
Florin Asăvoaie
4
n'était probablement pas disponible au moment de la publication, mais pour le bénéfice des futurs lecteurs: --norepopath N'ajoutez pas le changement de nom au chemin de téléchargement. Ne peut être utilisé que lors de la synchronisation d'un seul référentiel (la valeur par défaut consiste à ajouter le nouveau nom).
mikejonesey
3

Vous pouvez le faire avec pulp et le plugin distributeur yum rpm.

Lors de la configuration d'un nouveau référentiel, pour obtenir une seule version de chaque tr / min, définissez le paramètre retenue_old_count retenue_old_count

retain_old_count
Count indicating how many old rpm versions to retain; by default it will 
download all versions available.

Donc, quelque chose comme:

$ pulp-admin rpm repo create \
          --repo-id=rhel6-puppet-products \
          --relative-url=rhel6-puppet-products \
          --feed=http://yum.puppetlabs.com/el/6/products/ \
          --retain-old-count 1
$ pulp-admin rpm repo sync run  \
          --repo-id=rhel6-puppet-products \

Devrait réaliser ce que vous voulez. Il existe un guide de démarrage rapide qui devrait vous donner une idée du fonctionnement de la chose, au cas où vous ne l'auriez pas essayé auparavant.

Petter H
la source
0

Une autre option facile à utiliser pour ce que vous voulez faire est la sortie dans l'espace, est facile à utiliser, vous pouvez établir une connexion sécurisée entre le gestionnaire de référentiel et vos hôtes, gérer les packages que vous souhaitez synchroniser et fournir à vos hôtes, planifier les synchronisations mises à jour et correctifs et bien d'autres fonctionnalités intéressantes.

ravasquezgt
la source
la sortie dans l'espace a l'air bien, mais elle fait bien plus que ce dont j'ai besoin. Nous essayons déjà de provisionner à l'aide de Puppet, Foreman et d'autres systèmes.
Stefan Lasiewski
0

Modifier / etc / sysconfig / uln-yum-mirror Changer ALL_PKGS = 0

0 -> télécharger la dernière version uniquement, 1 -> télécharger toutes les versions

Mike Lee
la source
5
Votre réponse a vraiment besoin de plus de contexte pour être utile. Pouvez-vous le modifier? Par exemple, comment cela fournit-il un référentiel? Cette réponse s'ajoute-t-elle à une autre réponse?
Tim