¿Cómo puedo reflejar un repositorio de yum pero descargar solo las versiones más recientes de cada paquete?

8

Me gustaría reflejar los siguientes repositorios Yum / RPM en http://yum.puppetlabs.com/ :

El repositorio de Puppet contiene todos los productos de Puppet que se han lanzado y es bastante grande con aproximadamente 8 GB. Solo necesito reflejar las versiones más recientes de los archivos.

He intentado duplicar el repositorio usando reposync --newest-only:

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

y esto descarga los paquetes más nuevos que necesito. Sin embargo, reposync no crea automáticamente la estructura de directorios normal ( x86_64, noarch, SRPMS, etc.) y no lo hace de espejo repodata.xml. Como resultado, mis clientes yum obtienen errores 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 ~]# 

¿Hay alguna manera de duplicar programáticamente solo los archivos nuevos de un repositorio de Yum y seguir la estructura de directorios del repositorio estándar?

Stefan Lasiewski
fuente
2
No lo sé de improviso, pero es una pregunta interesante. Personalmente no me preocupo por eso. 8GB es una pequeña fracción de mis 276GB de espejos locales ...
Michael Hampton
Claro que lo sé, ¿por qué preocuparse por unos 8 GB? Solo estoy tratando de ser eficiente :) Además, a veces necesito configurar rápidamente otro espejo yum de los repositorios EPEL o CentOS, y esos son bastante grandes. Realmente solo necesito las últimas versiones N de los paquetes.
Stefan Lasiewski

Respuestas:

7

reposync es la única forma confiable de hacer esto. Deberá crear un pequeño script bash y usar los parámetros de reposync (-a) para descargar cada arquitectura en una carpeta separada y luego ejecutar createrepo para generar los metadatos.

Aquí hay una pequeña secuencia de comandos que tengo (se está ejecutando en Ubuntu pero no importa, entiendes la idea):

cat sync-repos

#!/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
fuente
Gracias por los consejos. Este tipo de trabajo, como reposyncinsiste en agregar el repoida la estructura del directorio. Esto significa un comando como reposync --config=puppetlabs.repo.el6 --repoid=puppetlabs-products --newest-only --arch=x86_64' creates a bizarrely named directory like 'x86_64/puppetlabs-productscuando simplemente necesito 'x86_64 /'.
Stefan Lasiewski
Sí, también me parece molesto, pero tal vez si lo conviertes en un enlace simbólico o algo así, funcionará. Por otro lado, si tienes tiempo para invertir, reposync y createrepo son scripts de Python que puedes modificar para adaptarlos a tus necesidades :).
Florin Asăvoaie
44
probablemente no estaba disponible en el momento de la publicación, pero para el beneficio de futuros lectores: --norepopath No agregue el nombre a la ruta de descarga. Solo se puede usar al sincronizar un único repositorio (el valor predeterminado es agregar el nombre del mismo).
mikejonesey
3

Puede hacer esto con pulpa y el complemento distribuidor de yum rpm.

Al configurar un nuevo repositorio, para obtener solo una versión de cada rpm, establezca el parámetro reten_old_count allow_old_count

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

Entonces algo en la línea 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 \

Debes lograr lo que quieres. Hay una guía de inicio rápido que debería darle una idea de cómo funciona, en caso de que no lo haya probado antes.

Petter H
fuente
0

Otra opción fácil de usar para lo que desea hacer es la caminata espacial, es fácil de usar, puede establecer una conexión segura entre el administrador de repositorios y sus hosts, administrar qué paquetes desea sincronizar y proporcionar a sus hosts, programar las sincronizaciones actualizaciones y parches y muchas más funciones interesantes.

ravasquezgt
fuente
la caminata espacial se ve bien, pero hace mucho más de lo que necesito. Ya estamos intentando aprovisionar usando Puppet, Foreman y otros sistemas.
Stefan Lasiewski el
0

Editar / etc / sysconfig / uln-yum-mirror Cambiar ALL_PKGS = 0

0 -> descargar solo la última, 1 -> descargar todas las versiones

Mike Lee
fuente
55
Su respuesta realmente necesita más contexto para ser útil. ¿Eres capaz de editarlo? Por ejemplo, ¿cómo proporciona esto un repositorio? ¿Es esta respuesta además de otra respuesta?
Tim