LAN üzerindeki uygun yüklemeleri önbelleğe almanın en iyi yolu?


152

Evde birden fazla Ubuntu makinem var ve oldukça yavaş bir internet bağlantım var ve bazen birden fazla makinenin aynı anda güncellenmesi gerekiyor (özellikle yeni Ubuntu sürümleri sırasında).

Makinelerimden sadece birinin paketleri indirmesi gerektiğinin bir yolu var mı, diğer makineler de bu makineleri almak için ilk makineyi kullanabilir mi? Kendi yerel aynamı kurmayı içerir mi? Veya bir proxy sunucusu? Veya daha basit yapılabilir mi?

Yanıtlar:


129

Birkaç çözüm için araştırma yaptım ve bazı Ubuntu geliştiricileri 10.04 ve sonrası için bir proxy yapılandırması (Squid'e dayanarak) geliştirdiler. Buna denir squid-deb-proxy. Sadece bir makine olarak sunucu görevi görür. Büyük kuruluşlar genellikle kendi aynalarını kullanırlar ancak çoğu insan için talep üzerine yansıtma yeterlidir.

Neden kalamar-deb-proxy?

  • İstemci tarafında dosya düzenlemesi yok.
  • İstemcilerin "sıfır config" olması için zeroconf kullanın
  • Yeni bir araç yazmak yerine mevcut, sağlam bir proxy çözümü kullanın.
  • Tipik bir Linux yöneticisi için kurulumu kolaydır.

Sunucu Yapılandırması

Bir sunucu olarak hareket etmek istediğiniz makinede aracı yükleyin:

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

Şimdi servis bitlerini başlatın:

 sudo start squid-deb-proxy

Ve avahi bitleri (eğer 12.04+ kullanıyorsanız buna ihtiyacınız yok):

 sudo start squid-deb-proxy-avahi

Bu, proxy sunucusunu (varsayılan olarak 8000 numaralı bağlantı noktasını dinleyen) ve sunucunun kendi kendini ağınızda tanıtmak için gerekli olan avahi araçlarını zeroconf aracılığıyla yükleyecektir.

İstemci Yapılandırması

On bilgisayarların her sen (çok önbelleği kullanabilir üzere müşterilere ve sunucu kendisi) önbelleği kullanmak istiyorum, bunları buraya tıklayın otomatik olarak sunucu için 's apt göz izin istemci tarafı aracı yüklemek için var gerek :

Yazılım merkezi üzerinden kurun

veya komut satırı yoluyla:

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

İsteğe bağlı : Maksimum verimlilik için bir makineyi güncellemeleri otomatik olarak indirecek şekilde ayarlamanız gerekir, böylece diğer makineleriniz ihtiyaç duyduğunda zaten önbellekte olur. Bunu, Sistem-> Yönetim-> Güncelleme Yöneticisi'ne giderek yapabilirsiniz, daha sonra Güncelleme sekmesindeki "Ayarlar ..." düğmesine tıklayın, güncellemeleri otomatik olarak indirecek şekilde ayarlayın.

alt metin

3. Taraf Kaynaklarını Önbelleğe Alma

Önbellek varsayılan olarak yalnızca resmi Ubuntu depolarını önbelleğe almak üzere ayarlanmıştır. Daha fazla eklemek için, onları kaynaklar listesine eklemeniz gerekir /etc/squid-deb-proxy/mirror-dstdomain.acl. Burası ppa.launchpad.net veya kullanabileceğiniz diğer servisleri ekleyebileceğiniz yerdir. Bu dosyada değişiklik yaptıktan sonra sudo restart squid-deb-proxy, değişikliklerin etkili olması için çalışmanız gerekir.

Manuel Yapılandırma

Herhangi bir nedenden dolayı sıfırconf kullanmak istemiyorsanız (şebeke nedenleriyle veya her neyse), istemciyi /etc/apt/apt.confaşağıdaki stanza'yı düzenleyerek ve ekleyerek proxy kullanmak üzere manuel olarak ayarlayabilirsiniz (0.0.0.0'ı sunucunun IP adresi ile değiştirin). ):

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

Firewall

