Frage Die beste Möglichkeit, um apt-Downloads in einem LAN zu cachen


Ich habe mehrere Ubuntu-Computer zu Hause und eine ziemlich langsame Internetverbindung, und manchmal müssen mehrere Computer gleichzeitig aktualisiert werden (besonders während neuer Ubuntu-Versionen).

Gibt es eine Möglichkeit, dass nur eine meiner Maschinen die Pakete herunterladen muss und die anderen Maschinen die erste Maschine verwenden können, um die Debs zu bekommen? Muss ich meinen eigenen lokalen Spiegel einrichten? Oder ein Proxy-Server? Oder kann es einfacher gemacht werden?


147
2017-09-02 23:34


Ursprung




Antworten:


Ich habe einige Lösungen untersucht und einige Ubuntu-Entwickler haben für 10.04 und später eine Proxy-Konfiguration (basierend auf Squid) entwickelt. Es heißt squid-deb-proxy. Es benötigt nur eine Maschine, die als Server fungiert. Große Organisationen führen normalerweise ihre eigenen vollständigen Spiegel aus, aber für die meisten Leute reicht die On-Demand-Spiegelung aus.

Warum squid-deb-proxy?

  • Keine Bearbeitung von Dateien auf der Client-Seite.
  • Verwenden Sie zeroconf, so dass Clients "keine Konfiguration" waren
  • Verwenden Sie eine vorhandene solide Proxy-Lösung, anstatt ein neues Tool zu schreiben.
  • Einfach einzurichten für einen typischen Linux-Administrator.

Serverkonfiguration

Auf der Maschine, die Sie als Server verwenden möchten, installieren Sie das Tool mit:

sudo apt-get install squid-deb-proxy avahi-utils

Starten Sie nun die Service-Bits:

 sudo start squid-deb-proxy

Und die Avahi-Bits (das brauchst du nicht, wenn du am 12.04+ bist):

 sudo start squid-deb-proxy-avahi

Dies installiert den Proxy-Server (der standardmäßig Port 8000 überwacht) und die Avahi-Tools, die der Server benötigt, um sich in Ihrem Netzwerk über zeroconf zu bewerben.

Clientkonfiguration

Auf jeder der Computer Damit Sie den Cache verwenden können (die Clients und der Server selbst, damit auch der Cache verwendet werden kann), müssen Sie das clientseitige Tool installieren, mit dem Sie automatisch nach dem Server suchen können. Klicken Sie hier:

Install via the software center

oder über die Befehlszeile:

sudo apt-get install squid-deb-proxy-client

Wahlweise: Um maximale Effizienz zu erreichen, sollten Sie einen Computer so einstellen, dass Updates automatisch heruntergeladen werden. Wenn Ihre anderen Computer es benötigen, ist es bereits im Cache. Dazu gehen Sie zu System-> Administration-> Update Manager und klicken dann auf die Schaltfläche "Einstellungen ...". In der Registerkarte Update legen Sie fest, dass alle Updates automatisch heruntergeladen werden.

alt text

Caching von Drittanbieterquellen

Standardmäßig ist der Cache so eingerichtet, dass nur offizielle Ubuntu-Repositories zwischengespeichert werden. Um mehr hinzuzufügen, müssen Sie sie zur Liste der Quellen hinzufügen /etc/squid-deb-proxy/mirror-dstdomain.acl. Hier können Sie ppa.launchpad.net oder andere Dienste, die Sie verwenden, hinzufügen. Nachdem Sie Änderungen an dieser Datei vorgenommen haben, müssen Sie sie ausführen sudo restart squid-deb-proxy damit die Änderungen wirksam werden.

Manuelle Konfiguration

Wenn Sie aus irgendwelchen Gründen zeroconf (aus Netzwerkgründen oder was auch immer) nicht verwenden möchten, können Sie einen Client manuell festlegen, um den Proxy durch Bearbeiten zu verwenden /etc/apt/apt.conf und fügen Sie die folgende Zeilengruppe hinzu (ersetzen Sie die 0.0.0.0 durch die IP-Adresse des Servers):

 Acquire { 
   Retries "0"; 
   HTTP { Proxy "http://0.0.0.0:8000"; };
 };

