Лучший способ кэширования apt-загрузок в локальной сети?

144

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

Есть ли способ, когда только одна из моих машин должна загружать пакеты, а другие машины могут использовать первую машину для получения deb? Включает ли это создание собственного локального зеркала? Или прокси-сервер? Или может быть проще?

    
задан Ken Simon 03.09.2010 в 01:34
источник

6 ответов

125

Я провел несколько исследований в кучу решений, а некоторые разработчики Ubuntu разработали конфигурацию прокси (на основе Squid) для 10.04 и более поздних версий. Он называется squid-deb-proxy . Это требует только того, чтобы машина работала как сервер. Крупные организации обычно запускают свои собственные зеркала, но для большинства людей зеркальное отображение по требованию достаточно.

Почему squid-deb-proxy?

  • Нет редактирования файлов на стороне клиента.
  • Используйте zeroconf, чтобы клиенты были «zero config»
  • Используйте существующее твердое прокси-решение вместо написания нового инструмента.
  • Простота настройки для обычного администратора 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

Необязательный . Для максимальной эффективности вы должны настроить один компьютер на автоматическую загрузку обновлений, чтобы, когда ваши другие компьютеры нуждаются в нем, он уже находится в кеше. Вы можете сделать это, перейдя в System- & gt; Administration- & gt; Update Manager, затем нажмите кнопку «Настройки ...», на вкладке «Обновление» она автоматически загрузит все обновления.

Кэширование сторонних источников

По умолчанию кеш настроен только для кэширования официальных репозиториев 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"; };
 };

Firewall

Если вы используете брандмауэр, 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. Вы можете сами найти файлы кэша squid в /var/cache/squid-deb-proxy .

Использование

С этого момента все компьютеры в вашей сети будут проверять кеш, прежде чем удалять внешнюю сеть для извлечения пакетов. Если есть новые пакеты, то первая машина загрузит их из сети, после чего последующие запросы на этот пакет поступят с сервера на клиентов.

TODO

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

    
ответ дан Jorge Castro 03.09.2010 в 01:52
источник
36

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
    
ответ дан Piskvor 12.02.2011 в 11:45
источник
6

Одним из самых простых решений является установка apt-proxy.

Прочитайте здесь документацию ubuntu: Ссылка

    
ответ дан sandaru1 03.09.2010 в 01:51
источник
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 sources.list

    
ответ дан delimiter 08.09.2010 в 17:07
источник
2

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

Я попробовал решение на основе кальмара выше, но для этого требовалось применить несколько обходных решений и больше конфигурации клиента, чем я хотел бы, поэтому он не чувствует еще , чтобы он мог заменить apt-cacher- ng в небольших настройках.

    
ответ дан MagicFab 29.11.2010 в 03:35
источник
1

apt-cacher не был самым легким в настройке, и он не переживет dist-upgrade.

Установите squid-deb-proxy на сервер, squid-deb-proxy-client на клиентах. Он использует zeroconf Avahi, поэтому настройка не требуется.

Если вы хотите кэшировать больше, чем просто debs, я бы не стал беспокоиться с Squid. Apache Traffic Server - следующая большая вещь. Ссылка

    
ответ дан caduceus 19.12.2013 в 13:19
источник

Ознакомьтесь с другими вопросами по меткам