Bir güvenlik duvarı kullanıyorsanız, avahi 224.0.0.0/4 adresleri üzerinde 5353'ü kullanır ve şuna benzer bir kural gerektirir:

# 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

Ardından, proxy üzerinden gerçek iletişim için 8000 numaralı TCP bağlantı noktasını açmanız gerekir. Buna az çok benzer bir şey:

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

Bu kurallar sadece size yardımcı olmak içindir. Muhtemelen kurulumunuzla birebir eşleşmeyeceklerdir. (yani yanlış arayüz, yanlış özel ağ IP adresleri vb.)

Çalıştığını Onaylama

İlk önce sunucuya giriş yapın, böylece bakabilirsiniz: tail -F /var/log/squid-deb-proxy/access.logve istemcinin kurulu olduğu herhangi bir makinede bir güncelleme çalıştırın; Günlük bunun gibi girişlerle ilerlemeye başlamalıdır:

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

Bu, müşteriler önbelleği görüyor ancak henüz bir şeyi önbelleğe almadığı için beklenen, eksik olduğu anlamına geliyor. Her sonraki çalıştırmada TCP_HIT olarak görünmelidir. Kalamar önbellek dosyalarını kendi içinde bulabilirsiniz /var/cache/squid-deb-proxy.

Onu kullanarak

O andan itibaren ağınızdaki tüm makineler paketleri almak için dış ağa vurmadan önce önbelleği kontrol eder. Kullanılabilir yeni paketler varsa, ilk makine onu ağdan indirecek, daha sonra bu paket için talepler sunucudan istemcilere gelecektir.

YAPMAK

Ağda yalnızca kutudan çıkan bir reklam önbelleğini kullanmaya ve varsayılan olarak istemci parçasını kurmanıza gerek kalmaması için apt özelliğini etkinleştirmemiz gerekiyor. Ayrıca 403'lerin borçlarının ayna listesinde olmadığı hatasını düzeltmemiz gerekiyor .


2014/01/21 14: 56: 31 | HATA: / var / cache / squid-deb-proxy / 03: (2) Böyle bir dosya ya da dizin yok FATAL: Takas dizinlerinden biri doğrulanamadı, Ayrıntılar için cache.log dosyasını kontrol edin. Gerekirse takas dizinleri oluşturmak için veya Squid'i ilk kez çalıştırıyorsanız 'squid -z' komutunu çalıştırın. Kalamar Önbelleği (Sürüm 3.3.8): Anormal biçimde sonlandırıldı.
Gümler

1
Ayrıca kalamar yüklemeniz gerekir.
Gümler

Manual Config artık geçerli değil gibi görünüyor . apt.confAltında dosya yok /etc/apt. Ancak, ayarları altında bir sürü dosya var /etc/apt/apt.conf.d. Şimdi orada bir dosya oluşturmamız gerektiğini hayal ediyorum?
Alexis Wilke

Ayrıca, TODO çözülmüş gibi görünüyor. Yani, hiçbir şey yapmam gerekmedi ve ilk önce önbellek kullanıldı. Hata gibi görünmese de henüz sabit olarak işaretlendi.
Alexis Wilke

Tabii, eğer apt.conf.d şimdi böyle yapılırsa, lütfen bu cevaba bir düzenleme gönderin, şerefe!
Jorge Castro

37