Firewall

Falls Sie eine Firewall verwenden, verwendet aavi 5353 über Adressen 224.0.0.0/4 und benötigt eine Regel, die wie folgt aussieht:

# Specifically port 5353 which avahi uses
-A INPUT -i eth2 -d 224.0.0.0/4 --dport 5353 -j ACCEPT

# OR

# Wide open so all local broadcasting works
-A INPUT -i eth2 -d 224.0.0.0/4 -j ACCEPT

Als nächstes müssen Sie den TCP-Port 8000 für die eigentliche Kommunikation über den Proxy öffnen. Etwas mehr oder weniger so:

-A INPUT -i eth2 -p tcp -m tcp --dport 8000 -d 192.168.0.1 -s 192.168.0.0/24 --syn -j ACCEPT

Diese Regeln dienen nur dazu, Ihnen zu helfen. Sie werden wahrscheinlich nicht eins zu eins mit Ihrem Setup übereinstimmen. (d. h. falsche Schnittstelle, falsche IP-Adressen des privaten Netzwerks usw.)

Bestätigen, dass es funktioniert

Schließe zuerst das Protokoll auf dem Server an, damit du es dir anschauen kannst: tail -F /var/log/squid-deb-proxy/access.log und führen Sie dann ein Update auf jedem Computer durch, auf dem der Client installiert ist. Das Protokoll sollte mit den folgenden Einträgen beginnen:

1307310795.647     32 192.168.1.106 TCP_MISS/302 768 GET http://us.archive.ubuntu.com/ubuntu/dists/natty-proposed/universe/i18n/Translation-en.xz - DIRECT/141.210.26.10 text/html
1307310795.683     34 192.168.1.106 TCP_MISS/302 752 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/main/i18n/Translation-en_US.lzma - DIRECT/141.210.26.10 text/html
1307310795.716     32 192.168.1.106 TCP_MISS/302 746 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/main/i18n/Translation-en.lzma - DIRECT/141.210.26.10 text/html
1307310795.750     32 192.168.1.106 TCP_MISS/302 764 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/multiverse/i18n/Translation-en_US.lzma - DIRECT/141.210.26.10 text/html
1307310795.784     32 192.168.1.106 TCP_MISS/302 758 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/multiverse/i18n/Translation-en.lzma - DIRECT/141.210.26.10 text/html
1307310795.817     32 192.168.1.106 TCP_MISS/404 657 GET http://us.archive.ubuntu.com/dists/natty-proposed/multiverse/i18n/Translation-en_US.xz - DIRECT/141.210.26.10 text/html

Das bedeutet, dass die Clients den Cache zwar sehen, ihn jedoch vermissen, was erwartet wird, da noch kein Cache zwischengespeichert wurde. Jeder nachfolgende Lauf sollte als TCP_HIT angezeigt werden. Sie können die Tintenfisch-Cache-Dateien selbst finden /var/cache/squid-deb-proxy.

Es benutzen

Von diesem Zeitpunkt an werden alle Computer in Ihrem Netzwerk den Cache überprüfen, bevor sie das externe Netzwerk zum Abrufen von Paketen aufrufen. Wenn neue Pakete verfügbar sind, wird die erste Maschine sie aus dem Netz herunterladen, wonach nachfolgende Anforderungen für dieses Paket vom Server an die Clients kommen.

MACHEN

Wir müssen es apt weiterhin ermöglichen, einen angekündigten Cache im Netzwerk sofort und standardmäßig zu verwenden, sodass Sie das Client-Teil nicht installieren müssen. Wir müssen auch reparieren der Fehler dass debs von 403 nicht in der Spiegelliste ist.


126
2017-09-02 23:52



