web-dev-qa-db-ja.com

snapcraft cleanbuildのパッケージをキャッシュするにはどうすればよいですか?

snapcraft cleanbuildは、クリーンルーム環境でスナップを作成できるようになっています。したがって、最小限のLXDイメージから開始し、必要なパッケージをインストールします。ただし、ベースarchive.ubuntu.comミラーを使用しているようです。これは非常に遅いです。ダウンロードしたパッケージをキャッシュするにはどうすればよいですか?

apt-cacher-ngまたは別のキャッシュプロキシを設定できましたが、それでもsnap/LXDの組み合わせを使用して取得するという問題があります。 pbuilderのような内部キャッシュがあれば最適ですが、そうでない場合、別のミラーまたはミラーのプロキシを使用するようにするにはどうすればよいでしょうか?

7
muru

popeyの提案 workに概説されている基本原則:

  1. ホスト(または、好みに応じて、ホストと想定します)でキャッシュプロキシを設定します:apt-cacher-ng、squid-deb-proxy、またはsquid自体。
  2. ホストのIPアドレスを取得します(コンテナから見えるように):

    export LXD_ADDRESS=$(ip -4 -o address show dev lxdbr0 | awk -F'[ /]*' '{print $4}')
    
  3. これを使用して、デフォルトのプロファイルプロキシ設定を設定します。

    printf '%s\n' '#cloud-config' 'apt:' " proxy: http://$LXD_ADDRESS:8000" |
      lxc profile set default user.user-data -
    
  4. 成功!

ただし、いくつかの注意事項があります。

snapcraft cleanbuildは、この構成の影響を受けない通常のapt-get以外の何らかのメカニズムにより、多くのパッケージをダウンロードします。この狂気は出力のこの部分で見られます:

Preparing to pull glue
Pulling glue
Preparing to pull cassandra
Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
Get:2 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]
...
Get:46 http://archive.ubuntu.com/ubuntu xenial-backports/universe Translation-en [3004 B]
Fetched 26.0 MB in 6s (4237 kB/s)
Get:1 ca-certificates-Java_20160321_all.deb [12.9 kB]
Fetched 12.9 kB in 0s (0 B/s)
Get:1 libxdmcp6_1.1.2-1.1_AMD64.deb [11.0 kB]
Fetched 11.0 kB in 0s (0 B/s)
Get:1 init-system-helpers_1.29ubuntu4_all.deb [32.3 kB]
Fetched 32.3 kB in 0s (0 B/s)
Get:1 default-jre-headless_1.8-56ubuntu2_AMD64.deb [4380 B]
Fetched 4380 B in 0s (0 B/s)
Get:1 default-jdk_1.8-56ubuntu2_AMD64.deb [968 B]
Fetched 968 B in 0s (0 B/s)
Get:1 libkrb5-3_1.13.2+dfsg-5ubuntu2_AMD64.deb [273 kB]

これらのかなりの数があり、個々のリクエストはとにかくそれらを地獄のように遅くします、そしてそれは以前に設定されたaptプロキシ設定がそれらに影響しないことを数えていません。

そこで、代わりにhttp_proxy環境変数を設定します。

lxc profile set default environment.http_proxy "http://$LXD_ADDRESS:3128"

HTTPSの場合も同様です。コンテナ内の他のダウンロードではHTTPSが使用されていたためです。私は通常apt-cacher-ngを好みますが、HTTPS CONNECTをサポートしていないため、squidに切り替えました。

0
muru