Лучший способ очистить хранилище Yum?


10

У нас есть пользовательское репозиторий Yum, в которое наши разработчики загружают сборки.

Проблема в том, что через некоторое время он становится загроможденным старыми версиями.

Удаление старых версий вручную довольно раздражает, поэтому, прежде чем мы попытаемся автоматизировать их самостоятельно, мне интересно, есть ли сценарий, который будет очищать старые 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
шевелюра

1

Проверьте утилиту «repomanage» из 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.