web-dev-qa-db-ja.com

squidとdnf / yumダウンロードのキャッシュ

これが初心者の質問の場合は申し訳ありません。最初に状況を説明してから、イカのクエストが登場します。

現在のFedora/Centosインストールは、/ etc/yum.repos.confの通常の設定ファイルに次のようなメタリンクを持っています。

metalink=https://mirrors.fedoraproject.org/metalink?repo=Fedora-$releasever&Arch=$basearch

このメタリンクは、実際にyum/dnfに「ランダムな」サーバーサイトを選択させます(メタリンクのクライアントによる場所に応じて、世界の地域ごとに地理的にランダムにサーバーによって選択されます)。
これは、ダウンロードが遅い場合に次のより良いサイトに切り替えるためにも使用されます。

Dockerが大量のダウンロードをビルドするため、すべてのマシンで使用する必要があるSquidプロキシを検討しているのに気づきました。しかし、yum/dnfのこの「ランダムな」戦略は、私を心配しています。 Fedora/centosがこの無料リポジトリの負荷を分散する意図を理解しているので、実際にはこの戦略を弱体化したくありません

Squidは、クライアントが「別のFedora/centos repo url」を使用し、これをインテリジェントにキャッシュすることを、何らかの方法でインテリジェントに検出できますか?メタリンクリスト自体はかなり安定しているようです(要求されたときに順序が変わるだけですが、リスト自体は同じようです)。

意図:別のサーバーからのものであるという理由だけで、同じファイルの1000コピーを保存しないでください。

イカでどうすればいいですか?

編集:誰かがこれを使用した経験があります http://wiki.squid-cache.org/Features/StoreID dnf/yumのキャッシュに使用しますか?

6
Mandragor

私自身の質問に答えます。 squidがstoreid_file_rewriteスクリプトでこの種の問題を処理するためのサポートを持っていることがわかりました。トリッキーなのは、同じリポジトリを表すURLの有効なリストを取得することだけです。これまでのところ正常に動作しているようです。

以下をsquid.confに追加

store_id_program /usr/lib64/squid/storeid_file_rewrite /etc/squid/Fedora.db
store_id_access allow localnet
store_id_access deny all

Fedora.db(現時点でFedora 25をキャッシュする)のコンテンツを取得することは、ミラーリストからURLを取得するのに多少の手間です

basearch="x86_64"
releasever=25
mirrorlist="https://mirrors.fedoraproject.org/metalink?repo=Fedora-$releasever&Arch=$basearc
curl -s "$mirrorlist" >tmp.db

「tmp.db」結果の「url」を、ここで説明する形式 http://wiki.squid-cache.org/Features/StoreID/DB に変換する必要があります。これはおそらく自動化できます(任意のボランティア?)

次に、上記のsquid.confで使用される「Fedora.db」のようなものを取得します。

^http:\/\/ftp\.halifax\.rwth-aachen\.de\/Fedora\/linux\/releases\/25\/Everything\/(x86_64\/[a-zA-Z0-9\-\_\.\/]+rpm)$    http://repo.mirrors.squid.internal/Fedora/25/$1
^http:\/\/mirror2\.hs-esslingen\.de\/Fedora\/linux\/releases\/25\/Everything\/(x86_64\/[a-zA-Z0-9\-\_\.\/]+rpm)$        http://repo.mirrors.squid.internal/Fedora/25/$1
^http:\/\/Fedora\.tu-chemnitz\.de\/pub\/linux\/Fedora\/linux\/releases\/25\/Everything\/(x86_64\/[a-zA-Z0-9\-\_\.\/]+rpm)$      http://repo.mirrors.squid.internal/Fedora/25/$1

... much more

編集:代替、より危険なパスですが、おそらく十分であり、このようなよりグローバルなパターンマッチング:

\/Fedora\/linux\/releases\/([0-9]+)\/Everything/x86_64\/(.*)$   http://repo.mirrors.squid.internal/Fedora/releases/$1/$2
\/Fedora\/linux\/updates\/([0-9]+)\/x86_64\/(.*)$       http://repo.mirrors.squid.internal/Fedora/updates/$1/$2

ソース

5
Mandragor

ここで提案されているように、代わりにbaseurlの使用を検討できます: http://serverascode.com/2014/03/29/squid-cache-yum.html

だから使用:

baseurl=http://mirror.fedoraproject.org/Fedora/$releasever/os/$basearch/

の代わりに:

metalink=https://mirrors.fedoraproject.org/metalink?repo=Fedora-$releasever&Arch=$basearch

それは物事を少し動的に下げることでメタリンクの問題を回避します。

Baseurlを使用する場合、私がしようとしていることを達成する別の方法は、Apacheまたはnginx(nginxを選択します)をリポミラーのリバースプロキシとして使用することです。

Squidを他の目的で使用するのでない限り、インターネットミラーをバックエンド/アップストリームとして使用するよりも、nginxをローカルミラーとして設定するほうが実際に好ましいと思います。

0