LANで適切なダウンロードをキャッシュする最良の方法は?


152

自宅に複数のUbuntuマシンがあり、インターネット接続が非常に遅いため、複数のマシンを一度に更新する必要がある場合があります(特にUbuntuの新しいリリース中)。

私のマシンの1つだけがパッケージをダウンロードする必要があり、他のマシンは最初のマシンを使用してdebsを取得できる方法はありますか?独自のローカルミラーを設定する必要がありますか?またはプロキシサーバーですか?それとももっと簡単にできますか?

回答:


129

私はいくつかのソリューションを調査し、一部のUbuntu開発者は10.04以降のプロキシ設定(Squidに基づく)を思いつきました。という名前squid-deb-proxyです。サーバーとして機能するマシンのみが必要です。大規模な組織では通常、独自のフルミラーを実行していますが、ほとんどの人にとっては、オンデマンドミラーリングで十分です。

squid-deb-proxyを使用する理由

  • クライアント側でのファイルの編集はありません。
  • クライアントが「ゼロ構成」になるようにzeroconfを使用します
  • 新しいツールを作成する代わりに、既存の堅牢なプロキシソリューションを使用します。
  • 典型的なLinux管理者向けに簡単にセットアップできます。

サーバー構成

サーバーとして機能させるマシンに、次のツールをインストールします。

sudo apt-get install squid-deb-proxy avahi-utils

次に、サービスビットを開始します。

 sudo start squid-deb-proxy

そしてavahiビット(12.04以降を使用している場合、これは必要ありません):

 sudo start squid-deb-proxy-avahi

これにより、プロキシサーバー(デフォルトでポート8000​​をリッスンします)と、サーバーがzeroconfを介してネットワーク上で自身をアドバタイズするために必要なavahiツールがインストールされます。

クライアント構成

の各コンピュータあなたは(それがあまりにもキャッシュを使用できるようにクライアント、サーバー自体)キャッシュを使用する場合、あなたは自動的にサーバー用のaptのを見てみましょうクライアント側のツールをインストールする必要があり、それらは、こちらをクリックしてください持っています:

ソフトウェアセンターからインストールする

またはコマンドライン経由:

sudo apt-get install squid-deb-proxy-client

オプション:効率を最大にするために、更新を自動的にダウンロードするように1台のマシンを設定する必要があります。これにより、他のマシンがそれを必要とするときに、すでにキャッシュ内にあります。これを行うには、[システム]-> [管理]-> [更新マネージャー]に移動し、[設定]ボタンをクリックします。[更新]タブで、すべての更新を自動的にダウンロードするように設定します。

代替テキスト

サードパーティのソースのキャッシュ

デフォルトでは、キャッシュは公式のUbuntuリポジトリのみをキャッシュするように設定されています。さらに追加するには、でソースのリストに追加する必要があります/etc/squid-deb-proxy/mirror-dstdomain.acl。ここで、ppa.launchpad.net、または使用する他のサービスを追加できます。このファイルを変更した後、変更をsudo restart squid-deb-proxy有効にするために実行する必要があります。

手動設定

何らかの理由で(ネットワークなどの理由で)zeroconfを使用したくない場合は/etc/apt/apt.conf、次のスタンザを編集および追加して、プロキシを使用するようにクライアントを手動で設定できます(0.0.0.0をサーバーのIPアドレスに置き換えます) ):

 Acquire { 
   Retries "0"; 
   HTTP { Proxy "http://0.0.0.0:8000"; };
 };

ファイアウォール

ファイアウォールを使用している場合、avahiはアドレス224.0.0.0/4で5353を使用し、次のようなルールが必要です。

# Specifically port 5353 which avahi uses
-A INPUT -i eth2 -d 224.0.0.0/4 --dport 5353 -j ACCEPT

# OR

# Wide open so all local broadcasting works
-A INPUT -i eth2 -d 224.0.0.0/4 -j ACCEPT

次に、プロキシを介した実際の通信のためにTCPポート8000​​を開く必要があります。多かれ少なかれこのようなもの:

-A INPUT -i eth2 -p tcp -m tcp --dport 8000 -d 192.168.0.1 -s 192.168.0.0/24 --syn -j ACCEPT

これらのルールはあなたを助けるためのものです。それらはおそらくあなたのセットアップと1対1では一致しません。(つまり、間違ったインターフェイス、間違ったプライベートネットワークIPアドレスなど)

動作確認