21.01.2014 14: 56: 31 | FEHLER: / var / cache / squid-deb-proxy / 03: (2) Keine solche Datei oder kein Verzeichnis FATAL: Fehler beim Überprüfen eines der Auslagerungsverzeichnisse, Check cache.log für Details. Führen Sie 'squid -z' aus, um bei Bedarf Swap-Verzeichnisse zu erstellen, oder wenn Squid zum ersten Mal ausgeführt wird. Squid Cache (Version 3.3.8): Abnormal beendet. - thumper
Sie müssen auch Tintenfisch installieren. - thumper
Es sieht aus wie die Manuelle Konfiguration ist nicht mehr gültig. Es gibt kein apt.conf Datei unter /etc/apt. Es gibt jedoch eine Vielzahl von Dateien mit Einstellungen unter /etc/apt/apt.conf.d. Ich könnte mir vorstellen, dass wir stattdessen dort eine Datei erstellen sollten? - Alexis Wilke
Es sieht auch so aus, als ob der TODO gelöst wurde. Das heißt, ich musste nichts tun und der Cache wurde zuerst verwendet. Obwohl der Fehler nicht so aussieht, als wäre er noch als behoben markiert. - Alexis Wilke
Sicher, wenn apt.conf.d so ist, wie es jetzt gemacht wird, reiche bitte einen Schnitt zu dieser Antwort ein, Prost! - Jorge Castro


apt-cacher-ng ist die Antwort für mich - ich habe keine Probleme in kleinen Umgebungen (ca. 20 Kunden), also nehme ich die Probleme @MagicFab Erwähnungen wurden in der aktuellen Version (installiert auf Ubuntu 10.04 und 10.10) gelöst. Für den Server ist keine Konfiguration erforderlich, und Sie müssen nur Ihre Clients anweisen, den Server als Paketmanager-Proxy zu verwenden.

Der Server ist komplett installiert und konfiguriert durch die Installation der apt-cacher-ng Paket.

Die Clients müssen konfiguriert werden, indem Sie den APT-Proxy einrichten - indem Sie die Datei hinzufügen /etc/apt/apt.conf.d/01proxy, die dieses enthält (wobei "your-apt-server" der Name oder die IP-Adresse Ihres Servers ist):

Acquire::http { Proxy "http://your-apt-server:3142"; };

Erledigt - Jetzt werden die Pakete vom Server zwischengespeichert, unabhängig davon, welche Quellen Sie verwenden oder welche Systemversion Sie haben (z. B. kann ein 10.04 Server von 9.10.10.04 und 11.04 Clients ohne Probleme oder Konflikte verwendet werden).


Wenn Sie Client-Laptops haben, die sich zwischen Netzwerken bewegen, wird es etwas komplexer. Ich habe ein Skript erstellt, das den richtigen Proxy abhängig von der Netzwerkadresse einstellt. Das Skript ist ausführbar und in /etc/network/if-up.d/apt-proxy. Nach dem Empfang einer IPv4-Adresse von einem DHCP-Server legt das Skript den richtigen apt-cacher-Server für das jeweilige Netzwerk fest:

#!/bin/sh

set -e
# Don't bother when lo is configured.
if [ "$IFACE" = lo ]; then
    exit 0
fi
# Only run from ifup.
if [ "$MODE" != start ]; then
    exit 0
fi
# currently only cares about IPv4
if [ "$ADDRFAM" != inet ] && [ "$ADDRFAM" != NetworkManager ]; then
    exit 0
fi
# only run for DHCP-assigned addresses
if [ "$DHCP4_IP_ADDRESS" = "" ]; then
    exit 0
fi

# we're matching on network *broadcast* address,
#  not the specific IP address we were assigned
case "$DHCP4_BROADCAST_ADDRESS" in
    10.3.141.255)
        PROXY='Acquire::http::Proxy "http://my-home-server:3142";';
        ;;
    192.168.154.255)
        PROXY='Acquire::http::Proxy "http://work-server.foo.bar.example.com:3142";';
        ;;
    # add as needed
    *)
        # unknown, no proxying
        PROXY=""
        ;;
esac

# set the proxy
FNAME="/etc/apt/apt.conf.d/01proxy"
echo -n "$PROXY">$FNAME

exit 0

37
2018-02-12 10:45



