Come posso eseguire il mirroring di un repository yum ma scaricare solo le versioni più recenti di ciascun pacchetto?


8

Vorrei rispecchiare i seguenti repository Yum / RPM su http://yum.puppetlabs.com/ :

Il repository Puppet contiene tutti i prodotti Puppet mai rilasciati ed è abbastanza grande con circa 8 GB. Devo solo eseguire il mirroring delle versioni più recenti dei file.

Ho provato a eseguire il mirroring del repository utilizzando reposync --newest-only:

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

e questo scarica i pacchetti più recenti di cui ho bisogno. Tuttavia, reposync non crea automaticamente la struttura di directory normale ( x86_64, noarch, SRPMS, etc.) e non lo fa specchio repodata.xml. Di conseguenza, i miei clienti yum ricevono errori come questo:

[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 ~]# 

Esiste un modo per eseguire il mirroring programmatico solo dei nuovi file da un repository Yum e seguire la struttura di directory del repository standard?


2
Non lo so con disinvoltura, ma è una domanda interessante. Personalmente non me ne preoccupo. 8 GB è una piccola parte dei miei 276 GB di mirror locali ...
Michael Hampton,

Certo che lo so, perché preoccuparsi di circa 8 GB. Sto solo cercando di essere efficiente :) Inoltre, a volte ho bisogno di impostare rapidamente un altro mirror yum dei repository EPEL o CentOS, e quelli sono abbastanza grandi. Ho davvero bisogno solo delle ultime versioni N dei pacchetti.
Stefan Lasiewski,

Risposte:


7

reposync è l'unico modo affidabile per farlo. Sarà necessario creare un piccolo script bash e utilizzare i parametri reposync (-a) per scaricare ciascuna architettura in una cartella separata e quindi eseguire createrepo per generare i metadati.

Ecco un piccolo script che ho (è in esecuzione su Ubuntu ma non importa, hai l'idea):

cat 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

Grazie per i suggerimenti Questo tipo di funzionamento, come reposyncinsiste per aggiungere repoidalla struttura di directory. Questo significa un comando come reposync --config=puppetlabs.repo.el6 --repoid=puppetlabs-products --newest-only --arch=x86_64' creates a bizarrely named directory like 'x86_64/puppetlabs-productsquando ho semplicemente bisogno di 'x86_64 /'.
Stefan Lasiewski,

Sì, lo trovo anche noioso, ma forse se lo trasformi in un collegamento simbolico o qualcosa del genere funzionerà. D'altra parte, se hai tempo da investire, reposync e createrepo sono script di Python che puoi modificare in base alle tue esigenze :).
Florin Asăvoaie,

4
probabilmente non era disponibile al momento del post, ma a beneficio dei futuri lettori: --norepopath Non aggiungere il nome di risposta al percorso di download. Può essere utilizzato solo durante la sincronizzazione di un singolo repository (l'impostazione predefinita è aggiungere il nome utente).
mikejonesey,

3

Puoi farlo con pulp e il plugin distributore yum rpm.

Durante la congregazione di un nuovo repository, per ottenere solo una versione di ciascun numero di giri, impostare il parametro retain_old_count retain_old_count

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

Quindi qualcosa sulla falsariga di:

$ 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 \

Dovresti ottenere quello che vuoi. C'è una guida rapida che dovrebbe darti un'idea di come funziona la cosa, nel caso non l'avessi mai provata prima.


0

Un'altra opzione facile da usare per quello che vuoi fare, è spacewalk, è facile da usare, puoi stabilire una connessione sicura tra il gestore repo e i tuoi host, gestire quali pacchetti vuoi sincronizzare e fornire ai tuoi host, pianificare le sincronizzazioni aggiornamenti e patch e molte altre fantastiche funzionalità.


spacewalk sembra bello, ma fa molto di più di quello che mi serve. Stiamo già tentando il provisioning utilizzando Puppet, Foreman e altri sistemi.
Stefan Lasiewski,

0

Modifica / etc / sysconfig / uln-yum-mirror Cambia ALL_PKGS = 0

0 -> scarica solo le ultime, 1 -> scarica tutte le versioni


5
La tua risposta ha davvero bisogno di più contesto per essere utile. Sei in grado di modificarlo? Ad esempio, come fornisce un repository? Questa risposta si aggiunge a un'altra risposta?
Tim
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.