Der beste Weg, um passende Downloads in einem LAN zwischenzuspeichern?


152

Ich habe zu Hause mehrere Ubuntu-Computer und eine ziemlich langsame Internetverbindung, und manchmal müssen mehrere Computer gleichzeitig aktualisiert werden (insbesondere bei neuen Ubuntu-Versionen).

Gibt es eine Möglichkeit, auf der nur einer meiner Computer die Pakete herunterladen muss und die anderen Computer den ersten Computer verwenden können, um die Debets abzurufen? Geht es darum, einen eigenen lokalen Spiegel einzurichten? Oder ein Proxy-Server? Oder kann es einfacher gemacht werden?

Antworten:


129

Ich habe einige Nachforschungen angestellt und einige Ubuntu-Entwickler haben eine Proxy-Konfiguration (basierend auf Squid) für 10.04 und höher entwickelt. Es heißt squid-deb-proxy. Es ist lediglich eine Maschine erforderlich, die als Server fungiert. Große Organisationen betreiben normalerweise ihre eigenen vollständigen Spiegel, aber für die meisten Menschen ist die On-Demand-Spiegelung ausreichend.

Warum Squid-Deb-Proxy?

  • Keine Bearbeitung von Dateien auf der Client-Seite.
  • Verwende zeroconf, damit die Clients "zero config" sind
  • Verwenden Sie eine vorhandene, solide Proxy-Lösung, anstatt ein neues Tool zu schreiben.
  • Einfach für einen typischen Linux-Administrator einzurichten.

Serverkonfiguration

Auf dem Computer, der als Server fungieren soll, 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 (Du brauchst das nicht, wenn du am 12.04+ bist):

 sudo start squid-deb-proxy-avahi

Dadurch werden der Proxy-Server (der standardmäßig Port 8000 abhört) und die Avahi-Tools installiert, die erforderlich sind, damit sich der Server über zeroconf in Ihrem Netzwerk anmeldet.

Client-Konfig

Auf jedem Computer , auf dem Sie den Cache verwenden möchten (den Clients und dem Server selbst, damit er auch den Cache verwenden kann), müssen Sie das clientseitige Tool installieren, mit dem der Server automatisch gesucht werden kann. Klicken Sie hier :

Installation über das Software Center

oder über die Kommandozeile:

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

Optional : Um eine maximale Effizienz zu erzielen, sollten Sie einen Computer so einstellen, dass Updates automatisch heruntergeladen werden, sodass sie sich bereits im Cache befinden, wenn Ihre anderen Computer sie benötigen. Gehen Sie dazu zu System-> Administration-> Update Manager und klicken Sie auf die Schaltfläche "Einstellungen ...". Auf der Registerkarte "Update" können Sie festlegen, dass alle Updates automatisch heruntergeladen werden.

Alt-Text

Quellen von Drittanbietern zwischenspeichern

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

Manuelle Konfig

