Vagrantを使用して、テスト用の仮想マシンをセットアップしています。仮想マシン内でaptを使用して、ホストマシンでプロキシを使用し、実行中の仮想マシンのインスタンス間ですべてのダウンロードのキャッシュを維持できるようにします。これにより、速度が向上するだけでなく、次の場合にvagrantインスタンスを開始できるようになります。インターネット接続がありません。
実行中のプロキシをセットアップしました。Vagrantスクリプトでこれを設定することで、プロキシを使用するように指示したと思います。
config.vm.provision :Shell, :inline => 'echo \'Acquire { Retries "0"; HTTP { Proxy "http://10.0.2.2:3128"; }; };\' >> /etc/apt/apt.conf'
config.vm.provision :Shell, :inline => 'echo \'Acquire { Retries "0"; FTP { Proxy "ftp://10.0.2.2:3128"; }; };\' >> /etc/apt/apt.conf'
config.vm.provision :Shell, :inline => 'echo \'Acquire { Retries "0"; HTTPS { Proxy "https://10.0.2.2:3128"; }; };\' >> /etc/apt/apt.conf'
そして、それは部分的に機能しています。つまり、ソースの最初のリクエストはキャッシュにヒットし、wifi接続が無効になっているが、Squidが実行されていて、キャッシュにいくつかのエントリがある場合に機能します。また、SquidsログファイルからSquidにヒットするいくつかのリクエストを確認できます。
1367492453.816 34 127.0.0.1 TCP_REFRESH_MODIFIED/200 592 GET http://security.ubuntu.com/ubuntu/dists/precise-security/Release.gpg - DIRECT/91.189.92.181 -
1367492453.987 168 127.0.0.1 TCP_REFRESH_MODIFIED/200 49973 GET http://security.ubuntu.com/ubuntu/dists/precise-security/Release - DIRECT/91.189.92.181 -
1367492453.999 325 127.0.0.1 TCP_MISS/404 588 GET http://us.archive.ubuntu.com/ubuntu/dists/precise/InRelease - DIRECT/91.189.91.13 text/html
1367492454.113 114 127.0.0.1 TCP_MISS/404 596 GET http://us.archive.ubuntu.com/ubuntu/dists/precise-updates/InRelease - DIRECT/91.189.91.13 text/html
ただし、パッケージのダウンロードの大部分はキャッシュされておらず、Squidを経由していないように見えます。つまり、ダウンロードしたときにネットワークの使用量が多く、Squidアクセスログに表示されないことがわかります。
それで、私の質問は、すべての要求にプロキシを使用するようにAptを構成するにはどうすればよいですか?
ところで、環境変数http_proxy
を設定して構成してみました。
config.vm.provision :Shell, :inline => "echo 'export http_proxy=http://10.0.2.2:3128' >> /etc/profile.d/proxy.sh"
これには同じ効果があります。一部のリクエストはSquidにヒットしているように見えますが、すべてではなく、特に実際のパッケージにはヒットしていません。
Aptがすべてのリクエストにsquidを使用している可能性がありますが、squidは結果をキャッシュしていません。これは、トラフィックをスニッフィングするか、aptがパッケージをダウンロードしている間にsquidをシャットダウンして、失敗するかどうかを確認することで確認できます。 squid構成のmaximum_object_sizeはいくつですか?
あなたの問題はsquid設定にあるかもしれませんが、トピックに答えるために、今 vagrant-proxyconf プラグインがあります。次の方法でインストールできます。
vagrant plugin install vagrant-proxyconf
これを使用すると、プロジェクト固有のすべてのVagrantfileでシェルプロビジョナーを使用しなくても、$HOME/.vagrant.d/Vagrantfile
でAptプロキシをグローバルに指定できます。
例:
Vagrant.configure("2") do |config|
config.apt_proxy.http = "http://10.0.2.2:3128"
config.apt_proxy.https = "http://10.0.2.2:3128"
end
またはデフォルトのプロキシ構成:
Vagrant.configure("2") do |config|
if Vagrant.has_plugin?("vagrant-proxyconf")
config.proxy.http = "http://192.168.0.2:3128"
config.proxy.https = "http://192.168.0.2:3128"
config.proxy.no_proxy = "localhost,127.0.0.1,.example.com"
end
# ... other stuff
end
タイトルの質問に続いて、プライベートネットワークを設定している場合は、次のようになります。
config.vm.network "private_network", ip: "192.168.22.22"
config.vm.provision "Shell", path: "scripts/provision.sh"
次のように、プロビジョニングスクリプトでhttp_proxy
をエクスポートするだけで、プロキシを簡単に設定できることがわかりました。
# Detect proxy.
GW=$(netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10)
curl -s localhost:3128 > /dev/null && export http_proxy="http://localhost:3128"
curl -s $GW:3128 > /dev/null && export http_proxy="http://$GW:3128"
次に、通常どおりapt-get
を実行します。
これにより、ローカルホスト上のsquidプロキシが検出されるか、ホスト自体が検出されます。
maximum_object_size
値を増やすための例は、次のとおりです。
maximum_object_size 64 MB
これはcache_dir
行の前に定義する必要があります。