Найкращий спосіб кешувати влучні завантаження в локальній мережі?


152

У мене є кілька машин Ubuntu вдома і досить повільне підключення до Інтернету, а іноді кілька машин потрібно оновлювати відразу (особливо під час нових релізів Ubuntu.)

Чи існує спосіб, коли лише одній з моїх машин потрібно завантажити пакунки, а інші машини можуть використовувати першу машину для отримання налагоджень? Чи передбачає це встановлення мого власного місцевого дзеркала? Або проксі-сервер? Або це можна зробити простіше?

Відповіді:


129

Я провів декілька досліджень щодо ряду рішень, і деякі розробники Ubuntu придумали конфігурацію проксі (на основі Squid) 10.04 і пізніше. Це називається squid-deb-proxy. Потрібно лише, щоб машина працювала як сервер. Великі організації зазвичай мають власні дзеркала, але для більшості людей дзеркальне відображення на вимогу достатньо.

Чому кальмар-деб-проксі?

  • Немає редагування файлів на стороні клієнта.
  • Використовуйте zeroconf, щоб клієнти були "нульовим конфігурацією"
  • Використовуйте існуюче тверде проксі-рішення замість того, щоб писати новий інструмент.
  • Легко налаштувати типового адміністратора Linux.

Налаштування сервера

На машині, яку ви хочете виконувати як сервер, встановіть інструмент за допомогою:

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

Тепер запустіть службові біти:

 sudo start squid-deb-proxy

І біти avahi (цього вам не потрібно, якщо ви перебуваєте на 12.04+):

 sudo start squid-deb-proxy-avahi

Це дозволить встановити проксі-сервер (який за замовчуванням прослуховує порт 8000) та інструменти avahi, необхідні для того, щоб сервер рекламував себе у вашій мережі через zeroconf.

Налаштування клієнта

На кожному з комп’ютерів, які ви хочете використовувати кеш (клієнти та сам сервер, щоб він також міг використовувати кеш), вам потрібно встановити клієнтський інструмент, який дасть змогу автоматично шукати сервер, дозволити їм натиснути тут :

Встановіть через програмний центр

або за допомогою командного рядка:

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

Необов’язково : для максимальної ефективності слід встановити одну машину для автоматичного завантаження оновлень, так що коли інші ваші машини потребують цього, вони вже знаходяться в кеші. Зробити це можна, перейшовши до системи-> Адміністрація-> Менеджер оновлень, потім натисніть кнопку "Налаштування ...", на вкладці "Оновлення" встановіть його для автоматичного завантаження всіх оновлень.

alt текст

Керування джерелами сторонніх організацій

За замовчуванням кеш встановлюється лише для офіційних сховищ Ubuntu. Щоб додати більше, вам потрібно додати їх до списку джерел за адресою /etc/squid-deb-proxy/mirror-dstdomain.acl. Тут ви можете додати ppa.launchpad.net або інші сервіси, які ви можете використовувати. Після внесення змін у цей файл потрібно запустити, sudo restart squid-deb-proxyщоб зміни були ефективними.

Налаштування вручну

Якщо з якихось причин ви не хочете використовувати zeroconf (з мережевих причин або будь-якого іншого), ви можете вручну встановити клієнта на використання проксі, редагуючи /etc/apt/apt.confта додавши наступну строфу (замініть 0,0.0,0 на IP-адресу сервера ):

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

Брандмауер

Якщо ви використовуєте брандмауер, avahi використовує 5353 над адресами 224.0.0.0/4 і вимагає правила, яке виглядає так:

# 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

Далі вам потрібно відкрити TCP-порт 8000 для фактичного спілкування через проксі. Щось більш-менш подібне:

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

Ці правила лише для того, щоб вам допомогти. Вони, ймовірно, не будуть відповідати вашим налаштуванням один до одного. (тобто неправильний інтерфейс, неправильні IP-адреси приватної мережі тощо)

Підтвердження це працює

Спершу оберіть журнал на сервері, щоб ви могли його переглянути: tail -F /var/log/squid-deb-proxy/access.logа потім запустіть оновлення на будь-якій машині, на якій встановлений клієнт; журнал повинен починати прокручуватися із таких записів:

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

Що означає, що клієнти бачать кеш, але його не вистачає, що очікується, оскільки він ще нічого не кешував. Кожен наступний запуск повинен відображатися як TCP_HIT. Ви можете знайти самі файли кешу кальмарів /var/cache/squid-deb-proxy.

Використовуючи його

З цього моменту всі машини у вашій мережі перевірять кеш, перш ніж потрапляти на зовнішню мережу для отримання пакетів. Якщо є нові пакети, тоді перша машина завантажить її з мережі, після чого наступні запити щодо цього пакета надійдуть від сервера до клієнтів.

РОБИТИ

Нам все ще потрібно включити apt просто використовувати рекламований кеш у мережі поза скринькою та за замовчуванням, тому вам не потрібно встановлювати клієнтську частину. Нам також потрібно виправити помилку, яку дебют 403 року не знаходиться у списку дзеркал.


