rubylive-builderRubyLive という Debian wheezy ベースの Live イメージを作成するときに apt-get update などで何度も無駄にダウンロードしてしまうので、 apt-cacher-ng で Live イメージ作成を繰り返す時の無駄なダウンロードを減らすことにしました。

Vagrant の provision でインストール

Vagrantfile では

Vagrantfile:

  config.vm.provision :shell do |shell|
    shell.path = "provision.sh"
  end

のようにシェルスクリプトでプロビジョニングしているだけだったので、 その中で以下のようにインストールして設定するようにしました。

provision.sh:

apt-get install -y apt-cacher-ng
echo 'Acquire::http::Proxy "http://localhost:3142/";' >/etc/apt/apt.conf.d/02proxy

Vagrantfile で以下のようにポートフォワーディングを設定していれば 第315回 apt-cacher-ngを使ってAPT用キャッシュプロキシの構築:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社 の2ページ目に説明があるようにヒット率などを確認できます。

Vagrantfile:

  # apt-cacher-ng
  config.vm.network "forwarded_port", guest: 3142, host: 3142

rake コマンドで環境変数を渡す

APT_HTTP_PROXY=http://localhost:3142 rake でも良かったのですが、 rake コマンドは引数の FOO=barENV に設定してくれるので、 rake APT_HTTP_PROXY=http://localhost:3142 で渡して、 Rakefile の中では以下のように受け取って lb config に渡しました。

Rakefile:

desc "config RubyLive"
task :config => [:clean] do
  sh 'lb config'
  if ENV['APT_HTTP_PROXY']
    sh "lb config --apt-http-proxy #{ENV['APT_HTTP_PROXY']}"
  end
end

live-build で apt-cacher-ng を使う

既に出てきたように lb config--apt-http-proxy オプションや --apt-ftp-proxy オプションで指定すると Live イメージ作成の時に proxy を使ってくれるようになります。 今回は apt-line に http しか使っていないので --apt-http-proxy だけ指定しています。

もちろん、作成後の Live イメージには proxy 設定は残りません。

感想

live-build は cache ディレクトリにも、かなりキャッシュしてくれるのですが、 apt-get update などの proxy じゃないとキャッシュしにくいものもあるので、 どんな場合でもダウンロード量削減に役に立ちそうだと思いました。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published