清理Yum存储库的最佳方法?


10

我们有一个自定义的Yum存储库,我们的开发人员将构建版本上传到该库。

问题是一段时间后,它变得与旧版本杂乱无章。

手动删除旧版本是很烦人的事情,因此在我们尝试自动进行自动化之前,我想知道是否有任何脚本可以根据版本(首选)或上载时间清除旧RPM。

最好的情况是,如果我们可以指定简单地保存X个最新版本,然后删除其他任何内容。然后,我们可以将其设置为cron,然后每天运行一次。

感谢您的任何想法。


如果没有脚本,应该有。我们在公司自己编写了一个供自己使用的文件,但如果可能的话,我将发布。
Andrew M.

很好-如果可以开源,我将不胜感激。在github上发布将是一个很棒的想法。
SyRenity

Answers:


13

“简单”的方法是将所有内容转储到目录中并运行:

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

...更复杂的方法是设置koji / etc 进行构建并创建存储库。


太酷了-正是我所需要的。
SyRenity 2012年

好东西,没意识到这一点
dyasny 2014年

从技术上讲,您应该将它与它一起使用xargs,因为否则您可能会得到它rm: missing operand(如果没有要删除的旧RPM)。因此:repomanage --keep=2 --old /path/to/repo | xargs rm -f
Danila Vershinin

使用xargs的原因是因为rm $(repomanage --keep=2 --old /path/to/repo)它很容易超过最大命令长度。 xargs将处理大量参数。请参阅:offbytwo.com/2011/06/26/things-you-didnt-know-about-xargs.html
shrewmouse19年

1

从yum-utils RPM中检出“ repomanage”实用程序。它确实满足您的需求。

[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

我会利用您用来识别内部版本的版本控制或标签系统。您还可以使用托管存储库的服务器上运行的脚本按日期标识软件包。


您的意思是通过检查文件名中的版本?这也是我的思路,但是为此提供一个自动化脚本会很好。
SyRenity 2011年

1
还请记住,文件名不一定表示版本。即,我可以将RPM重命名为我想要的任何名称。yum将改为使用RPM的元数据。
Andrew M.

0

如果每天上传一次,为什么不考虑删除已超过一定天数(就其访问/修改时间而言)的旧文件呢?查找并删除它们。如果您可以让开发人员上传构建文件,以便他们在上传时将当前月份的名称放入文件名中,那么直接从文件名中就可以知道该文件是在“ month'year”中上传的,因此删除仅通过查看文件名的基础。您的脚本自动化只需考虑删除那些文件或仅保留与上个月和当月匹配的文件,将变得很容易。只是一个想法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.