apt-cacher-ngbenim için cevabı - ufacık ortamlarda herhangi bir sorunla karşılaşmadım (yaklaşık 20 müşteri), bu nedenle @MagicFab bahsinin şu anki sürümünde çözüldüğünü (Ubuntu 10.04 ve 10.10'da yüklü) sorunların olduğunu düşünüyorum. Sunucu için gerekli bir yapılandırma yoktur ve müşterilerinize sunucuyu paket yöneticisi proxy'si olarak kullanmalarını istemeniz gerekir.

Sunucu, paketi yükleyerek tamamen kurulur ve yapılandırılır apt-cacher-ng.

İstemcilerin APT proxy'si ayarlayarak yapılandırılması gerekir - dosyayı /etc/apt/apt.conf.d/01proxyiçeren, bunu içeren ("apt-server-sunucunuz" sunucunuzun adı veya IP adresidir):

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

Tamamlandı - şimdi paketler sunucu tarafından önbelleklenir, hangi kaynakları kullanırsanız veya hangi sistem sürümüne sahip olursanız olun (ör. 10.04 sunucusu 9.10, 10.10 ve 11.04 istemcileri tarafından herhangi bir sorun veya çakışma olmadan kullanılabilir).


Ağlar arasında dolaşan istemci dizüstü bilgisayarınız varsa, biraz daha karmaşık hale gelir - Ağ adresine bağlı olarak doğru proxy'yi ayarlayan bir komut dosyası hazırladım; komut dosyası çalıştırılabilir ve içeride /etc/network/if-up.d/apt-proxy. Bir DHCP sunucusundan bir IPv4 adresi alındığında, komut dosyası ilgili ağ için doğru apt-cacher sunucusunu ayarlayacaktır:

#!/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

apt-cacher-ng ayrıca IPv6'yı da destekler (yapmadığım diğer çözümlerin bazılarını hatırlıyorum).
Azendale

11
Bir yıl sonra, şunun üzerine gittim squid-deb-proxyve squid-deb-proxy-client: zeroconf aslında istemciler üzerinde sıfır yapılandırma anlamına gelir; bu, göçebe kullanıcılar için oldukça faydalıdır - ve bir sunucunun yanıt vermemesi durumunda, istemcinin doğrudan indirme işlemi varsayılandır.
Piskvor

apt-cacher-ng berbat, bu verry buggy, paketleri indirmeyi sonlandırıyor. örneğin ben sadece 30MB paketi için 150 MB indirildi gördü
pylover

apt-cacher-ng mükemmel çalışıyor. SİZİN sisteminizde çok yanlış bir şey var. Kesin olarak kalamar-deb-proxy Squid yüklemek istiyor. Üzerinde ısrar ediyor.
Ken Sharp,

Şimdi bu bir önbellek ile çalışmak için en iyi çözümdür pbuilder. Bu kutunun dışında çalıştı. Ayrıca zeroconf(2016'da) için destek varmış gibi görünüyor , ancak bunu henüz benim başıma alamadım.
Alexis Wilke


6

debmirrorYardımcı programı kullanarak yerel bir ayna ayarlamayı tercih ederim .

İşte örnek bir teşvik.

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

Bunu haftada bir kez çalıştırıyorum ve bir veya daha fazla "patchlevels" oluşturmak için temel olarak kullanıyorum. Örneğin...

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

Bu, yerel sunucularımın her birini apt kaynaklarına yönlendirebileceğim, ağacın bağlantılı bir kopyasını oluşturur (neredeyse sıfır disk alanı kullanır).


5
Ubumirror'a göz atmalısınız, bu arşivde sizin için zaten hazır olan her şeyi içeren bir kolaylık paketidir. Resmi aynaların kullandığı şey bu.
Jorge Castro

2

Küçük ağlarda (ev / küçük ofis gibi) apt-cacher-ng'ı iyi sonuçlarla kullandım. En son sürümleri kontrol etmedim, ancak hem sunucunun hem de istemcilerin dikkatli bir şekilde kurulmasını gerektirdiğini biliyorum ve yalnızca yerel ağınızdan güncelleştirmeler alacak olan müşteriler için en uygun yöntem.

Ben yukarıda kalamar tabanlı bir çözüm denedik ama ben, bu hissetmez böylece istiyorum daha birçok geçici çözümü ve daha istemci yapılandırma uygulanması gerekli henüz küçük kurulumları içinde apt-cacher-ng yerini alabilir gibi.


1

apt-cacher kurmak kolay değildi ve dağınıklıktan kurtulmaya devam edemez.

İstemcilere squid-deb-proxysunucuya yükleyin squid-deb-proxy-client. Zeroconf Avahi kullanır, bu yüzden konfigürasyon gerekmez.

Eğer sadece sandıktan daha fazlasını önbelleğe almak istiyorsan, Squid ile uğraşmazdım. Apache Traffic Server bir sonraki büyük şey. http://trafficserver.readthedocs.org


squid-deb-proxy, kalamar kurulumunda ısrar ediyor. Ve apt-cacher uzun zaman önce öldü, apt-cacher-ng, bulunduğu yerde.
Ken Sharp,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.