it-swarm.com.de

Wie kann ich Pakete für ein Snapcraft-Cleanbuild zwischenspeichern?

snapcraft cleanbuild soll es mir ermöglichen, Schnappschüsse in Reinraumumgebungen zu erstellen. Dementsprechend geht es von einem minimalen LXD-Image aus und installiert die erforderlichen Pakete. Es scheint jedoch den Basis-Spiegel archive.ubuntu.com zu verwenden, der unerträglich langsam ist. Wie kann ich die heruntergeladenen Pakete zwischenspeichern?

Ich könnte apt-cacher-ng oder einen anderen Caching-Proxy einrichten, aber es besteht immer noch das Problem, dass die Snap/LXD-Kombination verwendet wird. Es wäre am besten, wenn es einen internen Cache hätte, wie es pbuilder tut, aber wenn nicht, wie kann ich es davon überzeugen, einen anderen Spiegel oder einen Proxy für den Spiegel zu verwenden?

7
muru

Die Grundprinzipien, wie sie in Vorschlag von Popey skizziert sind:

  1. Richten Sie einen Caching-Proxy auf dem Host ein (oder anderswo, je nach Ihren Vorlieben, werde ich Host annehmen): apt-cacher-ng, squid-deb-proxy oder squid selbst.
  2. Rufen Sie die Host-IP-Adresse ab (vom Container aus gesehen):

    export LXD_ADDRESS=$(ip -4 -o address show dev lxdbr0 | awk -F'[ /]*' '{print $4}')
    
  3. Verwenden Sie diese Option, um die Standardeinstellungen für den Profil-Proxy festzulegen:

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

Es gibt jedoch ein paar Einschränkungen.

snapcraft cleanbuild lädt eine Vielzahl von Paketen über einen anderen Mechanismus als den üblichen apt-get herunter, der von dieser Konfiguration nicht betroffen ist. Dieser Wahnsinn ist in diesem Teil der Ausgabe zu sehen:

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]

Es gibt eine ganze Reihe davon, und die einzelnen Anforderungen machen sie sowieso langsam, und das heißt nicht, dass die zuvor festgelegten apt-Proxy-Einstellungen sie nicht beeinflussen.

Also setze ich stattdessen die Umgebungsvariable http_proxy:

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

Ähnliches gilt für HTTPS, da bei einigen anderen Downloads im Container HTTPS verwendet wurde. Normalerweise bevorzuge ich apt-cacher-ng, aber es unterstützt kein HTTPS CONNECT, also habe ich zu squid gewechselt.

0
muru