Как я могу зеркалировать репозиторий yum, но загружать только самые новые версии каждого пакета?

8

Я хотел бы отразить следующие репозитории Yum / RPM на http://yum.puppetlabs.com/ :

Репозиторий Puppet содержит все когда-либо выпущенные продукты Puppet и имеет довольно большой размер - около 8 ГБ. Мне нужно только отразить самые новые версии файлов.

Я попытался отразить хранилище с помощью reposync --newest-only:

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

и это загружает новейшие пакеты, как мне нужно. Однако reposync автоматически не создает регулярную структуру каталогов ( x86_64, noarch, SRPMSи т.д.) и не зеркало repodata.xml. В результате мои клиенты получают такие ошибки:

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

Есть ли способ программно зеркалировать только новые файлы из репозитория Yum и следовать стандартной структуре каталогов репозитория?

Стефан Ласевский
источник
2
Я не знаю ничего, но это интересный вопрос. Лично я не беспокоюсь об этом. 8 ГБ - это небольшая часть моих 276 ГБ локальных зеркал ...
Майкл Хэмптон,
Конечно, я знаю, зачем беспокоиться о 8 ГБ. Я просто пытаюсь быть эффективным :) Кроме того, иногда мне нужно быстро настроить еще одно зеркало репозитория EPEL или CentOS, и они довольно большие. Мне действительно нужны только последние версии N пакетов.
Стефан Ласевский

Ответы:

7

reposync - единственный надежный способ сделать это. Вам нужно будет создать небольшой скрипт bash и использовать параметры reposync (-a) для загрузки каждой архитектуры в отдельную папку, а затем запустить createrepo для генерации метаданных.

Вот небольшой скрипт, который у меня есть (он работает на Ubuntu, но не имеет значения, вы поняли):

кошачьи репо

#!/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
источник
Спасибо за советы. Такого рода работает, так как reposyncнастаивает на добавлении repoidв структуру каталогов. Это означает команду, например, reposync --config=puppetlabs.repo.el6 --repoid=puppetlabs-products --newest-only --arch=x86_64' creates a bizarrely named directory like 'x86_64/puppetlabs-productsкогда мне просто нужен x86_64 /.
Стефан Ласевский
Да, я тоже нахожу это раздражающим, но, возможно, если вы сделаете это символической ссылкой или что-то в этом роде, это сработает. С другой стороны, если у вас есть время для инвестиций, reposync и createrepo - это скрипты на python, которые вы можете изменить в соответствии со своими потребностями :).
Florin Asăvoaie
4
вероятно, не было доступно на момент публикации, но для будущих читателей: --norepopath Не добавляйте переименование в путь загрузки. Может использоваться только при синхронизации одного репозитория (по умолчанию добавляется переименование).
mikejonesey
3

Вы можете сделать это с целлюлозой и плагином yum rpm.

При настройке нового репо, чтобы получить только одну версию каждого оборота в минуту, установите параметр 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.

Так что-то по линии:

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

Должен достичь того, что вы хотите. Существует краткое руководство по началу работы, которое должно дать вам представление о том, как это работает, если вы еще не пробовали его раньше.

Петтер Н
источник
0

Еще одним простым вариантом использования того, что вы хотите сделать, является spacewalk, он прост в использовании, вы можете установить безопасное соединение между менеджером репо и вашими хостами, управлять тем, какие пакеты вы хотите синхронизировать и предоставлять вашим хостам, планировать синхронизацию обновления и патчи и многие другие интересные функции.

ravasquezgt
источник
Spacewalk выглядит красиво, но это намного больше, чем мне нужно. Мы уже пытаемся подготовиться с помощью Puppet, Foreman и других систем.
Стефан Ласевский
0

Изменить / etc / sysconfig / uln-yum-mirror Изменить ALL_PKGS = 0

0 -> скачать только последние версии, 1 -> скачать все версии

Майк Ли
источник
5
Ваш ответ действительно нуждается в большем количестве контекста, чтобы быть полезным. Вы можете редактировать это? Например, как это обеспечивает хранилище? Является ли этот ответ в дополнение к другому ответу?
Тим