Como faço para armazenar em cache os pacotes de um cleanbuild snapcraft?

7

snapcraft cleanbuild deve me deixar criar snaps em ambientes de sala limpa. Por conseguinte, começa a partir de uma imagem LXD mínima e instala os pacotes necessários. No entanto, parece usar a base archive.ubuntu.com mirror, que é dolorosamente lenta. Como faço cache dos pacotes baixados?

Eu poderia configurar apt-cacher-ng ou outro proxy de armazenamento em cache, mas ainda há o problema de obter a combinação snap / LXD para usá-lo. Seria melhor se tivesse um cache interno como o pbuilder faz, mas se não, então como convencê-lo a usar um espelho diferente ou um proxy para o espelho?

    
por muru 21.03.2017 / 09:34

1 resposta

0

Os princípios básicos descritos na sugestão do popey funcionam:

  1. Configure um proxy de armazenamento em cache no host (ou em outro lugar, dependendo de suas preferências, assumirei o host): apt-cacher-ng, squid-deb-proxy ou o próprio squid.
  2. Obtenha o endereço IP do host (conforme visto pelo contêiner):

    export LXD_ADDRESS=$(ip -4 -o address show dev lxdbr0 | awk -F'[ /]*' '{print }')
    
  3. Use-o para definir as configurações de proxy do perfil padrão:

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

No entanto, existem algumas ressalvas.

snapcraft cleanbuild baixa muitos pacotes por algum outro mecanismo que não o usual apt-get , que não é afetado por essa configuração. Esta insanidade é vista nesta parte da saída:

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]

Existem alguns deles, e os pedidos individuais os tornam lentos como o inferno de qualquer maneira, e isso sem contar que as configurações do proxy apt definidas anteriormente não os afetam.

Então, eu defino a variável de ambiente http_proxy :

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

E, da mesma forma, para HTTPS, já que alguns outros downloads no contêiner usavam HTTPS. Eu geralmente prefiro o apt-cacher-ng, mas ele não suporta HTTPS CONNECT, então eu mudei para o squid.

    
por muru 03.07.2017 / 09:00