Làm cách nào tôi có thể phản chiếu kho lưu trữ yum nhưng chỉ tải xuống các phiên bản mới nhất của mỗi gói?


8

Tôi muốn phản ánh các kho Yum / RPM sau tại http://yum.puppetlabs.com/ :

Kho lưu trữ Puppet chứa mọi sản phẩm Puppet từng được phát hành và khá lớn với dung lượng khoảng 8GB. Tôi chỉ cần phản chiếu các phiên bản mới nhất của các tập tin.

Tôi đã cố gắng phản chiếu kho lưu trữ bằng cách sử dụng reposync --newest-only:

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

và điều này tải về các gói mới nhất như tôi cần. Tuy nhiên, reposync không tự động tạo ra các cấu trúc thư mục thường xuyên ( x86_64, noarch, SRPMS, vv) và không làm gương repodata.xml. Kết quả là, các khách hàng yum của tôi gặp lỗi như thế này:

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

Có cách nào để chỉ lập trình phản chiếu các tệp mới từ repo Yum và tuân theo cấu trúc thư mục kho lưu trữ tiêu chuẩn không?


2
Tôi không biết rõ, nhưng đó là một câu hỏi thú vị. Cá nhân tôi không lo lắng về nó. 8GB là một phần rất nhỏ trong số 276GB gương địa phương của tôi ...
Michael Hampton

Chắc chắn tôi biết, tại sao băn khoăn về 8GB. Tôi chỉ đang cố gắng để có hiệu quả :) Ngoài ra, đôi khi tôi cần nhanh chóng thiết lập một máy nhân bản khác của repos EPEL hoặc CentOS, và những cái đó khá lớn. Tôi thực sự chỉ cần các phiên bản N mới nhất của các gói.
Stefan Lasiewski

Câu trả lời:


7

reposync là cách đáng tin cậy duy nhất để làm điều này. Bạn sẽ cần tạo một tập lệnh bash nhỏ và sử dụng các tham số reposync (-a) để tải xuống từng kiến ​​trúc trong một thư mục riêng biệt và sau đó chạy cTHERepo để tạo siêu dữ liệu.

Đây là một đoạn script nhỏ mà tôi có (nó đang chạy trên Ubuntu nhưng không thành vấn đề, bạn hiểu ý):

đồng bộ hóa mèo

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

Cảm ơn vì những lời khuyên. Đây là loại công việc, như reposyncnhấn mạnh vào việc gắn thêm repoidcấu trúc thư mục. Điều này có nghĩa là một lệnh như reposync --config=puppetlabs.repo.el6 --repoid=puppetlabs-products --newest-only --arch=x86_64' creates a bizarrely named directory like 'x86_64/puppetlabs-productskhi tôi chỉ cần 'x86_64 /'.
Stefan Lasiewski

Vâng, tôi cũng thấy phiền phức nhưng có lẽ nếu bạn biến nó thành một liên kết tượng trưng hoặc một cái gì đó tương tự thì nó sẽ hoạt động. Mặt khác, nếu bạn có thời gian để đầu tư, reposync và commeepo là các tập lệnh python mà bạn có thể sửa đổi để phù hợp với nhu cầu của mình :).
Florin Asăvoaie

4
có thể không có sẵn tại thời điểm đăng bài, nhưng vì lợi ích của độc giả trong tương lai: --norepopath Đừng thêm reponame vào đường dẫn tải xuống. Chỉ có thể được sử dụng khi đồng bộ hóa một kho lưu trữ duy nhất (mặc định là thêm reponame).
mikejonesey

3

Bạn có thể làm điều này với bột giấy và plugin phân phối vòng quay yum.

Khi kết hợp một repo mới, để chỉ nhận một verison của mỗi vòng / phút, hãy đặt tham số ret_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.

Vì vậy, một cái gì đó dọc theo dòng:

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

Nên đạt được những gì bạn muốn. Có một hướng dẫn bắt đầu nhanh sẽ cung cấp cho bạn ý tưởng về cách thức hoạt động của nó, trong trường hợp bạn chưa từng thử nó trước đây.


0

Một tùy chọn dễ sử dụng khác cho những gì bạn muốn làm là spacewalk, rất dễ sử dụng, bạn có thể thiết lập kết nối an toàn giữa trình quản lý repo và máy chủ của mình, quản lý các gói bạn muốn đồng bộ hóa và cung cấp cho máy chủ của mình, lên lịch đồng bộ hóa cập nhật và các bản vá và nhiều tính năng thú vị khác.


spacewalk trông đẹp, nhưng nó cần nhiều hơn tôi cần. Chúng tôi đã cố gắng cung cấp bằng cách sử dụng Puppet, Foreman và các hệ thống khác.
Stefan Lasiewski

0

Chỉnh sửa / etc / sysconfig / uln-yum-mirror Thay đổi ALL_PKGS = 0

0 -> chỉ tải xuống mới nhất, 1 -> tải xuống tất cả các phiên bản


5
Câu trả lời của bạn thực sự cần nhiều bối cảnh để có ích. Bạn có thể chỉnh sửa nó? Ví dụ, làm thế nào điều này cung cấp một kho lưu trữ? Là câu trả lời này ngoài câu trả lời khác?
Tim
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.