Najlepszy sposób na cache apt download w sieci LAN?

148

Mam wiele maszyn Ubuntu w domu i dość wolne połączenie z Internetem, a czasami wiele maszyn musi być aktualizowanych na raz (szczególnie podczas nowych wydań Ubuntu.)

Czy istnieje sposób, w którym tylko jedna z moich maszyn musi pobrać pakiety, a inne maszyny mogą korzystać z pierwszego komputera, aby uzyskać deb? Czy wiąże się z tworzeniem własnego lokalnego lustra? Lub serwer proxy? Czy może być prostsze?

    
zadawane Ken Simon 03.09.2010, 01:34
źródło

6 odpowiedzi

127

Zrobiłem kilka badań nad kilkoma rozwiązaniami, a niektórzy programiści Ubuntu wymyślili konfigurację proxy (opartą na Squid) na 10.04 i później. Nazywa się squid-deb-proxy . Wymaga tylko maszyny do działania jako serwer. Duże organizacje zwykle uruchamiają własne pełne kopie lustrzane, ale dla większości osób wystarczy lustrzane odbicie na żądanie.

Dlaczego squid-deb-proxy?

  • Brak edycji plików po stronie klienta.
  • Użyj zeroconf, aby klienci byli "zerową konfiguracją"
  • Użyj istniejącego, stałego rozwiązania proxy zamiast pisać nowe narzędzie.
  • Łatwe do skonfigurowania dla typowego administratora systemu Linux.

Konfiguracja serwera

Na komputerze, który chcesz działać jako serwer, zainstaluj narzędzie za pomocą:

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

Teraz uruchom bity serwisowe:

 sudo start squid-deb-proxy

A bit avahi (nie potrzebujesz tego, jeśli jesteś w 12.04 +):

 sudo start squid-deb-proxy-avahi

To zainstaluje serwer proxy (który domyślnie nasłuchuje na porcie 8000) i narzędzia avahi potrzebne do tego, aby serwer anonsował się w sieci przez zeroconf.

Konfig. klienta

Na na każdym z komputerów , do którego chcesz użyć pamięci podręcznej (klienci i sam serwer, aby mógł korzystać z cache), musisz zainstalować narzędzie po stronie klienta, które pozwala szukaj serwera automatycznie, niech klikną tutaj:

lubprzezliniępoleceń:

sudoapt-getinstallsquid-deb-proxy-client

Opcjonalnie:dlamaksymalnejwydajnościpowinieneśustawićjedenkomputer,abyautomatyczniepobierałaktualizacje,tak,żegdyinneurządzeniategopotrzebują,jestjużwpamięcipodręcznej.Możesztozrobić,przechodzącdoSystem->Administracja->Menedżeraktualizacji,anastępniekliknijprzycisk"Ustawienia ...", w zakładce Aktualizacja ustaw, aby automatycznie pobierać wszystkie aktualizacje.

Buforowanieźródełzewnętrznych

Domyślniepamięćpodręcznajestskonfigurowanatak,abybuforowaławyłącznieoficjalnerepozytoriaUbuntu.Abydodaćwięcej,musiszdodaćjedolistyźródełna/etc/squid-deb-proxy/mirror-dstdomain.acl.Tutajmożeszdodaćppa.launchpad.netlubinneusługi,zktórychmożeszskorzystać.Powprowadzeniuzmianwtymplikumusiszuruchomićsudorestartsquid-deb-proxy,abyzmianybyłyskuteczne.

Ręcznakonfiguracja

Jeślizjakiegośpowoduniechceszużywaćzeroconf(zpowodówsieciowychlubcokolwiekinnego),możeszręcznieustawićklienta,abyużywałproxy,edytując/etc/apt/apt.confidodającnastępującyzwrot(zmień0.0.0.0naadresIPserwera):

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

Zapora ogniowa

Jeśli używasz zapory, avahi używa 5353 przez adresy 224.0.0.0/4 i wymaga reguły, która wygląda tak:

# 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

Następnie musisz otworzyć port TCP 8000 dla rzeczywistej komunikacji za pośrednictwem serwera proxy. Coś mniej więcej tak:

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

Te zasady mają ci tylko pomóc. Prawdopodobnie nie będą pasować do twojej konfiguracji jeden do jednego. (tj. niewłaściwy interfejs, nieprawidłowe adresy IP w sieci prywatnej itp.)

Potwierdzenie działa

Najpierw zakończ logowanie na serwerze, aby można było na niego spojrzeć: tail -F /var/log/squid-deb-proxy/access.log , a następnie uruchom aktualizację na dowolnym komputerze, na którym zainstalowany jest klient; dziennik powinien zacząć przewijanie z takimi wpisami:

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

