Melhor maneira de limpar o repositório Yum?

10

Temos um repositório personalizado do Yum para o qual nossos desenvolvedores carregam cria.

O problema é que, após algum tempo, torna-se cheio de versões antigas.

Remover as versões antigas manualmente é bastante irritante, portanto, antes de tentarmos automatizá-las, eu me pergunto se existe algum script que limpe os RPMs antigos com base na versão (preferencial) ou na hora do upload.

O melhor seria se pudéssemos especificar para salvar simplesmente as últimas versões do X e apagar qualquer outra coisa. Então poderíamos cronometrá-lo e deixá-lo funcionar diariamente.

Obrigado por qualquer idéia.

SyRenity
fonte
Se não houver um script, deve haver. Nós escrevemos um para nosso próprio uso em nossa empresa, mas vou ver como liberá-lo na natureza, se possível.
Andrew M.
Ótimo - eu aprecio se puder ser de código aberto. Postar no github seria uma ótima odia.
SyRenity 6/11/11

Respostas:

13

A maneira "simples" é simplesmente despejar tudo em um diretório e executar:

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

... a maneira mais complicada é configurar o koji / etc. para fazer suas construções e criar os repositórios.

James Antill
fonte
Legal - era exatamente o que eu precisava.
SyRenity
coisas boas, não estava ciente deste
dyasny 27/10
Tecnicamente, você deve usá-lo em conjunto xargs, porque, caso contrário, poderá obter rm: missing operand(se não houver RPMs antigos para remover). Então:repomanage --keep=2 --old /path/to/repo | xargs rm -f
Danila Vershinin
O motivo para usar xargs é porque rm $(repomanage --keep=2 --old /path/to/repo)pode facilmente exceder o tamanho máximo do comando. xargsvai cuidar de uma enorme lista de argumentos. Veja: offbytwo.com/2011/06/26/things-you-didnt-know-about-xargs.html
shrewmouse
1

Confira o utilitário "repomanage" no RPM do yum-utils. Faz exatamente o que você está procurando.

[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
fonte
0

Eu aproveitaria o sistema de controle de versão ou rotulagem usado para identificar compilações. Você também pode identificar os pacotes por data com um script em execução no servidor que hospeda o repositório.

ewwhite
fonte
Você quer dizer verificando a versão nos nomes dos arquivos? Esta é minha linha de pensamento também, mas seria bom ter um script automatizado para isso.
SyRenity 6/11/11
1
Lembre-se também de que o nome do arquivo não é necessariamente indicativo da versão. Ou seja, eu posso renomear um RPM para o que eu quiser; O yum usará os metadados do RPM.
Andrew M.
0

Se os uploads acontecem todos os dias, por que não considerar a exclusão dos arquivos antigos mais antigos, digamos, um determinado número de dias (em termos de tempo de acesso / modificação)? Encontre e apague-os. Se você puder fazer com que seus desenvolvedores enviem compilações de forma que eles incluam o nome do mês atual no nome do arquivo durante o upload, faria sentido a partir do nome do arquivo diretamente que o arquivo foi carregado no chamado mês do ano e faz sentido excluir apenas pela base de olhar para o nome do arquivo. Seria fácil para a automação de scripts considerar a remoção desses arquivos ou apenas manter os arquivos correspondentes ao mês anterior e ao mês atual. Apenas um pensamento.

Nikhil Mulley
fonte