Vraag Beste manier om apt-downloads in een LAN te cachen?


Ik heb thuis meerdere Ubuntu-machines en een vrij trage internetverbinding, en soms moeten meerdere apparaten tegelijk worden bijgewerkt (vooral tijdens nieuwe Ubuntu-releases.)

Is er een manier waarop slechts één van mijn machines de pakketten hoeft te downloaden en de andere machines de eerste machine kunnen gebruiken om de debs te krijgen? Betreft het het opzetten van mijn eigen lokale spiegel? Of een proxyserver? Of kan het eenvoudiger worden gemaakt?


147
2017-09-02 23:34


oorsprong




antwoorden:


Ik heb wat onderzoek gedaan naar een aantal oplossingen en een aantal Ubuntu-ontwikkelaars bedachten een proxyconfiguratie (op basis van Squid) voor 10.04 en later. Het heet squid-deb-proxy. Het vereist alleen een machine om op te treden als de server. Grote organisaties hebben meestal hun eigen volledige spiegel, maar voor de meeste mensen volstaat het op aanvraag spiegelen.

Waarom squid-deb-proxy?

  • Geen bewerking van bestanden aan de clientzijde.
  • Gebruik zeroconf zodat clients "zero config" waren
  • Gebruik een bestaande, solide proxy-oplossing in plaats van een nieuw hulpmiddel te schrijven.
  • Eenvoudig in te stellen voor een typische Linux-beheerder.

Server Config

Op de machine wilt u optreden als een server om de tool te installeren met:

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

Start nu de servicebits:

 sudo start squid-deb-proxy

En de avahi-bits (je hebt dit niet nodig als je op 12.04+ bent):

 sudo start squid-deb-proxy-avahi

Hiermee wordt de proxyserver (standaard naar poort 8000) en de avahi-tools geïnstalleerd die de server nodig heeft om via zeroconf op uw netwerk te adverteren.

Client Config

Op elk van de computers dat u de cache (de clients en de server zelf wilt gebruiken, zodat deze ook de cache kan gebruiken), moet u de client-side tool installeren waarmee apt automatisch naar de server zoekt, laat hem hier klikken:

Install via the software center

of via de opdrachtregel:

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

facultatief: Voor maximale efficiëntie moet u één machine instellen om automatisch updates te downloaden, zodat wanneer uw andere machines het nodig hebben, het al in de cache zit. U kunt dit doen door naar System-> Administration-> Update Manager te gaan en vervolgens op de knop "Settings ..." te klikken, op het tabblad Update stelt u alle updates automatisch in.

alt text

Cd's van externe partijen opslaan

Standaard is de cache zo ingesteld dat alleen officiële Ubuntu-bibliotheken worden gecached. Als u meer wilt toevoegen, moet u deze toevoegen aan de lijst met bronnen op /etc/squid-deb-proxy/mirror-dstdomain.acl. Hier kunt u ppa.launchpad.net of andere services die u mogelijk gebruikt toevoegen. Nadat u dit bestand hebt gewijzigd, moet u het uitvoeren sudo restart squid-deb-proxy zodat de wijzigingen effectief zijn.

Handmatig Config

Als u om wat voor reden dan ook geen gebruik wilt maken van zeroconf (om netwerkredenen of wat dan ook), kunt u handmatig een client instellen om de proxy te gebruiken door deze te bewerken /etc/apt/apt.conf en het toevoegen van de volgende strofe, (vervang de 0.0.0.0 door het IP-adres van de server):

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

brandmuur

In het geval dat u een firewall gebruikt, gebruikt avahi 5353 via adressen 224.0.0.0/4 en heeft een regel nodig die er als volgt uitziet:

# 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

Vervolgens moet u TCP-poort 8000 openen voor de daadwerkelijke communicatie via de proxy. Iets meer of minder als dit:

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

Deze regels zijn gewoon om u te helpen. Ze zullen waarschijnlijk je setup niet één op één matchen. (d.w.z. verkeerde interface, verkeerde IP-adressen van een privaat netwerk, etc.)

Bevestigen dat het werkt

Sluit eerst het logboek op de server aan, zodat u het kunt bekijken: tail -F /var/log/squid-deb-proxy/access.log en voer dan een update uit op elke computer waarop de client is geïnstalleerd; het logboek zou moeten beginnen te scrollen met items als deze:

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

Dit betekent dat de clients de cache zien maar deze missen, wat wordt verwacht omdat deze nog niets heeft gecached. Elke volgende run moet verschijnen als TCP_HIT. Je kunt de squid cache-bestanden zelf vinden /var/cache/squid-deb-proxy.

Het gebruiken

Vanaf dat moment zullen alle machines in uw netwerk de cache controleren voordat ze het externe netwerk raken om pakketten op te halen. Als er nieuwe pakketten beschikbaar zijn, downloadt de eerste machine deze van het net, waarna volgende aanvragen voor dat pakket van de server naar de clients komen.

TE DOEN

We moeten apt nog steeds inschakelen om standaard een geadverteerde cache op het netwerk te gebruiken en standaard zodat u het client stuk niet hoeft te installeren. We moeten ook repareren het beestje die 403's deb's staan ​​niet in de spiegellijst.


126
2017-09-02 23:52



