Nejlepší způsob, jak cache stáhnout apt v LAN?

147

Mám několik domén Ubuntu a poměrně pomalé připojení k internetu a někdy je třeba aktualizovat několik strojů najednou (zejména během nových vydání Ubuntu.)

Existuje způsob, jak jen jeden z mých strojů potřebuje stahovat balíčky a ostatní stroje mohou používat první stroj k získání debs? Zahrnuje to nastavení vlastního místního zrcadla? Nebo server proxy? Nebo to může být jednodušší?

    
dané Ken Simon 03.09.2010 01:34

6 odpovědí

126

Provedl jsem nějaké výzkumy v řadě řešení a někteří vývojáři Ubuntu přišli s konfigurací proxy (založenou na Squid) pro 10.04 a později. Nazývá sesquid-deb-proxy. Vyžaduje pouze, aby stroj fungoval jako server. Velké organizace obvykle provozují své vlastní zrcadla, ale pro většinu lidí stačí zrcadlení na vyžádání.

Proč squid-deb-proxy?

  • Žádné úpravy souborů na straně klienta.
  • Použijte zeroconf tak, aby byli klienti "nulový config"
  • Použijte stávající pevnou proxy řešení namísto psaní nového nástroje.
  • Snadno se nastavuje pro typického administrátora systému Linux.

Konfigurace serveru

Na zařízení, které chcete chovat jako server, nainstalujte nástroj s:

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

Spusťte servisní bity:

 sudo start squid-deb-proxy

Avahi bity (toto nepotřebujete, pokud jste 12.04 +):

 sudo start squid-deb-proxy-avahi

Tím se nainstaluje proxy server (který ve výchozím nastavení naslouchá portu 8000) a nástroje avahi potřebné pro to, aby se server v síti propagoval prostřednictvím zeroconf.

Konfigurace klienta

Na každém počítači , který chcete použít mezipaměť (klienti a samotný server, takže může použít i mezipaměť), musíte nainstalovat nástroj pro klientskou stránku, vyhledejte server automaticky, nechte je kliknout zde:

nebo pomocí příkazového řádku:

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

Volitelné : Chcete-li dosáhnout maximální účinnosti, měli byste nastavit jeden stroj, aby automaticky stáhl aktualizace, takže když je to potřebujete u ostatních strojů, je již v mezipaměti. Můžete to provést tak, že přejdete do Správce systému a klikněte na tlačítko "Nastavení ...", na kartě Aktualizace nastavte automatické stahování všech aktualizací.

Ukládání do mezipaměti zdrojů třetí strany

Ve výchozím nastavení je mezipaměť nastavena pouze pro ukládání do úložiště oficiálních úložišť Ubuntu. Chcete-li přidat další, je třeba je přidat do seznamu zdrojů na/etc/squid-deb-proxy/mirror-dstdomain.acl. Zde můžete přidat ppa.launchpad.net nebo jiné služby, které můžete použít. Po provedení změn v tomto souboru musíte spustitsudo restart squid-deb-proxy, aby změny byly účinné.

Ruční konfigurace

Pokud z nějakého důvodu nechcete použít zeroconf (z důvodů sítě nebo cokoli jiného), můžete ručně nastavit klienta, aby používal proxy úpravou/etc/apt/apt.conf a přidáním následujícího stanza (nahraďte 0.0.0.0 IP adresa serveru):

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

Firewall

V případě, že používáte bránu firewall, avahi používá adresu 5353 přes adresy 224.0.0.0/4 a vyžaduje pravidlo, které vypadá takto:

# 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

Poté musíte otevřít TCP port 8000 pro aktuální komunikaci prostřednictvím serveru proxy. Něco podobného:

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

Tato pravidla slouží pouze k tomu, aby vám pomohli. Pravděpodobně nebudou odpovídat vašemu nastavení. (tj. nesprávné rozhraní, nesprávné adresy IP soukromé sítě atd.)

Potvrzení funguje

Nejprve ocistte protokol na serveru, abyste se na něj mohli podívat:tail -F /var/log/squid-deb-proxy/access.log a potom spusťte aktualizaci na libovolném počítači, ve kterém je nainstalován klient. protokol by se měl začít rolovat pomocí položek jako je tento:

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

