¿La mejor manera de limpiar el repositorio de Yum?

10

Tenemos un repositorio personalizado de Yum en el que nuestros desarrolladores cargan compilaciones.

El problema es que después de un tiempo se vuelve abarrotado de versiones antiguas.

Eliminar las versiones antiguas manualmente es bastante molesto, por lo que antes de intentar automatizarlo nosotros mismos, me pregunto si hay algún script que pueda limpiar los RPM antiguos según la versión (preferida) o el momento de la carga.

Lo mejor sería si pudiéramos especificar simplemente guardar X últimas versiones y borrar cualquier otra cosa. Entonces podríamos cron y dejarlo correr a diario.

Gracias por cualquier idea

SyRenity
fuente
Si no hay un script, debería haberlo. Escribimos uno para nuestro propio uso en nuestra empresa, pero veré si es posible liberarlo en la naturaleza si es posible.
Andrew M.
Genial: agradeceré si puede ser de código abierto. Publicar en github sería una gran odea.
SyRenity el

Respuestas:

13

La forma "simple" es simplemente volcar todo en un directorio y ejecutar:

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

... la forma más complicada es configurar koji / etc. para hacer tus compilaciones y crear los repositorios.

James Antill
fuente
Genial, eso es exactamente lo que necesitaba.
SyRenity
cosas geniales, no estaba al tanto de esto
dyasny
Técnicamente, debe usarlo junto con él xargs, porque de lo contrario podría obtenerlo rm: missing operand(si no hay RPM antiguos para eliminar). Entonces:repomanage --keep=2 --old /path/to/repo | xargs rm -f
Danila Vershinin
La razón para usar xargs es porque rm $(repomanage --keep=2 --old /path/to/repo)podría exceder fácilmente la longitud máxima del comando. xargsse encargará de una gran lista de argumentos. Ver: offbytwo.com/2011/06/26/things-you-didnt-know-about-xargs.html
shrewmouse
1

Echa un vistazo a la utilidad "repomanage" del RPM yum-utils. Hace exactamente lo que estás buscando.

[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 ~]#
Michael V. Pelletier
fuente
0

Aprovecharía el sistema de etiquetado o control de versiones que utiliza para identificar las compilaciones. También puede identificar paquetes por fecha con un script que se ejecuta en el servidor que aloja el repositorio.

ewwhite
fuente
¿Quiere decir al verificar la versión en los nombres de archivo? Esta es mi línea de pensamiento también, pero sería bueno tener un script automatizado para esto.
SyRenity
1
Recuerde también que el nombre del archivo no es necesariamente indicativo de la versión. Es decir, puedo cambiar el nombre de un RPM a lo que quiera; yum usará los metadatos del RPM en su lugar.
Andrew M.
0

Si las cargas se realizan todos los días, ¿por qué no considerar eliminar los archivos antiguos que son más antiguos que algunos días (en términos de sus tiempos de acceso / modificación)? Encuéntralos y simplemente bórralos. Si pudiera hacer que sus desarrolladores carguen compilaciones de modo que pongan el nombre del mes actual en el nombre del archivo al cargar, tendría sentido, directamente desde el nombre del archivo, que el archivo se cargó en el llamado mes y año y tiene sentido eliminarlo solo por la base de mirar el nombre del archivo. Sería fácil para la automatización de su script considerar eliminar esos archivos o simplemente mantener aquellos archivos que coinciden con el mes anterior y el mes actual. Solo un pensamiento.

Nikhil Mulley
fuente