回答:
私はいくつかのソリューションを調査し、一部のUbuntu開発者は10.04以降のプロキシ設定(Squidに基づく)を思いつきました。という名前squid-deb-proxy
です。サーバーとして機能するマシンのみが必要です。大規模な組織では通常、独自のフルミラーを実行していますが、ほとんどの人にとっては、オンデマンドミラーリングで十分です。
サーバーとして機能させるマシンに、次のツールをインストールします。
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
。
それ以降、ネットワーク上のすべてのマシンはキャッシュをチェックしてから、外部ネットワークにアクセスしてパッケージを取得します。新しいパッケージが利用できる場合、最初のマシンはそれをネットからダウンロードします。その後、そのパッケージに対する後続のリクエストはサーバーからクライアントに送られます。
ネットワーク上のアドバタイズされたキャッシュをそのまま使用するようにaptを有効にする必要があります。デフォルトでは、クライアントピースをインストールする必要はありません。また、403のdebがミラーリストにないバグを修正する必要があります。
apt.conf
下にファイルはありません/etc/apt
。ただし、が設定されたファイルが大量にあります/etc/apt/apt.conf.d
。代わりにファイルを作成する必要があると思いますか?
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
squid-deb-proxy
とsquid-deb-proxy-client
:ゼロ設定は確かに遊牧民のユーザーのために非常に有用である、クライアント上のゼロコンフィギュレーションを意味-と場合にサーバが直接ダウンロードするには、クライアントのデフォルトは応答しません。
pbuilder
です。これはそのままで機能しました。また、zeroconf
(2016年には)サポートがあるように見えますが、私は(まだ)それを自分の目的で動作させることができませんでした。
最も簡単な解決策の1つは、apt-proxyをセットアップすることです。
ここでubuntuのドキュメントを読んでください:https://help.ubuntu.com/community/AptProxy
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で各ローカルサーバーをポイントできます。
apt-cacher
設定するのが最も簡単ではなく、dist-upgradeに耐えられません。
squid-deb-proxy
サーバーsquid-deb-proxy-client
上、クライアント上にインストールします。zeroconf Avahiを使用するため、構成は不要です。
単なるデブ以上のキャッシュを探しているなら、私はイカを気にしません。Apache Traffic Serverは次の大きなものです。 http://trafficserver.readthedocs.org