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

7

snapcraft cleanbuildsoll mich Schnappschüsse in Reinraumumgebungen bauen lassen. Dementsprechend geht es von einem minimalen LXD-Image aus und installiert die erforderlichen Pakete. Es scheint jedoch den Basisspiegel zu verwenden archive.ubuntu.com, der unglaublich langsam ist. Wie kann ich die heruntergeladenen Pakete zwischenspeichern?

Ich könnte einen apt-cacher-nganderen 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 dann davon überzeugen, dass es einen anderen Spiegel oder einen Proxy für den Spiegel verwendet?

muru
quelle
Könnten Sie versuchen, Proxy-Konfiguration von diesem Ref Insights.ubuntu.com/2016/03/16/…
user.dz
1
@ user.dz Sofern ich mich nicht irre, ist dies die Konfiguration für den LXD-Daemon, nicht für die LXD-Container. Auf jeden Fall habe ich apt-cacher-ng installiert und es entsprechend diesen Instanzen als Proxy festgelegt, aber ein neuer Durchlauf verwendet snapcraft cleanbuildes nicht (apt-cacher-ng hat keine Änderungen in den Protokollen oder im Cache-Verzeichnis)
Muru
1
(Die Konfiguration wurde wirksam: ac-ng mag keine HTTPS CONNECT-Anforderungen und ich musste die HTTPS-Proxy-Einstellung
deaktivieren
1
Hier ist ein schöner Artikel, in dem beschrieben wird, wie Sie einen Paket-Proxy auf dem Host-Computer verwenden und lxd dafür konfigurieren können.
Papst
1
@ Popey danke! Würden Sie eine Antwort schreiben, die das zusammenfasst? Ich habe environment.http_proxyanstelle von user.user-data/aptund einen allgemeineren Squid / Apt-Cacher-ng-Proxy anstelle von Squid-Deb-Proxy verwendet, aber die Kernidee ist da
Muru

Antworten:

0

Die Grundprinzipien, wie sie in Papsts Vorschlagsarbeit dargelegt sind :

  1. Richten Sie einen Caching-Proxy auf dem Host ein (oder anderswo, je nach Ihren Vorlieben, nehme ich den Host an): apt-cacher-ng, squid-deb-proxy oder squid selbst.
  2. Holen Sie sich die Host-IP-Adresse (wie vom Container 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 Profilproxy festzulegen:

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

Es gibt jedoch einige Einschränkungen.

snapcraft cleanbuildlädt viele Pakete über einen anderen als den üblichen Mechanismus herunter apt-get, 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 einige davon, und die einzelnen Anforderungen machen sie sowieso höllisch langsam, und das zählt nicht, dass die zuvor festgelegten Einstellungen für den passenden Proxy sie nicht beeinflussen.

Also setze ich http_proxystattdessen die Umgebungsvariable:

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

Ähnliches gilt für HTTPS, da einige andere Downloads im Container HTTPS verwendeten. Normalerweise bevorzuge ich apt-cacher-ng, aber es unterstützt HTTPS CONNECT nicht, also bin ich zu Squid gewechselt.

muru
quelle