Der beste Weg, um das Yum-Repository zu bereinigen?

10

Wir haben ein benutzerdefiniertes Yum-Repo, in das unsere Entwickler Builds hochladen.

Das Problem ist, dass es nach einiger Zeit mit alten Versionen überfüllt ist.

Das manuelle Entfernen der alten Versionen ist ziemlich ärgerlich. Bevor wir versuchen, sie selbst zu automatisieren, frage ich mich, ob es ein Skript gibt, das alte RPMs basierend auf der Version (bevorzugt) oder dem Zeitpunkt des Uploads bereinigt.

Am besten wäre es, wenn wir angeben könnten, einfach X letzte Versionen zu speichern und alles andere zu löschen. Dann könnten wir es cronen und es einfach täglich laufen lassen.

Danke für jede Idee.

SyRenity
quelle
Wenn es kein Skript gibt, sollte es eines geben. Wir haben eine für unseren eigenen Gebrauch in unserer Firma geschrieben, aber ich werde sehen, wie ich sie nach Möglichkeit in die Wildnis bringen kann.
Andrew M.
Großartig - ich werde es zu schätzen wissen, wenn es Open-Source sein kann. Auf Github zu posten wäre eine großartige Odea.
SyRenity

Antworten:

13

Der "einfache" Weg besteht darin, einfach alles in ein Verzeichnis zu kopieren und auszuführen:

rm $(repomanage --keep=2 --old /path/to/repo)
createrepo /path/to/repo

... der kompliziertere Weg ist das Einrichten von Koji / etc. um deine Builds zu machen und die Repos zu erstellen.

James Antill
quelle
Cool - genau das brauchte ich.
SyRenity
tolles Zeug, war sich dessen nicht bewusst
dyasny
Technisch sollten Sie es xargsstattdessen zusammen mit verwenden, da Sie es sonst möglicherweise bekommen rm: missing operand(wenn keine alten RPMs zum Entfernen vorhanden sind). Also:repomanage --keep=2 --old /path/to/repo | xargs rm -f
Danila Vershinin
Der Grund für die Verwendung von xargs liegt rm $(repomanage --keep=2 --old /path/to/repo)darin, dass die maximale Befehlslänge leicht überschritten werden kann. xargswird sich um eine riesige Liste von Argumenten kümmern. Siehe: offbytwo.com/2011/06/26/things-you-didnt-know-about-xargs.html
Spitzmaus
1

Schauen Sie sich das Dienstprogramm "repomanage" im RPM von yum-utils an. Es macht genau das, wonach Sie suchen.

[root ~]# repomanage --help
usage:
  repomanage: manage a directory of rpm packages. returns lists of newest
            or oldest packages in a directory for easy piping to xargs
            or similar programs.
  repomanage [--old] [--new] path.


  options:
    -h, --help            show this help message and exit
    -o, --old             print the older packages
    -n, --new             print the newest packages
    -s, --space           space separated output, not newline
    -k KEEP, --keep=KEEP  newest N packages to keep - defaults to 1
    -c, --nocheck         do not check package payload signatures/digests
[root ~]#
Michael V. Pelletier
quelle
0

Ich würde das Versions- oder Beschriftungssystem nutzen, mit dem Sie Builds identifizieren. Sie können Pakete auch anhand des Datums anhand eines Skripts identifizieren, das auf dem Server ausgeführt wird, auf dem sich das Repository befindet.

ewwhite
quelle
Sie meinen, indem Sie die Version in Dateinamen überprüfen? Dies ist auch mein Gedankengang, aber es wäre schön, ein automatisiertes Skript dafür zu haben.
SyRenity
1
Denken Sie auch daran, dass der Dateiname nicht unbedingt die Version angibt. Das heißt, ich kann eine Drehzahl nach Belieben umbenennen. yum verwendet stattdessen die Metadaten des RPM.
Andrew M.
0

Wenn die Uploads täglich stattfinden, können Sie die alten Dateien löschen, die älter sind als eine bestimmte Anzahl von Tagen (in Bezug auf ihre Zugriffs- / Änderungszeiten). Finde sie und lösche sie einfach. Wenn Ihre Entwickler Builds so hochladen könnten, dass sie beim Hochladen den Namen des aktuellen Monats in den Dateinamen einfügen, wäre es aus dem Dateinamen direkt sinnvoll, dass die Datei im sogenannten Monatsjahr hochgeladen wurde, und es ist sinnvoll, nur zu löschen anhand des Dateinamens. Es würde Ihrer Skriptautomatisierung leicht machen, nur das Entfernen dieser Dateien in Betracht zu ziehen oder nur die Dateien beizubehalten, die mit dem Vormonat und dem aktuellen Monat übereinstimmen. Nur ein Gedanke.

Nikhil Mulley
quelle