Найкращий спосіб очищення сховища Yum?


10

У нас є спеціальна Yum repo, яку завантажують наші розробники.

Проблема полягає в тому, що через деякий час він захаращується старими версіями.

Видалення старих версій вручну - це дуже дратує, тому перш ніж спробувати самостійно її автоматизувати, мені цікаво, чи є сценарій, який би очищав старі RPM на основі версії (бажаної) або часу завантаження.

Найкраще, якби ми могли вказати на просте збереження останніх версій X та стерти все, що завгодно. Тоді ми могли б це зробити і просто дати йому працювати щодня.

Дякую за будь-яку ідею.


Якщо немає сценарію, він повинен бути. Ми написали його для власного використання в нашій компанії, але я буду бачити, як випустити це в дику природу, якщо це можливо.
Андрій М.

Чудово - я буду вдячний, якщо його можна відкрити. Опублікувати на Github було б чудовою одеєю.
SyRenity

Відповіді:


13

"Простий" спосіб - просто скинути все в каталог і запустити:

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

... більш складним способом є налаштування, які / тощо. займатися побудовою та створювати репости.


Круто - це саме те, що мені було потрібно.
SyRenity

чудові речі, не знали про це
dyasny

Технічно ви повинні використовувати його разом із ним xargs, тому що в іншому випадку ви можете отримати rm: missing operand(якщо немає старих RPM для видалення). Отже:repomanage --keep=2 --old /path/to/repo | xargs rm -f
Данила Вершинін

Причина використання xargs полягає в тому, що це rm $(repomanage --keep=2 --old /path/to/repo)може легко перевищити максимальну довжину команди. xargsподбає про величезний список аргументів. Дивіться: offbytwo.com/2011/06/26/things-you-didnt-know-about-xargs.html
shrewmouse

1

Ознайомтеся з утилітою «повторного управління» від RPM від yum-utils. Це робить саме те, що ви шукаєте.

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

0

Я хотів би використовувати систему версій або маркування, яку ви використовуєте для ідентифікації збірок. Ви також можете ідентифікувати пакети за датою за допомогою сценарію, запущеного на сервері, на якому розміщено сховище.


Ви маєте на увазі перевірку версії в іменах файлів? Це також моя думка, але було б непогано мати автоматизований сценарій для цього.
SyRenity

1
Також пам’ятайте, що назва файлу не обов'язково вказує на версію. Тобто я можу перейменувати RPM на все, що хочу; yum використовуватиме метадані RPM замість цього.
Андрій М.

0

Якщо завантаження відбувається щодня, чому б не розглянути можливість видалення старих файлів, які є старшими за певну кількість днів (з точки зору часу їх доступу / модифікації)? Знайдіть і просто видаліть їх. Якщо ви могли б, щоб ваші розробники завантажували збірки таким чином, що вони додавали ім'я поточного місяця до імені файлу під час завантаження, було б має сенс безпосередньо від імені файлу, щоб файл був завантажений у так званому місяці-році, і є сенс видалити просто за ознакою перегляду імені файлу. Для автоматизації сценарію було б просто розглянути можливість видалення цих файлів або просто зберегти ті файли, які відповідають попередньому та поточному місяцю. Просто думка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.