Como posso espelhar um repositório yum, mas baixar apenas as versões mais recentes de cada pacote?

8

Gostaria de espelhar os seguintes repositórios Yum / RPM em http://yum.puppetlabs.com/ :

O repositório Puppet contém todos os produtos Puppet já lançados e é bastante grande, com cerca de 8 GB. Eu só preciso espelhar as versões mais recentes dos arquivos.

Eu tentei espelhar o repositório usando reposync --newest-only:

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

e isso baixa os pacotes mais novos que eu preciso. No entanto, reposync não cria automaticamente a estrutura de diretórios normal ( x86_64, noarch, SRPMS, etc.) e não faz espelho repodata.xml. Como resultado, meus clientes yum obtêm erros como este:

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

Existe uma maneira de espelhar programaticamente apenas os novos arquivos de um repositório Yum e seguir a estrutura de diretórios do repositório padrão?

Stefan Lasiewski
fonte
2
Não sei de antemão, mas é uma pergunta interessante. Pessoalmente, não me preocupo com isso. 8GB é uma pequena fração da minha 276GB de espelhos locais ...
Michael Hampton
Claro, eu sei, por que se preocupar com 8GB. Estou apenas tentando ser eficiente :) Além disso, às vezes preciso configurar rapidamente outro espelho yum dos repositórios EPEL ou CentOS, e esses são bastante grandes. Eu realmente só preciso das N versões mais recentes dos pacotes.
Stefan Lasiewski

Respostas:

7

reposync é a única maneira confiável de fazer isso. Você precisará criar um pequeno script bash e usar parâmetros de reposync (-a) para baixar cada arquitetura em uma pasta separada e, em seguida, executar createrepo para gerar os metadados.

Aqui está um pequeno script que eu tenho (ele está sendo executado no Ubuntu, mas não importa, você entendeu):

repositórios de sincronização de gato

#!/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
fonte
Obrigado pelas dicas. Isso funciona, pois reposyncinsiste em anexar repoidà estrutura de diretórios. Isso significa um comando como reposync --config=puppetlabs.repo.el6 --repoid=puppetlabs-products --newest-only --arch=x86_64' creates a bizarrely named directory like 'x86_64/puppetlabs-productsquando eu simplesmente preciso de 'x86_64 /'.
Stefan Lasiewski
Sim, acho isso chato também, mas talvez se você fizer um link simbólico ou algo assim, funcionará. Por outro lado, se você tiver tempo para investir, reposync e createrepo são scripts python que você pode modificar para atender às suas necessidades :).
Florin Asăvoaie
4
provavelmente não estava disponível no momento da publicação, mas para o benefício de futuros leitores: --norepopath Não adicione o nome ao caminho do download. Só pode ser usado ao sincronizar um único repositório (o padrão é adicionar o novo nome).
Mikejonesey
3

Você pode fazer isso com o pulp e o plug-in do distribuidor yum rpm.

Ao configurar um novo repositório, para obter apenas uma versão de cada rpm, configure o parâmetro ret_old_count ret_old_count

retain_old_count
Count indicating how many old rpm versions to retain; by default it will 
download all versions available.

Então, algo ao longo da linha de:

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

Deve conseguir o que deseja. Existe um guia de início rápido que deve lhe dar uma idéia de como a coisa funciona, caso você não tenha tentado antes.

Petter H
fonte
0

Outra opção fácil de usar para o que você quer fazer é o spacewalk, é fácil de usar, você pode estabelecer uma conexão segura entre o gerente de repo e seus hosts, gerenciar quais pacotes você deseja sincronizar e fornecer aos hosts, agendar as sincronizações atualizações e patches e muitos outros recursos interessantes.

ravasquezgt
fonte
caminhada espacial parece legal, mas faz muito mais do que eu preciso. Já estamos tentando aprovisionar usando Puppet, Foreman e outros sistemas.
Stefan Lasiewski
0

Edite / etc / sysconfig / uln-yum-mirror Altere ALL_PKGS = 0

0 -> baixar apenas o mais recente, 1 -> baixar todas as versões

Mike Lee
fonte
5
Sua resposta realmente precisa de mais contexto para ser útil. Você é capaz de editá-lo? Por exemplo, como isso fornece um repositório? Esta resposta é complementar a outra resposta?
Tim