我想要镜像以下 Yum/RPM 存储库http://yum.puppetlabs.com/:
- http://yum.puppetlabs.com/el/6/products/
- http://yum.puppetlabs.com/el/6/dependencies/
- http://yum.puppetlabs.com/el/5/products
- http://yum.puppetlabs.com/el/5/dependencies/
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_64
、、等) noarch
,SRPMS
也不会镜像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 存储库中的新文件并遵循标准存储库目录结构?
答案1
reposync 是唯一可靠的方法。您需要创建一个小型 bash 脚本并使用 reposync 参数 (-a) 将每个体系结构下载到单独的文件夹中,然后运行创建仓库生成元数据。
这是我的一个小脚本(它在 Ubuntu 上运行但没关系,你明白我的意思):
cat 同步仓库
#!/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
答案2
你可以这样做纸浆以及 yum rpm 分发器插件。
配置新 repo 时,若要获取每个 rpm 的一个版本,请设置 retain_old_countretain_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 \
应该可以实现你想要的。有一个快速入门指南如果你以前没有尝试过的话,这应该会让你了解这个东西是如何工作的。
答案3
另一个可用于执行您想要的操作的简单选项是 spacewalk,它易于使用,您可以在 repo 管理器和您的主机之间建立安全连接,管理您想要同步并提供给您的主机的软件包,安排同步更新和补丁以及许多其他很酷的功能。
答案4
编辑 /etc/sysconfig/uln-yum-mirror 更改 ALL_PKGS = 0
0 -> 仅下载最新版本,1 -> 下载所有版本