21.01.2014 14: 56: 31 | ПОМИЛКА: / var / cache / squid-deb-proxy / 03: (2) Немає такого файлу чи каталогу FATAL: Не вдалося перевірити один із каталогів своп, Перевірте cache.log для деталей. Запустіть 'squid -z', щоб створити своп-каталоги, якщо це потрібно, або якщо Squid працює вперше. Кеш кальмарів (версія 3.3.8): аномально припиняється.
туп

1
Також потрібно встановити кальмари.
туп

Схоже, ручне налаштування більше не діє. Немає apt.confфайлів під /etc/apt. Однак є безліч файлів із налаштуваннями під /etc/apt/apt.conf.d. Я б міг уявити, що зараз нам слід створити файл замість цього?
Алексіс Вілке

Крім того, схоже, TODO було вирішено. Тобто мені нічого не потрібно було робити, і кеш використовувався спочатку. Хоча помилка не схожа на те, що вона була позначена як виправлена.
Алексіс Вілке

Звичайно, якщо apt.conf.d, як це робиться зараз, будь ласка, надішліть редагування цієї відповіді, привіт!
Хорхе Кастро

37

apt-cacher-ngце відповідь для мене - у невеликих середовищах (приблизно 20 клієнтів) у мене не виникало жодних проблем, тому я припускаю, що проблеми з згадками @MagicFab були вирішені в поточній версії (встановлено на Ubuntu 10.04 та 10.10). Для сервера немає необхідної конфігурації, і вам потрібно лише доручити своїм клієнтам використовувати сервер як проксі-сервер менеджера пакунків.

Сервер повністю встановлений і налаштований, встановивши apt-cacher-ngпакет.

Клієнтів потрібно налаштувати, встановивши проксі-сервер APT - додавши файл /etc/apt/apt.conf.d/01proxy, що містить це (де "ваш-apt-сервер" - ім'я або IP-адреса вашого сервера):

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

Готово - тепер пакети будуть кешовані сервером, незалежно від того, якими джерелами ви користуєтесь чи якою версією системи у вас є (наприклад, 10.04-сервер може використовуватись клієнтами 9.10.10.04 та 11.04 без проблем і конфліктів).


Якщо у вас є клієнтські ноутбуки, котрі бродять між мережами, це стає трохи складніше - я створив сценарій, який встановлює правильний проксі залежно від адреси мережі; сценарій виконується і в /etc/network/if-up.d/apt-proxy. Після отримання адреси IPv4 від сервера DHCP, сценарій встановить правильний сервер apt-cacher для відповідної мережі:

#!/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 також підтримує IPv6 (я пам'ятаю, що деякі інші рішення цього не зробили).
Azendale

11
Через рік, я перейшов до squid-deb-proxyі squid-deb-proxy-client: ZeroConf дійсно означає нульову конфігурацію на клієнтів, що вкрай корисно для кочових користувачів - і в разі , якщо сервер не відповідає, клієнт по замовчуванням для прямого завантаження.
Пісквор

apt-cacher-ng смокче, це verry buggy, висить на завантаженні пакетів. Наприклад, я бачив, що він завантажив 150 МБ лише за 30 МБ пакету
піловер

apt-cacher-ng прекрасно працює. У вас із системою щось дуже не так. На Precision squid-deb-proxy хоче встановити Squid. На цьому наполягає.
Кен Шарп

Тепер це найкраще рішення для роботи з кешем pbuilder. Це вийшло з коробки. Крім того, схоже, є підтримка zeroconf(в 2016 році), але я не міг (поки) змусити її працювати над своїм завданням.
Алексіс Вілке


6

Я дуже вважаю за краще встановити місцеве дзеркало за допомогою debmirrorутиліти.

Ось приклад заповіту.

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

Я запускаю це приблизно раз на тиждень і використовую його як основу для встановлення одного або декількох "патчерів". Наприклад...

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

Це створює пов'язану копію дерева (використовує майже нульовий простір на диску), до якого я можу вказати кожен із моїх локальних серверів у apt source.list


5
Ви повинні перевірити ubumirror, це зручний пакет в архіві, в якому є все, що вже налаштовано для вас. Це те, чим користуються офіційні дзеркала.
Хорхе Кастро

2

У невеликих мережах (таких як домашній / маленький офіс) я використовував apt-cacher-ng з хорошими результатами. Я не перевіряв останні версії, але знаю, що вона потребує ретельного налаштування як сервера, так і клієнтів, і це найкраще підходить для клієнтів, які отримуватимуть оновлення лише з вашої локальної мережі.

Я спробував кальмар на основі рішення вище , але він вимагає застосувань кілька обхідного шляху і більше конфігурації клієнта , ніж я хотів би, щоб він не відчував себе ще , як він може замінити схильний-Cacher-нг в невеликих установках.


1

apt-cacher не було найпростішим у налаштуванні, і воно не переживе дистрибутив.

Встановити squid-deb-proxyна сервер, squid-deb-proxy-clientна клієнтів. Він використовує zeroconf Avahi, тому ніяка конфігурація не потрібна.

Якщо ви хочете кешувати більше, ніж просто налагодження, я б не переймався Squid. Наступна велика річ - Apache Traffic Server. http://trafficserver.readthedocs.org


squid-deb-proxy наполягає на встановленні кальмарів. І apt-cacher давно мертвий, apt-cacher-ng є там, де він є.
Кен Шарп
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.