it-swarm-eu.dev

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

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?

152
Ken Simon

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 nur ein Computer erforderlich, der 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 (Sie brauchen das nicht, wenn Sie am 12.04+ sind):

 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

Wenn Sie auf jedem Computer den Cache verwenden möchten (die Clients und den Server selbst, damit auch der Cache verwendet werden kann), müssen Sie das clientseitige Tool installieren, das Lassen Sie uns den Server automatisch suchen. Klicken Sie hier:

Install via the software center

oder über die Kommandozeile:

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

Optional : Um eine maximale Effizienz zu erzielen, sollten Sie festlegen, dass ein Computer Updates automatisch herunterlädt, damit diese bei Bedarf bereits im Cache gespeichert sind. 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

Caching von Quellen von Drittanbietern

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 /etc/squid-deb-proxy/mirror-dstdomain.acl hinzufügen. 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 Sudo restart squid-deb-proxy ausführen, damit die Änderungen wirksam werden.

Manuelle Konfig

Wenn Sie aus irgendeinem Grund keine zeroconf verwenden möchten (aus Netzwerkgründen oder aus irgendeinem Grund), können Sie einen Client manuell so einstellen, dass er den Proxy verwendet, 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 die 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 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. (d. h. 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.log und fü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.

129
Jorge Castro

apt-cacher-ng ist die Antwort für mich - ich habe keine Probleme in kleineren Umgebungen (ca. 20 Clients) festgestellt, daher nehme ich die Probleme an @ MagicFab Erwähnungen wurden in der aktuellen Version behoben (installiert auf Ubuntu 10.04 und 10.10). 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 vollständig installiert und durch Installation des Pakets _apt-cacher-ng_ konfiguriert.

Die Clients müssen durch Einrichten von APT Proxy konfiguriert werden. Fügen Sie dazu die Datei _/etc/apt/apt.conf.d/01proxy_ hinzu (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, unabhängig davon, welche Quellen Sie verwenden oder welche Systemversion Sie haben (z. B. kann ein 10.04-Server verwendet werden) von 9.10.10.04 und 11.04 Kunden ohne Probleme oder Konflikte).


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 befindet sich 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
_
37
Piskvor

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

6
delimiter

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

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

6
sandaru1

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 sich nicht so anfühlt, als obyetsie ersetzen könnte apt-cacher-ng in kleinen aufbauten.

2
MagicFab

apt-cacher war nicht so einfach einzurichten und wird ein dist-Upgrade nicht überstehen.

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

1
caduceus