Najlepszy sposób na wyczyszczenie repozytorium Yum?

10

Mamy niestandardowe repozytorium Yum, do którego nasi programiści przesyłają kompilacje.

Problem polega na tym, że po pewnym czasie staje się zagracony starymi wersjami.

Ręczne usuwanie starych wersji jest dość denerwujące, więc zanim spróbujemy sami zautomatyzować, zastanawiam się, czy istnieje jakiś skrypt, który wyczyści stare RPM na podstawie wersji (preferowanej) lub czasu przesłania.

Najlepiej byłoby, gdybyśmy mogli określić, aby po prostu zapisać X ostatnich wersji i usunąć wszystko inne. Następnie moglibyśmy go skronić i pozwolić, aby działał codziennie.

Dzięki za pomysł.

SyRenity
źródło
Jeśli nie ma skryptu, powinien być. Napisaliśmy jedną na własny użytek w naszej firmie, ale jeśli to możliwe, przekonam się, że wypuszczę ją na wolność.
Andrew M.,
Świetnie - docenię, czy można go otworzyć. Publikowanie na githubie byłoby świetną odea.
SyRenity,

Odpowiedzi:

13

„Prostym” sposobem jest po prostu zrzucenie wszystkiego do katalogu i uruchomienie:

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

... bardziej skomplikowanym sposobem jest skonfigurowanie koji / etc. robić swoje kompilacje i tworzyć repozytorium.

James Antill
źródło
Fajnie - dokładnie tego potrzebowałem.
SyRenity,
świetne rzeczy, nie byłem tego świadomy
dyasny
Technicznie powinieneś używać go razem z xargs, ponieważ w przeciwnym razie możesz go uzyskać rm: missing operand(jeśli nie ma starych RPM do usunięcia). Tak więc:repomanage --keep=2 --old /path/to/repo | xargs rm -f
Danila Vershinin
Powodem używania xargs jest to, że rm $(repomanage --keep=2 --old /path/to/repo)może łatwo przekroczyć maksymalną długość polecenia. xargszajmie się ogromną listą argumentów. Zobacz: offbytwo.com/2011/06/26/things-you-didnt-know-about-xargs.html
shrewmouse
1

Sprawdź narzędzie „repomanage” w RPM yum-utils. Robi dokładnie to, czego szukasz.

[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
źródło
0

Wykorzystałbym system wersjonowania lub etykietowania, którego używasz do identyfikowania kompilacji. Można również zidentyfikować paczki według daty za pomocą skryptu uruchomionego na serwerze, na którym znajduje się repozytorium.

ewwhite
źródło
Masz na myśli sprawdzenie wersji w nazwach plików? Tak też myślę, ale fajnie byłoby mieć do tego zautomatyzowany skrypt.
SyRenity,
1
Pamiętaj również, że nazwa pliku niekoniecznie wskazuje na wersję. To znaczy, mogę zmienić nazwę RPM na cokolwiek chcę; Zamiast tego yum użyje metadanych RPM.
Andrew M.,
0

Jeśli przesyłanie odbywa się codziennie, dlaczego nie rozważyć usunięcia starych plików, które są starsze niż określona liczba dni (pod względem czasu dostępu / modyfikacji)? Znajdź je i po prostu usuń. Jeśli Twoi programiści mogliby przesyłać kompilacje w taki sposób, aby podczas przesyłania wstawiali nazwę bieżącego miesiąca do nazwy pliku, miałoby to sens z bezpośredniej nazwy pliku, że plik został przesłany w tzw. na podstawie spojrzenia na nazwę pliku. Automatyzacja skryptu ułatwiłaby po prostu rozważenie usunięcia tych plików lub zachowanie tych plików, które pasują do poprzedniego i bieżącego miesiąca. Tylko myśl.

Nikhil Mulley
źródło