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のごく一部です...
マイケルハンプトン

確かに、私が知っているのは、なぜ8GBほどフレットするのか。私は効率的にしようとしているだけです:)さらに、EPELまたはCentOSリポジトリの別のyumミラーをすばやくセットアップする必要がある場合があります。私は本当に最新のNバージョンのパッケージだけが必要です。
Stefan Lasiewski、2014

回答:


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ăvoaie14年

4
投稿時にはおそらく利用できませんでしたが、将来の読者のために:--norepopath reponameをダウンロードパスに追加しないでください。単一のリポジトリを同期する場合にのみ使用できます(デフォルトでは、reponameが追加されます)。
ミケジョニー

3

これは、pulpおよびyum rpmディストリビュータプラグインを使用して行うことができます。

新しいレポを構成するときに、各rpmのバージョンを1つだけ取得するには、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

あなたがやりたいこと、宇宙遊泳、使いやすい別の簡単なオプションは、リポジトリマネージャとホストの間に安全な接続を確立し、どのパッケージを同期してホストに提供するかを管理し、同期をスケジュールすることができますアップデートやパッチ、その他多くのクールな機能。


船外活動は見た目はいいですが、私が必要とする以上のことができます。Puppet、Foreman、その他のシステムを使用したプロビジョニングをすでに試みています。
Stefan Lasiewski、2014

0

/ etc / sysconfig / uln-yum-mirrorを編集しますALL_PKGS = 0を変更します

0->最新のみをダウンロード、1->すべてのバージョンをダウンロード


5
あなたの答えは、実際に役立つためにより多くのコンテキストを必要とします。編集できますか?たとえば、これはどのようにリポジトリを提供しますか?この回答は別の回答に追加されていますか?
ティム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.