Bagaimana saya bisa mencerminkan repositori yum tetapi hanya mengunduh versi terbaru dari setiap paket?

8

Saya ingin mencerminkan repositori Yum / RPM berikut di http://yum.puppetlabs.com/ :

Repositori Puppet berisi setiap produk Puppet yang pernah dirilis dan cukup besar sekitar 8GB. Saya hanya perlu mirror versi terbaru dari file.

Saya telah mencoba untuk mencerminkan repositori menggunakan reposync --newest-only:

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

dan ini mengunduh paket-paket terbaru seperti yang saya butuhkan. Namun, reposync tidak secara otomatis membuat struktur direktori reguler ( x86_64, noarch, SRPMS, dll) dan tidak cermin repodata.xml. Akibatnya, klien yum saya mendapatkan kesalahan seperti ini:

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

Apakah ada cara untuk secara program hanya memantulkan file baru dari repo Yum dan mengikuti struktur direktori repositori standar?

Stefan Lasiewski
sumber
2
Saya tidak tahu begitu saja, tapi ini pertanyaan yang menarik. Secara pribadi saya tidak khawatir tentang itu. 8GB adalah sebagian kecil dari 276GB mirror lokal saya ...
Michael Hampton
Tentu saya tahu, mengapa harus khawatir tentang 8GB. Saya hanya mencoba untuk menjadi efisien :) Selain itu, kadang-kadang saya perlu dengan cepat mengatur mirror yum lain dari repo EPEL atau CentOS, dan itu cukup besar. Saya benar-benar hanya membutuhkan versi N paket terbaru.
Stefan Lasiewski

Jawaban:

7

reposync adalah satu-satunya cara yang dapat diandalkan untuk melakukan ini. Anda harus membuat skrip bash kecil dan menggunakan parameter reposync (-a) untuk mengunduh setiap arsitektur dalam folder terpisah dan kemudian menjalankan createrepo untuk menghasilkan metadata.

Berikut ini adalah skrip kecil yang saya miliki (skrip ini berjalan di Ubuntu tetapi tidak masalah, Anda dapat idenya):

sync-repos kucing

#!/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
Florin Asăvoaie
sumber
Terima kasih atas tipsnya. Jenis pekerjaan ini, karena reposyncbersikeras menambahkan repoidke struktur direktori. Ini berarti perintah seperti reposync --config=puppetlabs.repo.el6 --repoid=puppetlabs-products --newest-only --arch=x86_64' creates a bizarrely named directory like 'x86_64/puppetlabs-productsketika saya hanya perlu 'x86_64 /'.
Stefan Lasiewski
Ya, saya menemukan itu menjengkelkan juga, tetapi mungkin jika Anda membuatnya menjadi symlink atau sesuatu seperti itu akan berhasil. Di sisi lain, jika Anda punya waktu untuk berinvestasi, reposync dan createrepo adalah skrip python yang dapat Anda modifikasi agar sesuai dengan kebutuhan Anda :).
Florin Asăvoaie
4
mungkin tidak tersedia pada saat posting, tetapi untuk kepentingan pembaca di masa depan: --norepopath Jangan menambahkan nama ganti ke jalur unduhan. Hanya dapat digunakan saat menyinkronkan satu repositori (standarnya adalah menambahkan reponame).
mikejonesey
3

Anda dapat melakukan ini dengan pulp dan plugin distributor yum rpm.

Saat mengonfigurasi repo baru, untuk mendapatkan hanya satu verison dari setiap rpm, tetapkan parameter 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.

Jadi sesuatu di sepanjang garis:

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

Harus mencapai apa yang Anda inginkan. Ada panduan mulai cepat yang akan memberi Anda gambaran tentang bagaimana hal itu bekerja, jika Anda belum mencobanya.

Petter H
sumber
0

Pilihan lain yang mudah digunakan untuk apa yang ingin Anda lakukan, adalah spacewalk, mudah digunakan, Anda dapat membuat koneksi yang aman antara manajer repo dan host Anda, mengelola paket mana yang ingin Anda sinkronkan dan berikan kepada host Anda, jadwalkan sinkronisasi pembaruan dan tambalan dan banyak lagi fitur keren lainnya.

ravasquezgt
sumber
spacewalk terlihat bagus, tapi itu lebih dari yang saya butuhkan. Kami sudah mencoba penyediaan menggunakan Wayang, Mandor dan sistem lainnya.
Stefan Lasiewski
0

Edit / etc / sysconfig / uln-yum-mirror Ubah ALL_PKGS = 0

0 -> unduh terbaru saja, 1 -> unduh semua versi

Mike Lee
sumber
5
Jawaban Anda benar-benar membutuhkan lebih banyak konteks agar bermanfaat. Apakah Anda dapat mengeditnya? Sebagai contoh, bagaimana ini menyediakan repositori? Apakah jawaban ini sebagai tambahan dari jawaban lain?
Tim