Il modo migliore per ripulire il repository Yum?


10

Abbiamo un repository Yum personalizzato su cui i nostri sviluppatori caricano compilano.

Il problema è che dopo qualche tempo diventa ingombra di vecchie versioni.

La rimozione manuale delle vecchie versioni è piuttosto fastidiosa, quindi prima di provare ad automatizzarci da soli, mi chiedo se ci siano script in grado di pulire i vecchi RPM in base alla versione (preferita) o al momento del caricamento.

La cosa migliore sarebbe se potessimo specificare di salvare X ultime versioni e cancellare qualcos'altro. Quindi potremmo cron e lasciarlo funzionare ogni giorno.

Grazie per qualsiasi idea


Se non c'è una sceneggiatura, ci dovrebbe essere. Ne abbiamo scritto uno per nostro uso presso la nostra azienda, ma vedrò di rilasciarlo in libertà, se possibile.
Andrew M.

Fantastico - apprezzerò se può essere di provenienza aperta. Pubblicare su github sarebbe una grande odea.
SyRenity,

Risposte:


13

Il modo "semplice" è semplicemente scaricare tutto in una directory ed eseguire:

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

... il modo più complicato è configurare koji / etc. per fare le tue build e creare i repository.


Fantastico, esattamente quello di cui avevo bisogno.
SyRenity,

grandi cose, non ne ero a conoscenza
dyasny il

Tecnicamente, dovresti usarlo insieme xargs, invece, perché altrimenti potresti ottenere rm: missing operand(se non ci sono RPM vecchi da rimuovere). Quindi:repomanage --keep=2 --old /path/to/repo | xargs rm -f
Danila Vershinin,

Il motivo per usare xargs è perché rm $(repomanage --keep=2 --old /path/to/repo)potrebbe facilmente superare la lunghezza massima del comando. xargssi occuperà di un vasto elenco di argomenti. Vedi: offbytwo.com/2011/06/26/things-you-didnt-know-about-xargs.html
shrewmouse

1

Dai un'occhiata all'utilità "ripomanage" dall'RPM yum-utils. Fa esattamente quello che stai cercando.

[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

Vorrei sfruttare il sistema di controllo delle versioni o di etichettatura utilizzato per identificare le build. È inoltre possibile identificare i pacchetti per data con uno script in esecuzione sul server che ospita il repository.


Vuoi dire controllando la versione nei nomi dei file? Anche questa è la mia linea di pensiero, ma sarebbe bello avere uno script automatizzato per questo.
SyRenity,

1
Ricorda inoltre che il nome file non è necessariamente indicativo della versione. Cioè, posso rinominare un RPM in qualsiasi cosa io voglia; yum utilizzerà invece i metadati di RPM.
Andrew M.

0

Se i caricamenti avvengono ogni giorno, perché non considerare la possibilità di eliminare i vecchi file che sono più vecchi oltre un certo numero di giorni (in termini di tempi di accesso / modifica)? Trova e cancellali. Se i tuoi sviluppatori potessero caricare build in modo tale da inserire il nome del mese corrente nel nome del file durante il caricamento, sarebbe logico dal nome del file direttamente che il file è stato caricato nel cosiddetto mese e ha senso eliminare solo dalla base di guardare il nome del file. Sarebbe facile per l'automazione degli script prendere in considerazione solo la rimozione di quei file o semplicemente mantenere quei file che corrispondono al mese precedente e al mese corrente. Solo un pensiero.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.