it-swarm-tr.com

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

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?

152
Ken Simon

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 _squid-deb-proxy_ denir. Sadece bir makine olarak sunucu görevi görür. Büyük kuruluşlar genellikle kendi aynasını yaparlar 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ı

Önbelleği kullanmak istediğiniz bilgisayarların her birinde (istemcilerin ve sunucunun kendisinin de önbelleği kullanabilmesi için), istemci tarafı aracını yüklemeniz gerekir. Hadi sunucuyu otomatik olarak arayalım, buraya tıklayın:

Install via the software center

veya komut satırı yoluyla:

_Sudo apt-get install squid-deb-proxy-client
_

İsteğe bağlı : Maksimum verimlilik için bir makineyi otomatik olarak güncellemeleri 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 text

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

Varsayılan olarak, önbellek yalnızca resmi Ubuntu depolarını önbelleğe almak üzere ayarlanmıştır. Daha fazla eklemek için, onları _/etc/squid-deb-proxy/mirror-dstdomain.acl_ konumundaki kaynak listesine eklemeniz gerekir. Ppa.launchpad.net veya kullanabileceğiniz diğer servisleri ekleyebileceğiniz yer burasıdır. Bu dosyada değişiklik yaptıktan sonra, değişikliklerin etkili olması için _Sudo restart squid-deb-proxy_ komutunu çalıştırmanız gerekir.

Manuel Yapılandırma

Herhangi bir nedenden dolayı (ağ nedenleri veya herhangi bir şey için) zeroconf kullanmak istemiyorsanız, bir müşteriyi _/etc/apt/apt.conf_ düzenleyerek ve aşağıdaki stanza'yı ekleyerek proxy'yi kullanacak şekilde manuel olarak ayarlayabilirsiniz. Sunucunun IP adresi):

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

Daha sonra, proxy üzerinden gerçek iletişim için TCP 8000 portunu 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.log_ ve ardından 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üşterilerin önbelleği gördüğü, ancak henüz bir şey önbelleğe almadığı için beklenen, eksik olduğu anlamına gelir. Her sonraki çalıştırmada TCP_HIT olarak görünmelidir. Kalamar önbellek dosyalarını kendilerini _/var/cache/squid-deb-proxy_ içinde bulabilirsiniz.

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ğdaki kutudan çıkan yalnızca önbelleğe alınmış bir önbellek kullanmaya ve varsayılan olarak istemci parçasını kurmanıza gerek kalmaması için apt özelliğini etkinleştirmemiz gerekiyor. Ayrıca düzeltmemiz gereken hata 403'ün borcunun ayna listesinde olmadığını.

129
Jorge Castro

apt-cacher-ng benim için cevabı - Ben ufacık ortamlarda (yaklaşık 20 müşteri) herhangi bir sorunla karşılaşmadım, bu yüzden sorunların @ MagicFab bahsettiğini varsayalım. Mevcut sürümde çözüldü (Ubuntu 10.04 ve 10.10'da yüklü). Sunucu için gerekli bir yapılandırma yoktur ve müşterilerinize sunucuyu paket yöneticisi proxy'si olarak kullanmalarını istemeniz gerekir.

Sunucu tamamen kuruldu ve _apt-cacher-ng_ paketini yükleyerek yapılandırıldı.

İstemcilerin APT proxy ayarlayarak, _/etc/apt/apt.conf.d/01proxy_ dosyasını ekleyerek, bunu (burada "apt-sunucunuz" sunucunuzun adı veya IP adresi olduğu) ekleyerek yapılandırılması gerekir:

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

Tamamlandı - şimdi, hangi kaynakları kullanıyor olursanız olun veya hangi sistem sürümüne sahip olursanız olun (ör. 10.04 sunucusu kullanılabilir) 9.10.10.04 ve 11.04 istemcilerinden herhangi bir sorun veya çatışma olmadan.


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 _/etc/network/if-up.d/apt-proxy_ içindedir. 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
_
37
Piskvor

debmirror yardımcı programını 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).

6
delimiter

En kolay çözümlerden biri apt-proxy kurmaktır.

Ubuntu belgelerini buradan okuyun: https://help.ubuntu.com/community/AptProxy

6
sandaru1

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.

Yukarıda kalamar tabanlı çözümü denedim, ancak istediğimden daha fazla sayıda geçici çözüm ve daha fazla istemci yapılandırması uygulanması gerekiyordu, bu yüzden apt-cacher-ng'in yerini alabileceği gibi henüz hissetmiyor kurulumlar.

2
MagicFab

apt-cacher kurulumu en kolay değildi ve karmaşık bir güncellemeye dayanamayacak.

Sunucuya squid-deb-proxy, istemcilere squid-deb-proxy-client yükleyin. 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

1
caduceus