apt-cacher-ng unterstützt auch IPv6 (ich erinnere mich an einige der anderen Lösungen nicht). - Azendale
Ein Jahr später bin ich hinüber gegangen squid-deb-proxy und squid-deb-proxy-client: Zeroconf bedeutet in der Tat keine Konfiguration auf Clients, was für nomadische Benutzer extrem nützlich ist - und falls ein Server nicht antwortet, verwendet der Client standardmäßig den direkten Download. - Piskvor
apt-cacher-ng saugt, es ist sehr fehlerhaft, hängt beim Herunterladen von Paketen. Zum Beispiel habe ich gesehen, dass 150 MB nur für ein 30-MB-Paket heruntergeladen wurden - pylover
apt-cacher-ng funktioniert perfekt. Sie haben etwas sehr falsch mit Ihrem System. On Precise squid-deb-proxy möchte Squid installieren. Besteht darauf. - Ken Sharp
Nun, das ist die beste Lösung, um mit einem Cache zu arbeiten pbuilder. Dies funktionierte aus der Box. Es sieht auch so aus, als ob es Unterstützung für zeroconf (im Jahr 2016), aber ich konnte es (noch) nicht schaffen, an meinem Ende zu arbeiten. - Alexis Wilke


Eine der einfachsten Lösungen ist die Einrichtung von apt-proxy.

Lesen Sie die Ubuntu-Dokumentation hier: https://help.ubuntu.com/community/AptProxy


6
2017-09-02 23:51





Ich bevorzuge viel lieber einen lokalen Spiegel mit dem debmirror Nützlichkeit.

Hier ist eine Beispielbeschwörung.

debmirror --progress --verbose --nosource --method=ftp --passive \
 --host=ftp.osuosl.org --root=pub/ubuntu \
 --dist=lucid,lucid-updates,lucid-security,lucid-backports \
 --section=main,restricted,universe,multiverse --arch=amd64 \
 /d2/ftp/mirror/ubuntu-lucid

Ich führe das ungefähr einmal pro Woche durch und benutze es als Grundlage für die Einrichtung eines oder mehrerer "Patchlevels". Beispielsweise...

 cd /d2/ftp/mirror/
 cp -al ubuntu-lucid ubuntu-lucid-20100908

Dies erstellt eine verknüpfte Kopie der Struktur (verwendet fast keinen Speicherplatz), auf die ich jeden meiner lokalen Server in apt sources.list verweisen kann


6
2017-09-08 15:07



Sie sollten ubumirror überprüfen, es ist ein Convenience-Paket im Archiv, das alles für Sie bereits eingerichtet hat. Es ist, was die offiziellen Spiegel benutzen. - Jorge Castro


In kleinen Netzwerken (wie zu Hause / in kleinen Büros) habe ich apt-cacher-ng mit guten Ergebnissen verwendet. Ich habe die neuesten Versionen nicht überprüft, aber ich weiß, dass es eine sorgfältige Einrichtung von Server und Clients erfordert, und es ist am besten für Clients geeignet, die nur Updates von Ihrem lokalen Netzwerk erhalten.

Ich habe die Tintenfisch-basierte Lösung oben versucht, aber es erfordert mehrere Workaround und mehr Client-Konfiguration als ich möchte, so fühlt es sich nicht an noch als könnte es apt-cacher-ng in kleinen Setups ersetzen.


2
2017-11-29 02:35





apt-cacher war nicht am einfachsten einzurichten und wird ein dist-upgrade nicht überleben.

Installieren squid-deb-proxy auf dem Server, squid-deb-proxy-client auf den Kunden. Es verwendet Zeroconf Avahi, also keine Konfiguration notwendig.

Wenn Sie mehr als nur Debs cachen wollen, würde ich mich nicht mit Squid beschäftigen. Apache Traffic Server ist das nächste große Ding. http://trafficserver.readthedocs.org


1
2017-12-19 12:19



squid-deb-proxy besteht darauf, squid zu installieren. Und apt-cacher ist längst tot, apt-cacher-ng ist da, wo es ist. - Ken Sharp