Co oznacza, że klienci widzą pamięć podręczną, ale jej nie ma, co jest oczekiwane, ponieważ nie ma jeszcze w pamięci podręcznej. Każdy kolejny przebieg powinien pojawić się jako TCP_HIT. Pliki cache squid można znaleźć w /var/cache/squid-deb-proxy .

Korzystanie z niego

Odtąd wszystkie komputery w twojej sieci będą sprawdzać pamięć podręczną przed trafieniem do sieci zewnętrznej w celu pobrania pakietów. Jeśli dostępne są nowe pakiety, to pierwszy komputer pobierze go z sieci, po czym kolejne żądania tego pakietu będą przesyłane z serwera do klientów.

TODO

Nadal musimy włączyć apt, aby po prostu używać anonsowanej pamięci podręcznej w sieci po wyjęciu z pudełka i domyślnie, więc nie musisz instalować elementu klienta. Musimy również naprawić błąd , że deb 403 nie jest dostępny lista kopii lustrzanych.

    
odpowiedział Jorge Castro 03.09.2010, 01:52
źródło
37

apt-cacher-ng jest dla mnie odpowiedzią - nie spotkałem się z żadnym problemy w niewielkich środowiskach (około 20 klientów), więc przypuszczam, że problemy @ MagicFab wzmianki zostały rozwiązane w aktualnej wersji (zainstalowanej na Ubuntu 10.04 i 10.10). Nie ma konfiguracji wymaganej dla serwera i musisz tylko polecić swoim klientom, aby użyli serwera jako swojego proxy pośrednika pakietu.

Serwer jest całkowicie zainstalowany i skonfigurowany przez zainstalowanie pakietu apt-cacher-ng .

Klienci muszą być skonfigurowani poprzez skonfigurowanie proxy APT - poprzez dodanie pliku /etc/apt/apt.conf.d/01proxy , zawierającego to (gdzie "twój-apt-serwer" to nazwa lub adres IP twojego serwera):

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

Gotowe - teraz pakiety będą buforowane przez serwer, bez względu na używane źródła lub posiadaną wersję systemu (np. serwer 10.04 może być używany przez 9.10, 10.04 i 11.04 klientów bez wszelkie problemy lub konflikty).

Jeśli masz laptopa (y) klienta, który porusza się między sieciami, staje się on bardziej skomplikowany - stworzyłem skrypt, który ustawia właściwy serwer proxy w zależności od adresu sieciowego; skrypt jest wykonywalny iw /etc/network/if-up.d/apt-proxy . Po odebraniu adresu IPv4 z serwera DHCP skrypt ustawi odpowiedni serwer apt-cachera dla odpowiedniej sieci:

#!/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
    
odpowiedział Piskvor 12.02.2011, 11:45
źródło
6

Jednym z najprostszych rozwiązań jest skonfigurowanie apt-proxy.

Przeczytaj dokumentację Ubuntu tutaj: link

    
odpowiedział sandaru1 03.09.2010, 01:51
źródło
6

Zdecydowanie wolę konfigurować lokalne lustro za pomocą narzędzia debmirror .

Oto przykładowa inkantacja.

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

Uruchamiam to około raz w tygodniu i używam go jako podstawy do ustanowienia jednego lub więcej "poziomów poprawek". Na przykład ...

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

Tworzy to połączoną kopię drzewa (używa prawie zerowej przestrzeni dyskowej), którą mogę wskazać na każdym z moich lokalnych serwerów w apt sources.list

    
odpowiedział delimiter 08.09.2010, 17:07
źródło
2

W małych sieciach (takich jak dom / małe biuro) korzystałem z apt-cacher-ng z dobrymi wynikami. Nie sprawdzałem najnowszych wersji, ale wiem, że wymaga to starannej konfiguracji zarówno serwera, jak i klientów, i najlepiej nadaje się dla klientów, którzy będą otrzymywać aktualizacje tylko z sieci lokalnej.

Próbowałem rozwiązania opartego na squidach powyżej, ale wymagało to zastosowania kilku obejść i większej konfiguracji klienta, niż chciałbym, więc nie czuję jeszcze , jakby to mogło zastąpić apt-cacher- w małych konfiguracjach.

    
odpowiedział MagicFab 29.11.2010, 03:35
źródło
1

apt-cacher nie było najłatwiejsze do skonfigurowania i nie przetrwa dist-upgrade.

Zainstaluj squid-deb-proxy na serwerze, squid-deb-proxy-client na klientach. Używa zeroconf Avahi, więc nie wymaga konfiguracji.

Jeśli szukasz pamięci podręcznej więcej niż tylko deb, nie zawracałbym sobie głowy Squid. Serwer Traffic Apache to kolejna wielka rzecz. link

    
odpowiedział caduceus 19.12.2013, 13:19
źródło

Przeczytaj inne pytania na temat tagów