Wenn Sie aus irgendeinem Grund kein zeroconf verwenden möchten (aus Netzwerkgründen oder aus irgendeinem Grund), können Sie einen Client manuell für die Verwendung des Proxys einrichten, /etc/apt/apt.confindem Sie die folgende Zeilengruppe bearbeiten und hinzufügen (ersetzen Sie 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 erfordert 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 sollen Ihnen nur helfen. Sie stimmen wahrscheinlich nicht mit Ihrem Setup überein. (dh falsche Schnittstelle, falsche IP-Adressen des privaten Netzwerks usw.)

Bestätigung, dass es funktioniert

Schließen Sie zuerst das Protokoll auf dem Server ab, damit Sie es anzeigen können. tail -F /var/log/squid-deb-proxy/access.logFühren Sie dann ein Update auf jedem Computer aus, auf dem der Client installiert ist. Das Protokoll sollte einen Bildlauf mit Einträgen wie diesem 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

Dies bedeutet, dass die Clients den Cache sehen, ihn aber nicht finden, was zu erwarten ist, da noch nichts zwischengespeichert wurde. Jeder nachfolgende Lauf sollte als TCP_HIT angezeigt werden. Sie finden die Squid-Cache-Dateien selbst in /var/cache/squid-deb-proxy.

Es benutzen

Von da an überprüfen alle Computer in Ihrem Netzwerk den Cache, bevor sie das externe Netzwerk zum Abrufen von Paketen aufrufen. Wenn neue Pakete verfügbar sind, lädt der erste Computer sie aus dem Internet herunter. Anschließend werden die nachfolgenden Anforderungen für dieses Paket vom Server an die Clients gesendet.

MACHEN

Wir müssen weiterhin apt aktivieren, um nur einen angekündigten Cache im Netzwerk zu verwenden, und zwar standardmäßig, damit Sie das Client-Teil nicht installieren müssen. Wir müssen auch den Fehler beheben, dass 403s deb nicht in der Spiegelliste ist.


2014/01/21 14: 56: 31 | FEHLER: / var / cache / squid-deb-proxy / 03: (2) Keine solche Datei oder kein solches Verzeichnis. Führen Sie 'squid -z' aus, um bei Bedarf Auslagerungsverzeichnisse zu erstellen, oder wenn Sie Squid zum ersten Mal ausführen. Squid Cache (Version 3.3.8): Abnormal beendet.
Klopfer

1
Sie müssen auch Squid installieren.
Klopfer

Es sieht so aus, als ob die manuelle Konfiguration nicht mehr gültig ist. Es gibt keine apt.confDatei unter /etc/apt. Es gibt jedoch eine Vielzahl von Dateien mit Einstellungen unter /etc/apt/apt.conf.d. Ich würde mir vorstellen, dass wir jetzt stattdessen eine Datei dort anlegen sollten?
Alexis Wilke

Es sieht auch so aus, als ob das TODO behoben 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 nicht behoben.
Alexis Wilke

Klar, wenn apt.conf.d so ist, wie es jetzt gemacht wird, bitte sende eine Änderung an diese Antwort, Prost!
Jorge Castro

37

apt-cacher-ngist die Antwort für mich - Ich habe in kleineren Umgebungen (ca. 20 Clients) keine Probleme festgestellt, daher nehme ich an, dass die @MagicFab- Erwähnungen in der aktuellen Version (auf Ubuntu 10.04 und 10.10 installiert) behoben wurden. Für den Server ist keine Konfiguration erforderlich, und Sie müssen Ihre Clients lediglich anweisen, den Server als ihren Paketmanager-Proxy zu verwenden.

Der Server wird durch die Installation des Pakets vollständig installiert und konfiguriert apt-cacher-ng.

Die Clients müssen durch Einrichten des APT-Proxys konfiguriert werden. Fügen Sie dazu die Datei hinzu, die Folgendes /etc/apt/apt.conf.d/01proxyenthält (wobei "Ihr 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 (z. B. kann ein 10.04-Server von 9.10.10.04- und 11.04-Clients ohne Probleme oder Konflikte verwendet werden).


Wenn Client-Laptops zwischen Netzwerken wechseln, wird dies etwas komplexer. Ich habe ein Skript erstellt, mit dem der richtige Proxy in Abhängigkeit von der Netzwerkadresse festgelegt wird. Das Skript ist ausführbar und in /etc/network/if-up.d/apt-proxy. Beim Empfang einer IPv4-Adresse von einem DHCP-Server wird das Skript den richtigen Apt-Cacher-Server für das jeweilige Netzwerk festlegen:

#!/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

apt-cacher-ng unterstützt auch IPv6 (ich erinnere mich, dass einige der anderen Lösungen dies nicht taten).
Azendale

11
Ein Jahr später bin ich zu squid-deb-proxyund squid-deb-proxy-clientübergegangen: zeroconf bedeutet in der Tat null Konfiguration auf Clients, was für nomadische Benutzer äußerst 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 am Herunterladen von Paketen. Zum Beispiel habe ich gesehen, dass es 150 MB nur für ein 30-MB-Paket
heruntergeladen hat

apt-cacher-ng funktioniert einwandfrei. Sie haben etwas sehr falsch mit Ihrem System. On Precise squid-deb-proxy möchte Squid installieren. Besteht darauf.
Ken Sharp,

Das ist die beste Lösung, um einen Cache zum Laufen zu bringen pbuilder. Das hat sofort funktioniert. Es sieht auch so aus, als ob es Unterstützung für zeroconf(im Jahr 2016) gibt, aber ich konnte (noch) nicht erreichen, dass das an meinem Ende funktioniert.
Alexis Wilke


6

Ich bevorzuge die Einrichtung eines lokalen Spiegels mit dem debmirrorDienstprogramm.

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 in der 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

Dadurch wird eine verknüpfte Kopie des Baums erstellt (der fast keinen Speicherplatz belegt), auf die jeder meiner lokalen Server in der Datei apt sources.list verweisen kann


5
Sie sollten ubumirror auschecken, es ist ein praktisches Paket im Archiv, das alles bereits für Sie eingerichtet hat. Es ist das, was die offiziellen Spiegel verwenden.
Jorge Castro

2

In kleinen Netzwerken (wie zu Hause / im kleinen Büro) habe ich apt-cacher-ng mit guten Ergebnissen verwendet. Ich habe die neuesten Versionen noch nicht überprüft, aber ich weiß, dass sowohl Server als auch Clients sorgfältig eingerichtet werden müssen. Sie eignen sich am besten für Clients, die nur Aktualisierungen von Ihrem lokalen Netzwerk erhalten.

Ich habe die obige squid-basierte Lösung ausprobiert, aber es waren mehrere Workarounds und mehr Client-Konfigurationen erforderlich, als ich möchte, sodass es noch nicht so aussieht, als ob es apt-cacher-ng in kleinen Setups ersetzen könnte.


1

apt-cacher war nicht das einfachste einzurichten und wird ein dist-upgrade nicht überleben.

Installieren Sie squid-deb-proxyauf dem Server, squid-deb-proxy-clientauf den Clients. Es wird null Konf Avahi verwendet, daher ist keine Konfiguration erforderlich.

Wenn Sie mehr als nur Debs zwischenspeichern möchten, würde ich mich nicht um Squid kümmern. Apache Traffic Server ist das nächste große Ding. http://trafficserver.readthedocs.org


squid-deb-proxy besteht darauf, squid zu installieren. Und apt-cacher ist längst tot, apt-cacher-ng ist dort, wo es ist.
Ken Sharp
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.