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_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 저장소의 새 파일 만 프로그래밍 방식으로 미러링하고 표준 저장소 디렉토리 구조를 따르는 방법이 있습니까?


2
나는 알지 못하지만 흥미로운 질문입니다. 개인적으로 나는 그것에 대해 걱정하지 않습니다. 8GB는 로컬 276GB의 로컬 미러 중 일부에 불과합니다.
Michael Hampton

물론 8GB에 대해 걱정할 필요가 있습니다. 나는 단지 효율적으로 노력하고 있습니다 :) 또한 때로는 EPEL 또는 CentOS 저장소의 다른 yum 미러를 신속하게 설정해야하며 상당히 큽니다. 패키지의 최신 N 버전 만 있으면됩니다.
Stefan Lasiewski

답변:


7

reposync는이를 수행 할 수있는 유일한 신뢰할 수있는 방법입니다. 작은 bash 스크립트를 작성하고 reposync 매개 변수 (-a)를 사용하여 각 아키텍처를 별도의 폴더에 다운로드 한 다음 createrepo 를 실행 하여 메타 데이터를 생성해야합니다.

여기에 내가 가지고있는 작은 스크립트가 있습니다 (우분투에서 실행되고 있지만 중요하지 않습니다).

고양이 동기화

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

그래, 나는 그것이 성가신 것을 발견하지만 어쩌면 당신이 그것을 symlink 또는 그와 비슷한 것으로 만들면 효과가있을 것이다. 반면에 투자 할 시간이 있으면 reposync 및 createrepo는 필요에 맞게 수정할 수있는 파이썬 스크립트입니다. :).
Florin Asăvoaie

4
포스트 시점에 사용 가능하지 않았지만 향후 독자를 위해 다음과 같은 이점이 있습니다. --norepopath 다운로드 경로에 리포 이름을 추가하지 마십시오. 단일 저장소를 동기화 할 때만 사용할 수 있습니다 (기본값은 reponame을 추가하는 것임).
mikejonesey

3

펄프 및 yum rpm 분배기 플러그인으로 이를 수행 할 수 있습니다 .

새 저장소를 구성 할 때 각 rpm의 버전을 하나만 얻으려면 retain_old_count retain_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

당신이하고 싶은 일에 사용하기 쉬운 또 다른 옵션은 우주 유영, 사용하기 쉽고, repo 관리자와 호스트간에 안전한 연결을 설정하고 동기화하려는 패키지를 관리하고 호스트에 제공하고 동기화를 예약 할 수 있습니다 업데이트 및 패치와 더 많은 다른 멋진 기능.


우주 유영은 멋져 보이지만 필요한 경우가 더 많습니다. 우리는 이미 Puppet, Foreman 및 기타 시스템을 사용하여 프로비저닝을 시도하고 있습니다.
Stefan Lasiewski

0

/ etc / sysconfig / uln-yum-mirror 편집 ALL_PKGS = 0 변경

0-> 최신 만 다운로드, 1-> 모든 버전 다운로드


5
당신의 대답은 실제로 더 많은 맥락이 필요합니다. 편집 할 수 있습니까? 예를 들어, 이것이 어떻게 저장소를 제공합니까? 이 답변은 다른 답변과 함께 있습니까?
Tim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.