如何镜像yum存储库,但仅下载每个软件包的最新版本?


8

我想在http://yum.puppetlabs.com/上镜像以下Yum / RPM存储库:

Puppet存储库包含有史以来发行的每个Puppet产品,并且很大,约为8GB。我只需要镜像文件的最新版本。

我尝试使用来镜像存储库reposync --newest-only

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

这会下载我需要的最新软件包。然而,reposync不会自动创建的常规目录结构(x86_64noarchSRPMS等),并且不反射镜repodata.xml。结果,我的yum客户会得到如下错误:

[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 ~]# 

有没有办法以编程方式仅镜像Yum存储库中的新文件并遵循标准存储库目录结构?


2
我暂时不会知道,但这是一个有趣的问题。我个人并不担心。8GB仅占我276GB本地镜像的一小部分...
Michael Hampton

我当然知道,为什么要担心大约8GB。我只是想提高效率:)另外,有时我需要快速设置EPEL或CentOS仓库的另一个yum镜像,它们非常大。我真的只需要软件包的最新N版本。
Stefan Lasiewski 2014年

Answers:


7

reposync是执行此操作的唯一可靠方法。您将需要创建一个小的bash脚本,并使用reposync参数(-a)将每个体系结构下载到单独的文件夹中,然后运行createrepo生成元数据。

这是我有的一个小脚本(它在Ubuntu上运行,但没关系,您明白了):

猫同步仓库

#!/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

感谢您的提示。正如reposync坚持将追加repoid到目录结构中一样,这种工作。这意味着像reposync --config=puppetlabs.repo.el6 --repoid=puppetlabs-products --newest-only --arch=x86_64' creates a bizarrely named directory like 'x86_64/puppetlabs-products我只需要“ x86_64 /” 这样的命令。
Stefan Lasiewski 2014年

是的,我也觉得很烦,但是如果您将其设置为符号链接或类似的链接,它可能会起作用。另一方面,如果您有时间进行投资,则reposync和createrepo是可以根据需要进行修改的python脚本:)。
FlorinAsăvoaie2014年

4
可能在发布时尚不可用,但为了将来的读者受益:--norepopath不要将重命名添加到下载路径中。仅在同步单个存储库时使用(默认为添加存储库名称)。
mikejonesey

3

您可以使用纸浆和yum rpm分配器插件来执行此操作。

配置新存储库时,要仅获得每个rpm的一个版本,请设置keep_old_count keep_old_count参数

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

因此,遵循以下原则:

$ 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 \

应该实现您想要的。有一个快速入门指南,如果您以前没有尝试过,应该可以让您了解它的工作原理。


0

另一个易于使用的选择是太空漫步,易于使用,您可以在回购管理器和主机之间建立安全连接,管理要同步并提供给主机的软件包,安排同步更新和补丁以及更多其他很棒的功能。


太空漫步看起来不错,但是它的功能远远超出了我的需求。我们已经在尝试使用Puppet,Foreman和其他系统进行配置。
Stefan Lasiewski 2014年

0

编辑/ etc / sysconfig / uln-yum-mirror更改ALL_PKGS = 0

0->仅下载最新版本,1->下载所有版本


5
您的答案确实需要更多上下文才能有用。可以编辑吗?例如,这如何提供存储库?除了其他答案外,这个答案吗?
蒂姆(Tim)
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.