Cara terbaik untuk melakukan cache unduhan yang tepat pada LAN?


152

Saya memiliki beberapa mesin Ubuntu di rumah dan koneksi internet yang sangat lambat, dan kadang-kadang beberapa mesin perlu diperbarui sekaligus (terutama selama rilis Ubuntu baru.)

Apakah ada cara di mana hanya satu mesin saya perlu mengunduh paket, dan mesin lain dapat menggunakan mesin pertama untuk mendapatkan hutang? Apakah itu melibatkan pengaturan mirror lokal saya sendiri? Atau server proxy? Atau dapatkah itu dibuat lebih sederhana?

Jawaban:


129

Saya melakukan riset ke sekelompok solusi dan beberapa pengembang Ubuntu datang dengan konfigurasi proxy (berdasarkan Squid) untuk 10,04 dan kemudian. Itu disebut squid-deb-proxy. Itu hanya membutuhkan mesin untuk bertindak sebagai server. Organisasi besar biasanya menjalankan mirror sendiri penuh tetapi bagi kebanyakan orang mirroring on demand sudah cukup.

Mengapa squid-deb-proxy?

  • Tidak ada pengeditan file di sisi klien.
  • Gunakan zeroconf sehingga klien "nol konfigurasi"
  • Gunakan solusi proxy yang ada dan solid alih-alih menulis alat baru.
  • Mudah diatur untuk administrator Linux biasa.

Konfigurasi Server

Pada mesin Anda ingin bertindak sebagai server instal alat dengan:

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

Sekarang mulailah bit layanan:

 sudo start squid-deb-proxy

Dan bit-bit avahi (Anda tidak perlu ini jika Anda di 12,04+):

 sudo start squid-deb-proxy-avahi

Ini akan menginstal server proxy (yang mendengarkan port 8000 secara default) dan alat avahi yang diperlukan untuk server untuk beriklan sendiri di jaringan Anda melalui zeroconf.

Konfigurasi Klien

Pada setiap komputer yang Anda ingin gunakan cache (klien, dan server itu sendiri sehingga dapat menggunakan cache juga), Anda perlu menginstal alat sisi klien yang mari kita mencari server secara otomatis, minta mereka klik di sini :

Instal melalui pusat perangkat lunak

atau melalui baris perintah:

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

Opsional : Untuk efisiensi maksimum, Anda harus mengatur satu mesin untuk mengunduh pembaruan secara otomatis, sehingga saat mesin lain membutuhkannya, ia sudah ada dalam cache. Anda dapat melakukan ini dengan masuk ke System-> Administration-> Update Manager, lalu klik tombol "Settings ...", di tab Update, atur untuk mengunduh semua pembaruan secara otomatis.

teks alternatif

Caching Sumber Pihak Ketiga

Secara default, cache diatur hanya untuk cache repositori resmi Ubuntu. Untuk menambahkan lebih banyak, Anda perlu menambahkannya ke daftar sumber di /etc/squid-deb-proxy/mirror-dstdomain.acl. Di sinilah Anda dapat menambahkan ppa.launchpad.net, atau layanan lain yang mungkin Anda gunakan. Setelah membuat perubahan pada file ini, Anda harus menjalankan sudo restart squid-deb-proxyagar perubahan menjadi efektif.

Konfigurasi Manual

Jika karena alasan tertentu Anda tidak ingin menggunakan zeroconf (karena alasan jaringan atau apa pun), Anda dapat secara manual mengatur klien untuk menggunakan proxy dengan mengedit /etc/apt/apt.confdan menambahkan bait berikut, (ganti 0.0.0.0 dengan alamat IP server. ):

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

Firewall

Jika Anda menggunakan firewall, avahi menggunakan 5353 melalui alamat 224.0.0.0/4 dan membutuhkan aturan yang terlihat seperti ini:

# 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

Selanjutnya, Anda perlu membuka port TCP 8000 untuk komunikasi aktual melalui proxy. Sesuatu yang kurang lebih seperti ini:

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

Aturan-aturan ini hanya untuk membantu Anda. Mereka mungkin tidak akan cocok dengan pengaturan Anda satu-ke-satu. (mis. antarmuka yang salah, alamat IP jaringan pribadi salah, dll.)

Mengkonfirmasikannya Berhasil

Ekor log pada server terlebih dahulu sehingga Anda dapat melihatnya: tail -F /var/log/squid-deb-proxy/access.logdan kemudian jalankan pembaruan pada mesin apa pun yang memiliki klien diinstal; log harus mulai bergulir dengan entri seperti ini:

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

Yang berarti klien melihat cache tetapi tidak ada, yang diharapkan karena belum ada cache apa pun. Setiap proses selanjutnya harus ditampilkan sebagai TCP_HIT. Anda dapat menemukan sendiri file cache squid /var/cache/squid-deb-proxy.

Menggunakannya

Sejak saat itu semua mesin di jaringan Anda akan memeriksa cache sebelum memukul jaringan luar untuk mengambil paket. Jika ada paket baru yang tersedia maka mesin pertama akan mengunduhnya dari internet, setelah itu permintaan selanjutnya untuk paket itu akan datang dari server ke klien.

MELAKUKAN

Kita masih perlu mengaktifkan apt untuk hanya menggunakan cache yang diiklankan di jaringan di luar kotak dan secara default sehingga Anda tidak perlu menginstal bagian klien. Kita juga perlu memperbaiki bug yang tidak ada dalam daftar mirror 403's.