Který znamená, že klienti vidí mezipaměť, ale chybí ji, což se očekává, protože ještě nic není uloženo v mezipaměti. Každé následující spuštění by se mělo zobrazit jako TCP_HIT. Soubory mezipaměti kalamáře můžete najít sami v/var/cache/squid-deb-proxy.

Používání

Od té doby všechny počítače ve vaší síti zkontrolují vyrovnávací paměť předtím, než zasáhnou vnější síť a načtou balíčky. Pokud jsou k dispozici nové balíčky, první počítač jej stáhne z sítě, poté budou následné požadavky na tento balíček přicházet ze serveru na klienty.

TODO

Stále ještě musíme povolit apt, aby v síti použil inzerovanou mezipaměť, a to ve výchozím nastavení, takže nemusíte instalovat klientský kus. Také je třeba opravit chybu , že debata 403 není v seznam zrcadel.

    
odpověděl Jorge Castro 03.09.2010 01:52
37

apt-cacher-ng je pro mě odpověď - nenalezla jsem žádné problémy v malých prostředích (přibližně 20 klientů), takže předpokládám, že problémy @ MagicFab byly řešeny v aktuální verzi (nainstalované na Ubuntu 10.04 a 10.10). Neexistuje žádná konfigurace potřebná pro server a stačí, abyste instruovali své klienty, aby používali server jako proxy pro správu balíčků.

Server je zcela nainstalován a nakonfigurován instalací balíčkuapt-cacher-ng.

Klienti musí být nakonfigurováni nastavením APT proxy - přidáním souboru/etc/apt/apt.conf.d/01proxy, který obsahuje toto (kde "your-apt-server" je vaše jméno serveru nebo adresa IP):

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

Hotovo - nyní budou balíky ukládány do mezipaměti serverem bez ohledu na to, jaké zdroje používáte, nebo jakou systémovou verzi máte (např. server 10.04 může být používán klienty 9.10,10.04 a 11.04 bez problémy nebo konflikty).

Pokud máte klientský laptop (y), který se pohybuje mezi sítěmi, je to trochu složitější - vytvořil jsem skript, který nastaví správný proxy v závislosti na síti; skript je spustitelný a v/etc/network/if-up.d/apt-proxy. Po přijetí adresy IPv4 ze serveru DHCP skript nastaví správný server apt-cacher pro příslušnou síť:

#!/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
    
odpověděl Piskvor 12.02.2011 11:45
6

Jedním z nejjednodušších řešení je nastavení apt-proxy.

Přečtěte si dokumentaci ubuntu zde: Odkaz

    
odpověděl sandaru1 03.09.2010 01:51
6

Dávám přednost nastavení lokálního zrcadla pomocí nástrojedebmirror.

Zde je příklad zaklínání.

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

Spouštím to jednou týdně a použiji jako základ pro vytvoření jedné nebo více "patchlevels". Například ...

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

Toto vytváří propojenou kopii stromu (používá téměř nulový prostor na disku), který můžu bodovat každý z mých lokálních serverů do apt sources.list

    
odpověděl delimiter 08.09.2010 17:07
2

V malých sítích (jako doma / malá kancelář) jsem použil apt-cacher-ng s dobrými výsledky. Zkontroloval jsem nejnovější verze, ale vím, že je třeba pečlivě nastavit server i klienty a je to nejvhodnější pro klienty, kteří budou mít pouze aktualizace z vaší lokální sítě.

Snažil jsem se použít řešení založené na kalamatech, ale vyžadovalo několik řešení a více konfigurace pro klienty, než bych chtěl, takže se to cítí ještě nemusíte dosáhnout , mohlo by to nahradit apt-cacher- ng v malých nastaveních.

    
odpověděl MagicFab 29.11.2010 03:35
1

apt-cacher nebylo nejjednodušší nastavit a nebude přežít dist-upgrade.

Nainstalujtesquid-deb-proxy na server,squid-deb-proxy-client na klienty. Používá zeroconf Avahi, takže není nutná žádná konfigurace.

Pokud se snažíte ukládat do mezipaměti víc než jen debty, nemusím se s Squidem obtěžovat. Apache Traffic Server je další velká věc. Odkaz

    
odpověděl caduceus 19.12.2013 13:19