Apt-cacher で apt のキャッシュプロキシを作る

Vagrant 等を使うことでローカルに仮想マシンをポンポン作れるが、回線に WiMAX を使っていることもあり、何かパッケージをインストールしようにも毎回ダウンロードに時間がかかる。同じ構成のマシンを複数作るときは、ローカルにパッケージをキャッシュしたい。そこで Apt-cacher というのを使って、apt のキャッシュプロキシを建ててみる。

前提

プロキシサーバの OS には Ubuntu Server 12.04.3 を用いる。クライアント (プロキシを利用する側のサーバ) は apt を使う OS (UbuntuDebian) が対象となる。

インストール

プロキシサーバとなるマシンに、apt で必要なパッケージを入れる。

$ sudo apt-get -y install apt-cacher apache2

途中で Please select the method... と聞かれるので "daemon" を選択する。

設定ファイルの接続許可リストを修正して、リロードする。

$ sudo sed -i \
    's/^#\(allowed_hosts = \*\)/\1/' \
    /etc/apt-cacher/apt-cacher.conf
$ sudo service apt-cacher restart

ブラウザで以下の URL にアクセスして、入ったかどうか確認する。

  • http://(サーバの IP アドレス):3142/

f:id:akagisho:20131109232902p:plain

ちゃんと入ってるっぽい。これだけで OK。

クライアントの設定

クライアント側で、apt-get するときにプロキシを経由するように設定する。

$ sudo sh -c "echo 'Acquire::http::Proxy \"http://(サーバの IP アドレス):3142/\";' >> /etc/apt/apt.conf"

プロキシを経由するようになったかどうか確認するには、サーバ側で

$ tail -n 0 -f /var/log/apt-cacher/access.log

としてログを見ながら、クライアント側で apt-get update でもしてみると良い。

検証

キャッシュプロキシを経由するようになったので、どの程度効果が出るのか検証してみる。

まずクライアントの仮想マシンでスナップショットを撮っておく。そして、1回も入れたことのない (キャッシュにない) 状態で gnome をインストールする。

$ time sudo apt-get -y install gnome
(中略)
real    16m25.289s
user    1m8.192s
sys     0m38.944s

16分半かかった。

gnome をインストールする前の状態にスナップショットで戻し、再度インストールする。今度は Apt-cacher にキャッシュが残っているので速いはずだ。

real    7m47.131s
user    1m9.004s
sys     0m43.324s

8分弱でできた。2倍以上速くなった!ということで大成功だ。

まとめ

Apt-cacher でローカルに apt のキャッシュプロキシを作ることで、パッケージのインストールを高速化することができた。squid などで建てる普通の http プロキシとの違いを今のところ見いだせていないが、気軽に構築できるし今後も活用していきたい。

ちなみに apt-mirror というレポジトリを丸ごとミラーリングしてしまう仕組みもあるが、某 DC で試したところ容量と所用時間が半端じゃなかった (100GB 超) ので、自宅では断念した。