2014/01/21 14: 56: 31 | GALAT: / var / cache / squid-deb-proxy / 03: (2) Tidak ada file atau direktori FATAL: Gagal memverifikasi salah satu direktori swap, Periksa cache.log untuk detailnya. Jalankan 'squid -z' untuk membuat direktori swap jika diperlukan, atau jika menjalankan Squid untuk pertama kalinya. Squid Cache (Versi 3.3.8): Dihentikan secara tidak normal.
gebukan

1
Anda juga harus menginstal squid.
gebukan

Sepertinya Manual Config tidak berlaku lagi. Tidak ada apt.conffile di bawah /etc/apt. Namun, ada banyak file dengan pengaturan di bawah /etc/apt/apt.conf.d. Saya akan membayangkan bahwa kita sekarang harus membuat file di sana?
Alexis Wilke

Juga, sepertinya TODO telah diselesaikan. Artinya, saya tidak perlu melakukan apa pun dan cache digunakan terlebih dahulu. Meskipun bug tidak terlihat seperti itu ditandai sebagai sudah diperbaiki.
Alexis Wilke

Tentu, jika apt.conf.d adalah bagaimana hal itu dilakukan sekarang silakan kirim edit untuk jawaban ini, hai!
Jorge Castro

37

apt-cacher-ngadalah jawaban untuk saya - saya belum menemukan masalah di lingkungan bertubuh kecil (sekitar 20 klien), jadi saya kira masalah @MagicFab menyebutkan diselesaikan dalam versi saat ini (diinstal pada Ubuntu 10,04 dan 10,10). Tidak ada konfigurasi yang diperlukan untuk server, dan Anda hanya perlu menginstruksikan klien Anda untuk menggunakan server sebagai proksi pengelola paket mereka.

Server benar - benar diinstal dan dikonfigurasi dengan menginstal apt-cacher-ngpaket.

Klien perlu dikonfigurasi dengan menyiapkan proxy APT - dengan menambahkan file /etc/apt/apt.conf.d/01proxy, yang berisi ini (di mana "server Anda" adalah nama server atau alamat IP Anda):

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

Selesai - sekarang paket akan di-cache oleh server, tidak peduli sumber apa yang Anda gunakan atau versi sistem apa yang Anda miliki (misalnya server 10,04 dapat digunakan oleh klien 9,10,10,04 dan 11,04 tanpa masalah atau konflik).


Jika Anda memiliki laptop klien yang berkeliaran di antara jaringan, itu menjadi sedikit lebih kompleks - Saya telah membuat skrip yang menetapkan proxy yang tepat tergantung pada alamat jaringan; script yang dieksekusi dan di /etc/network/if-up.d/apt-proxy. Setelah menerima alamat IPv4 dari server DHCP, skrip akan mengatur server apt-cacher yang tepat untuk jaringan masing-masing:

#!/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 juga mendukung IPv6 (saya ingat beberapa solusi lain tidak).
Azendale

11
Setahun kemudian, saya telah pergi ke squid-deb-proxydan squid-deb-proxy-client: zeroconf memang berarti nol konfigurasi pada klien, yang sangat berguna bagi pengguna nomaden - dan jika server tidak merespons, klien default untuk mengunduh langsung.
Piskvor

apt-cacher-ng sucks, ini sangat buggy, hang saat mengunduh paket. misalnya saya melihatnya diunduh 150 MB hanya untuk paket 30MB
pylover

apt-cacher-ng bekerja dengan sempurna. Anda memiliki sesuatu yang sangat salah dengan sistem ANDA. Pada Precise squid-deb-proxy ingin menginstal Squid. Bersikeras itu.
Ken Sharp

Nah, itu adalah solusi terbaik untuk membuat cache berfungsi pbuilder. Ini berhasil di luar kotak. Juga sepertinya ada dukungan untuk zeroconf(pada tahun 2016), tapi saya belum (belum) bisa menggunakannya.
Alexis Wilke


6

Saya lebih suka mengatur mirror lokal menggunakan debmirrorutilitas.

Berikut ini contoh mantra.

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

Saya menjalankan ini sekitar seminggu sekali, dan menggunakannya sebagai dasar untuk membangun satu atau lebih "patchlevels". Sebagai contoh...

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

Ini membuat salinan pohon yang terhubung (menggunakan hampir nol ruang disk) yang saya bisa arahkan masing-masing server lokal saya ke dalam apt sources.list


5
Anda harus memeriksa ubumirror, ini adalah paket kenyamanan dalam arsip yang memiliki semua yang sudah diatur untuk Anda. Itu yang digunakan mirror resmi.
Jorge Castro

2

Dalam jaringan kecil (seperti rumah / kantor kecil), saya telah menggunakan apt-cacher-ng dengan hasil yang baik. Saya belum memeriksa versi terbaru, tetapi saya tahu ini membutuhkan pengaturan server dan klien yang cermat, dan ini paling cocok untuk klien yang hanya akan mendapatkan pembaruan dari jaringan lokal Anda.

Aku mencoba solusi cumi-berdasarkan atas tetapi diperlukan menerapkan beberapa solusi dan konfigurasi klien lebih dari saya ingin, sehingga tidak merasa belum seperti itu bisa menggantikan apt-cacher-ng di setup kecil.


1

apt-cacher bukan yang paling mudah untuk diatur dan tidak akan bertahan dari dist-upgrade

Instal squid-deb-proxydi server, squid-deb-proxy-clientdi klien. Menggunakan zeroconf Avahi, jadi tidak perlu konfigurasi.

Jika Anda mencari untuk men-cache lebih dari sekedar hutang, saya tidak akan repot dengan Squid. Apache Traffic Server adalah hal besar berikutnya. http://trafficserver.readthedocs.org


squid-deb-proxy bersikeras untuk menginstal squid. Dan apt-cacher sudah lama mati, apt-cacher-ng adalah tempatnya.
Ken Sharp
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.