Die beste Methode, um apt-Downloads in einem LAN zu cachen?

147

Ich habe mehrere Ubuntu-Maschinen zu Hause und eine ziemlich langsame Internetverbindung, und manchmal müssen mehrere Maschinen auf einmal 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?

    
Ken Simon 03.09.2010, 01:34
quelle

6 Antworten

126

Ich habe ein paar Lösungen erforscht 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, damit die Clients "keine Konfiguration" haben
  • 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.

Client-Konfiguration

Auf jedem Computer , den Sie den Cache verwenden möchten (die Clients und der Server selbst, damit er auch den Cache verwenden kann), müssen Sie das clientseitige Tool installieren, das aptt Suchen Sie automatisch nach dem Server, klicken Sie hier:

oder über die Befehlszeile:

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

Optional : Um maximale Effizienz zu erreichen, sollten Sie einen Computer so einstellen, dass Updates automatisch heruntergeladen werden. Wenn Ihre anderen Computer es benötigen, befindet es sich bereits im Cache. Sie können dies tun, indem Sie auf System- & gt; Administration- & gt; Update Manager, klicken Sie dann auf die Schaltfläche "Einstellungen ...", in der Registerkarte Update festgelegt, dass automatisch alle Updates herunterladen.

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 der Liste der Quellen bei /etc/squid-deb-proxy/mirror-dstdomain.acl hinzufügen. 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 sudo restart squid-deb-proxy ausführen, 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 für die Verwendung des Proxy manuell festlegen, indem Sie /etc/apt/apt.conf bearbeiten und die folgende Zeilengruppe hinzufügen (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

Wenn Sie eine Firewall verwenden, verwendet Avahi 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-Adresse des privaten Netzwerks usw.)

Bestätigen, dass es funktioniert

Schließe zuerst das Protokoll auf dem Server an, damit du es betrachten kannst: tail -F /var/log/squid-deb-proxy/access.log und führe dann ein Update auf jedem Rechner 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

Was bedeutet, dass die Clients den Cache sehen, aber ihn vermissen, was erwartet wird, da noch nichts zwischengespeichert wurde. Jeder nachfolgende Lauf sollte als TCP_HIT angezeigt werden. Sie finden die Tintenfisch-Cache-Dateien selbst in /var/cache/squid-deb-proxy .

Verwenden Sie es

Ab diesem Zeitpunkt prüfen alle Maschinen in Ihrem Netzwerk den Cache, 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.

TODO

Wir müssen apt weiterhin nur einen angekündigten Cache im Netzwerk standardmäßig verwenden, so dass Sie das Client-Teil nicht installieren müssen. Wir müssen auch den Fehler beheben , dass 403 debs nicht drin ist die Spiegelliste.

    
Jorge Castro 03.09.2010, 01:52
quelle
37

apt-cacher-ng ist die Antwort für mich - ich habe keine getroffen Probleme in kleinen Umgebungen (ca. 20 Clients), 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 vollständig installiert und durch die Installation des Pakets apt-cacher-ng konfiguriert.

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

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

Fertig - jetzt werden die Pakete vom Server zwischengespeichert, egal welche Quellen Sie verwenden oder welche Systemversion Sie haben (zB kann ein 10.04 Server von 9.10.10.04 und 11.04 Clients ohne verwendet werden) irgendwelche Probleme oder Konflikte).

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 entsprechende 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
    
Piskvor 12.02.2011 11:45
quelle
6

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

Lesen Sie die Ubuntu-Dokumentation hier: Pfandrecht

    
sandaru1 03.09.2010 01:51
quelle
6

Ich bevorzuge die Einrichtung eines lokalen Spiegels mit dem Dienstprogramm debmirror .

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". Zum Beispiel ...

 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     
delimiter 08.09.2010 17:07
quelle
2

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 sowohl des Servers als auch der Clients erfordert, und es ist am besten für Clients geeignet, die nur Updates von Ihrem lokalen Netzwerk erhalten.

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

    
MagicFab 29.11.2010 03:35
quelle
1

apt-cacher war nicht so einfach einzurichten und wird ein dist-upgrade nicht überleben.

Installieren Sie squid-deb-proxy auf dem Server, squid-deb-proxy-client auf den Clients. 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. Pfandrecht

    
caduceus 19.12.2013 13:19
quelle

Tags und Links