最初にサーバーのログを確認して確認できるようにします。tail -F /var/log/squid-deb-proxy/access.log次に、クライアントがインストールされているマシンで更新を実行します。ログは次のようなエントリでスクロールし始めます。

1307310795.647     32 192.168.1.106 TCP_MISS/302 768 GET http://us.archive.ubuntu.com/ubuntu/dists/natty-proposed/universe/i18n/Translation-en.xz - DIRECT/141.210.26.10 text/html
1307310795.683     34 192.168.1.106 TCP_MISS/302 752 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/main/i18n/Translation-en_US.lzma - DIRECT/141.210.26.10 text/html
1307310795.716     32 192.168.1.106 TCP_MISS/302 746 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/main/i18n/Translation-en.lzma - DIRECT/141.210.26.10 text/html
1307310795.750     32 192.168.1.106 TCP_MISS/302 764 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/multiverse/i18n/Translation-en_US.lzma - DIRECT/141.210.26.10 text/html
1307310795.784     32 192.168.1.106 TCP_MISS/302 758 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/multiverse/i18n/Translation-en.lzma - DIRECT/141.210.26.10 text/html
1307310795.817     32 192.168.1.106 TCP_MISS/404 657 GET http://us.archive.ubuntu.com/dists/natty-proposed/multiverse/i18n/Translation-en_US.xz - DIRECT/141.210.26.10 text/html

これは、クライアントはキャッシュを認識しているが、キャッシュが欠落していることを意味します。これは、まだ何もキャッシュしていないため予想されます。後続の各実行はTCP_HITとして表示されます。squidキャッシュファイル自体はで見つけることができます/var/cache/squid-deb-proxy

それを使用して

それ以降、ネットワーク上のすべてのマシンはキャッシュをチェックしてから、外部ネットワークにアクセスしてパッケージを取得します。新しいパッケージが利用できる場合、最初のマシンはそれをネットからダウンロードします。その後、そのパッケージに対する後続のリクエストはサーバーからクライアントに送られます。

TODO

ネットワーク上のアドバタイズされたキャッシュをそのまま使用するようにaptを有効にする必要があります。デフォルトでは、クライアントピースをインストールする必要はありません。また、403のdebがミラーリストにないバグを修正する必要があります。


2014/01/21 14:56:31 | エラー:/ var / cache / squid-deb-proxy / 03:(2)そのようなファイルまたはディレクトリはありません致命的:スワップディレクトリの1つを検証できませんでした。詳細についてはcache.logを確認してください。必要に応じて、またはSquidを初めて実行する場合は、「squid -z」を実行してスワップディレクトリを作成します。Squid Cache(バージョン3.3.8):異常終了しました。
サンパー14年

1
squidもインストールする必要があります。
サンパー14年

それはのように見えるコンフィグマニュアルもはや有効ではありません。のapt.conf下にファイルはありません/etc/apt。ただし、が設定されたファイルが大量にあります/etc/apt/apt.conf.d。代わりにファイルを作成する必要があると思いますか?
アレクシスウィルク

また、TODOが解決されたようです。つまり、何もする必要がなく、キャッシュが最初に使用されました。バグはまだ修正済みとマークされているようには見えませんが。
アレクシスウィルク

もちろん、apt.conf.dが今のようになっている場合は、この回答に編集を送信してください。
ホルヘカストロ

37

apt-cacher-ng私の答えです-小さな環境(約20クライアント)で問題は発生していないので、@ MagicFabが言及している問題は現在のバージョン(Ubuntu 10.04および10.10にインストール)で解決されたと思います。サーバーに必要な設定はありません。パッケージマネージャープロキシとしてサーバーを使用するようにクライアントに指示するだけです。

サーバーは、パッケージをインストールすることで完全にインストールおよび構成されapt-cacher-ngます。

クライアントは、APTプロキシを設定して/etc/apt/apt.conf.d/01proxy、これを含むファイルを追加することで構成する必要があります(「your-apt-server」はサーバーの名前またはIPアドレスです)。

Acquire::http { Proxy "http://your-apt-server:3142"; };

完了 -使用するソースやシステムのバージョンに関係なく、パッケージはサーバーにキャッシュされます(たとえば、10.04サーバーは9.10、10.04、11.04クライアントで問題や競合なしに使用できます)。


ネットワーク間をローミングするクライアントラップトップがある場合、少し複雑になります。ネットワークアドレスに応じて適切なプロキシを設定するスクリプトを作成しました。スクリプトは実行可能で、にあり/etc/network/if-up.d/apt-proxyます。DHCPサーバーからIPv4アドレスを受信すると、スクリプトはそれぞれのネットワークに適切なapt-cacherサーバーを設定します。

