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

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.

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