2014/01/21 14: 56: 31 | FOUT: / var / cache / squid-deb-proxy / 03: (2) Geen bestand of map FATAL: verificatie mislukt van een van de verwisselbare mappen, controleer cache.log voor details. Voer 'squid -z' uit om zonodig verwisselbare mappen te maken, of als Squid voor de eerste keer wordt uitgevoerd. Squid Cache (versie 3.3.8): abnormaal beëindigd. - thumper
Je moet ook inktvis installeren. - thumper
Het lijkt op de Handmatig Config is niet meer geldig. Er is geen apt.conf bestand onder /etc/apt. Er is echter een overvloed aan bestanden met instellingen onder /etc/apt/apt.conf.d. Ik kan me voorstellen dat we daar nu een bestand zouden moeten maken? - Alexis Wilke
Ook lijkt het erop dat de TODO is opgelost. Dat wil zeggen, ik hoefde niets te doen en de cache werd eerst gebruikt. Hoewel de fout er niet uitziet, werd deze al als 'vast' gemarkeerd. - Alexis Wilke
OK, als apt.conf.d is hoe het nu is, stuur dan een bewerking naar dit antwoord, proost! - Jorge Castro


apt-cacher-ng is het antwoord voor mij - ik ben nog geen problemen tegengekomen in kleine omgevingen (ongeveer 20 klanten), dus ik veronderstel dat de problemen @MagicFab vermeldingen zijn opgelost in de huidige versie (geïnstalleerd op Ubuntu 10.04 en 10.10). Er is geen configuratie nodig voor de server en u hoeft uw clients alleen opdracht te geven om de server te gebruiken als proxy voor pakketbeheer.

De server is volledig geïnstalleerd en geconfigureerd door de apt-cacher-ng pakket.

De clients moeten worden geconfigureerd door APT-proxy in te stellen - door het bestand toe te voegen /etc/apt/apt.conf.d/01proxy, die dit bevat (waarbij "your-apt-server" uw servernaam of IP-adres is):

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

Gedaan - nu worden de pakketten in de cache opgeslagen door de server, ongeacht welke bronnen u gebruikt of welke systeemversie u hebt (een 10.04 server kan bijvoorbeeld zonder problemen of conflicten worden gebruikt door 9.10, 10.4 en 11.04 clients).


Als u clientlaptop (pen) gebruikt die tussen netwerken doorlopen, wordt het een beetje ingewikkelder: ik heb een script gemaakt dat de juiste proxy instelt, afhankelijk van het netwerkadres; het script is uitvoerbaar en in /etc/network/if-up.d/apt-proxy. Na ontvangst van een IPv4-adres van een DHCP-server, zal het script de juiste apt-cacher-server voor het betreffende netwerk instellen:

#!/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 ondersteunt ook IPv6 (ik herinner me dat sommige van de andere oplossingen dat niet deden). - Azendale
Een jaar later ben ik er naartoe gegaan squid-deb-proxy en squid-deb-proxy-client: zeroconf betekent inderdaad nulconfiguratie op clients, wat uiterst nuttig is voor nomadische gebruikers - en in het geval dat een server niet reageert, gebruikt de client standaard download. - Piskvor
apt-cacher-ng sucks, it's with bugs, hangt af van het downloaden van pakketten. ik zag het bijvoorbeeld 150 MB downloaden, alleen voor een 30MB-pakket - pylover
apt-cacher-ng werkt perfect. Je hebt iets heel erg mis met JOUW systeem. Op Precieze squid-deb-proxy wil Squid installeren. Staat erop. - Ken Sharp
Nu is dat de beste oplossing om een ​​cache te laten werken pbuilder. Dit werkte uit de doos. Ook lijkt het erop dat er ondersteuning voor is zeroconf (in 2016), maar dat kon (nog) niet aan mijn einde werken. - Alexis Wilke


Een van de gemakkelijkste oplossingen is om apt-proxy in te stellen.

Lees hier de ubuntu-documentatie: https://help.ubuntu.com/community/AptProxy


6
2017-09-02 23:51





Ik prefereer het opzetten van een lokale spiegel met behulp van de debmirror nut.

Hier is een voorbeeld van bezwering.

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

Ik voer dit ongeveer één keer per week uit en gebruik het als basis voor het vaststellen van een of meer "patchniveaus". Bijvoorbeeld...

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

Hiermee maak je een gekoppelde kopie van de boom (gebruikt bijna geen schijfruimte) waarmee ik elk van mijn lokale servers kan verwijzen naar apt sources.list


6
2017-09-08 15:07



Bekijk ubumirror eens, het is een gemakspakket in het archief dat alles heeft dat al voor u is opgezet. Het is wat de officiële mirrors gebruiken. - Jorge Castro


In kleine netwerken (zoals thuis / kleine kantoren) heb ik apt-cacher-ng met goede resultaten gebruikt. Ik heb de laatste versies niet gecontroleerd, maar ik weet dat het een zorgvuldige installatie van zowel de server als de clients vereist en het is het meest geschikt voor clients die alleen updates van uw lokale netwerk ontvangen.

Ik heb de op squid-gebaseerde oplossing hierboven geprobeerd, maar het vereiste een aantal tijdelijke oplossingen en meer clientconfiguratie dan ik zou willen, dus het voelt niet nog alsof het apt-cacher-ng in kleine opstellingen zou kunnen vervangen.


2
2017-11-29 02:35





apt-cacher was niet de gemakkelijkste om in te stellen en het zal een dist-upgrade niet overleven.

Installeren squid-deb-proxy op de server, squid-deb-proxy-client op de klanten. Het gebruikt zeroconf Avahi, dus geen configuratie nodig.

Als je meer dan alleen maar bankdebieten wilt cachen, zou ik niet met Squid bezig zijn. Apache Traffic Server is het volgende grote ding. http://trafficserver.readthedocs.org


1
2017-12-19 12:19



squid-deb-proxy staat erop inktvis te installeren. En apt-cacher is al lang dood, apt-cacher-ng is waar het is. - Ken Sharp