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?
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.
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.
Ö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:
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.
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.
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"; };
};
_
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.)
İ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.
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.
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ı.
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
_
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).
En kolay çözümlerden biri apt-proxy kurmaktır.
Ubuntu belgelerini buradan okuyun: https://help.ubuntu.com/community/AptProxy
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.
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