Wie kann ich ein yum-Repository spiegeln, aber nur die neuesten Versionen jedes Pakets herunterladen?

8

Ich möchte die folgenden Yum / RPM-Repositorys unter http://yum.puppetlabs.com/ spiegeln :

Das Puppet-Repository enthält jedes Puppet-Produkt, das jemals veröffentlicht wurde, und ist mit etwa 8 GB recht groß. Ich muss nur die neuesten Versionen der Dateien spiegeln.

Ich habe versucht, das Repository mit reposync --newest-onlyfolgenden Spiegeln zu spiegeln :

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

und dies lädt die neuesten Pakete herunter, wie ich brauche. Allerdings ist reposync nicht automatisch die normale Verzeichnisstruktur erstellen ( x86_64, noarch, SRPMS, usw.) und nicht Spiegel repodata.xml. Infolgedessen erhalten meine Kunden folgende Fehler:

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

Gibt es eine Möglichkeit, nur die neuen Dateien aus einem Yum-Repo programmgesteuert zu spiegeln und der Standard-Repository-Verzeichnisstruktur zu folgen?

Stefan Lasiewski
quelle
2
Ich weiß es nicht ohne weiteres, aber es ist eine interessante Frage. Persönlich mache ich mir darüber keine Sorgen. 8 GB sind ein winziger Bruchteil meiner 276 GB lokalen Spiegel ...
Michael Hampton
Klar weiß ich, warum sich über 8GB ärgern. Ich versuche nur, effizient zu sein :) Außerdem muss ich manchmal schnell einen anderen Yum-Spiegel der EPEL- oder CentOS-Repos einrichten, und diese sind ziemlich groß. Ich brauche wirklich nur die neuesten N-Versionen der Pakete.
Stefan Lasiewski

Antworten:

7

Reposync ist der einzig zuverlässige Weg, dies zu tun. Sie müssen ein kleines Bash-Skript erstellen und die Reposync-Parameter (-a) verwenden, um jede Architektur in einen separaten Ordner herunterzuladen, und dann createrepo ausführen , um die Metadaten zu generieren.

Hier ist ein kleines Skript, das ich habe (es läuft unter Ubuntu, spielt aber keine Rolle, Sie haben die Idee):

Katzensynchronisations-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
quelle
Danke für die Tipps. Diese Art von funktioniert, da reposyncdarauf besteht, die repoidan die Verzeichnisstruktur anzuhängen. Dies bedeutet einen Befehl wie reposync --config=puppetlabs.repo.el6 --repoid=puppetlabs-products --newest-only --arch=x86_64' creates a bizarrely named directory like 'x86_64/puppetlabs-productswenn ich einfach 'x86_64 /' brauche.
Stefan Lasiewski
Ja, ich finde das auch nervig, aber vielleicht funktioniert es, wenn Sie es zu einem Symlink oder so machen. Wenn Sie jedoch Zeit zum Investieren haben, sind Reposync und Createrepo Python-Skripte, die Sie an Ihre Bedürfnisse anpassen können :).
Florin Asăvoaie
4
Wahrscheinlich war es zum Zeitpunkt des Beitrags nicht verfügbar, aber zum Nutzen zukünftiger Leser: --norepopath Fügen Sie den Reponamen nicht zum Download-Pfad hinzu. Kann nur beim Synchronisieren eines einzelnen Repositorys verwendet werden (standardmäßig wird der Reponame hinzugefügt).
Mikejonesey
3

Sie können dies mit Pulp und dem Yum RPM Distributor Plugin tun .

Wenn Sie ein neues Repo konfigurieren, um nur eine Version jeder Drehzahl zu erhalten, setzen Sie den Parameter 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.

Also etwas in der Art von:

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

Sollte erreichen, was Sie wollen. Es gibt eine Kurzanleitung, die Ihnen eine Vorstellung davon geben soll, wie das Ding funktioniert, falls Sie es noch nicht ausprobiert haben.

Petter H.
quelle
0

Eine weitere einfache Option, die Sie für Ihre Aufgaben verwenden können, ist Spacewalk. Sie ist einfach zu verwenden. Sie können eine sichere Verbindung zwischen dem Repo-Manager und Ihren Hosts herstellen, verwalten, welche Pakete Sie synchronisieren und Ihren Hosts zur Verfügung stellen möchten, und die Synchronisierungen planen Updates und Patches und viele weitere coole Funktionen.

ravasquezgt
quelle
Spacewalk sieht gut aus, aber es macht viel mehr als ich brauche. Wir versuchen bereits, die Bereitstellung mit Puppet, Foreman und anderen Systemen durchzuführen.
Stefan Lasiewski
0

Bearbeiten Sie / etc / sysconfig / uln-yum-mirror Ändern Sie ALL_PKGS = 0

0 -> nur spätestens herunterladen, 1 -> alle Versionen herunterladen

Mike Lee
quelle
5
Ihre Antwort braucht wirklich mehr Kontext, um nützlich zu sein. Können Sie es bearbeiten? Wie stellt dies beispielsweise ein Repository bereit? Ist diese Antwort zusätzlich zu einer anderen Antwort?
Tim