web-dev-qa-db-fra.com

Comment mettre en cache des paquets pour un Cleanbuild Snapcraft?

snapcraft cleanbuild est censé me permettre de créer des instantanés dans les environnements de salle blanche. En conséquence, il part d'une image LXD minimale et installe les packages nécessaires. Cependant, il semble utiliser le miroir de base archive.ubuntu.com, qui est extrêmement lent. Comment mettre en cache les packages qu'il télécharge?

Je pourrais configurer apt-cacher-ng ou un autre proxy de mise en cache, mais le problème est que la combinaison snap/LXD l'utilise toujours. Ce serait mieux s'il avait un cache interne comme pbuilder, mais sinon, comment puis-je le convaincre d'utiliser un miroir différent ou un proxy pour le miroir?

7
muru

Les principes de base décrits dans suggestion de Popey travail:

  1. Configurez un proxy de mise en cache sur l'hôte (ou ailleurs, en fonction de vos préférences, j'assumerai l'hôte): apt-cacher-ng, squid-deb-proxy ou squid lui-même.
  2. Obtenez l'adresse IP de l'hôte (vue par le conteneur):

    export LXD_ADDRESS=$(ip -4 -o address show dev lxdbr0 | awk -F'[ /]*' '{print $4}')
    
  3. Utilisez-le pour définir les paramètres de proxy de profil par défaut:

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

Cependant, il y a quelques mises en garde.

snapcraft cleanbuild télécharge un grand nombre de paquets par un autre mécanisme que l'habituel apt-get, qui n'est pas affecté par cette configuration. Cette folie est vu dans cette partie de la sortie:

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]

Il y en a plusieurs, et les requêtes individuelles les ralentissent quand même, et cela ne tient pas compte du fait que les paramètres de proxy apt définis précédemment ne les affectent pas.

Donc, j'ai défini la variable d'environnement http_proxy à la place:

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

Et de même pour HTTPS, puisque certains autres téléchargements dans le conteneur utilisaient HTTPS. Je préfère habituellement apt-cacher-ng, mais il ne supporte pas HTTPS CONNECT, je suis donc passé à squid.

0
muru