#!/bin/sh

set -e
# Don't bother when lo is configured.
if [ "$IFACE" = lo ]; then
    exit 0
fi
# Only run from ifup.
if [ "$MODE" != start ]; then
    exit 0
fi
# currently only cares about IPv4
if [ "$ADDRFAM" != inet ] && [ "$ADDRFAM" != NetworkManager ]; then
    exit 0
fi
# only run for DHCP-assigned addresses
if [ "$DHCP4_IP_ADDRESS" = "" ]; then
    exit 0
fi

# we're matching on network *broadcast* address,
#  not the specific IP address we were assigned
case "$DHCP4_BROADCAST_ADDRESS" in
    10.3.141.255)
        PROXY='Acquire::http::Proxy "http://my-home-server:3142";';
        ;;
    192.168.154.255)
        PROXY='Acquire::http::Proxy "http://work-server.foo.bar.example.com:3142";';
        ;;
    # add as needed
    *)
        # unknown, no proxying
        PROXY=""
        ;;
esac

# set the proxy
FNAME="/etc/apt/apt.conf.d/01proxy"
echo -n "$PROXY">$FNAME

exit 0

apt-cacher-ngはIPv6もサポートしています(他のソリューションではサポートしていなかったものもあります)。
アゼンデール

11
一年後、私はに行ってきたオーバーsquid-deb-proxysquid-deb-proxy-client:ゼロ設定は確かに遊牧民のユーザーのために非常に有用である、クライアント上のゼロコンフィギュレーションを意味-と場合にサーバが直接ダウンロードするには、クライアントのデフォルトは応答しません。
-Piskvor

apt-cacher-ngはひどいバグで、パッケージのダウンロードにハングアップします。たとえば、私はそれだけで30メガバイトパッケージの150メガバイトをダウンロードしました
pylover

apt-cacher-ngは完全に機能します。あなたのシステムに何か問題があります。正確に、squid-deb-proxyはSquidをインストールしようとしています。それを主張します。
ケンシャープ

これが、キャッシュを動作させるための最良のソリューションpbuilderです。これはそのままで機能しました。また、zeroconf(2016年には)サポートがあるように見えますが、私は(まだ)それを自分の目的で動作させることができませんでした。
アレクシスウィルク


6

debmirrorユーティリティを使用してローカルミラーを設定することを好みます。

これが呪文の例です。

debmirror --progress --verbose --nosource --method=ftp --passive \
 --host=ftp.osuosl.org --root=pub/ubuntu \
 --dist=lucid,lucid-updates,lucid-security,lucid-backports \
 --section=main,restricted,universe,multiverse --arch=amd64 \
 /d2/ftp/mirror/ubuntu-lucid

私はこれを週に1回実行し、1つ以上の「パッチレベル」を確立するための基礎として使用します。例えば...

 cd /d2/ftp/mirror/
 cp -al ubuntu-lucid ubuntu-lucid-20100908

これにより、ツリーのリンクされたコピーが作成され(ほぼゼロのディスク領域を使用)、apt sources.listで各ローカルサーバーをポイントできます。


5
ubumirrorをチェックアウトする必要があります。これは、アーカイブに含まれている便利なパッケージであり、すでにすべてがセットアップされています。公式のミラーが使用するものです。
ホルヘカストロ

2

小規模ネットワーク(自宅/小規模オフィスなど)では、apt-cacher-ngを使用して良好な結果が得られました。最新バージョンは確認していませんが、サーバーとクライアントの両方を慎重にセットアップする必要があり、ローカルネットワークからのみ更新プログラムを取得するクライアントに最適です。

上記のsquidベースのソリューションを試しましたが、いくつかの回避策と必要以上のクライアント構成を適用する必要があったため、小さなセットアップでapt-cacher-ngを置き換えることができるとはまだ感じていません


1

apt-cacher 設定するのが最も簡単ではなく、dist-upgradeに耐えられません。

squid-deb-proxyサーバーsquid-deb-proxy-client上、クライアント上にインストールします。zeroconf Avahiを使用するため、構成は不要です。

単なるデブ以上のキャッシュを探しているなら、私はイカを気にしません。Apache Traffic Serverは次の大きなものです。 http://trafficserver.readthedocs.org


squid-deb-proxyは、squidのインストールを要求します。そして、apt-cacherは長い間使われていません。apt-cacher-ngはまさにその場所です。
ケンシャープ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.