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


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

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


147
2017-09-02 23:34


происхождения




ответы:


Я провел некоторое исследование в виде множества решений, а некоторые разработчики 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.

Конфигурация клиента

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

Install via the software center

или через командную строку:

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

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

alt text

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

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


126
2017-09-02 23:52



2014/01/21 14: 56: 31 | ОШИБКА: / var / cache / squid-deb-proxy / 03: (2) Отсутствует такой файл или каталог FATAL: Не удалось проверить один из каталогов подкачки, проверьте кеш-лист. Запустите squid -z для создания каталогов подкачки, если это необходимо, или если запущен Squid в первый раз. Squid Cache (версия 3.3.8): завершено ненормально. - thumper
Вам также нужно установить кальмара. - thumper
Похоже, Ручная настройка больше не действует. Здесь нет apt.conf файл под /etc/apt, Тем не менее, существует множество файлов с настройками в /etc/apt/apt.conf.d, Я бы предположил, что теперь мы должны создать файл там? - Alexis Wilke
Кроме того, похоже, что TODO был разрешен. То есть мне не нужно было ничего делать, и сначала использовался кеш. Хотя ошибка не похожа на то, что она была отмечена как исправленная. - Alexis Wilke
Конечно, если apt.conf.d - вот как это делается сейчас, пожалуйста, отправьте отредактировать этот ответ, ура! - Jorge Castro


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

37
2018-02-12 10:45



apt-cacher-ng также поддерживает IPv6 (я помню, что некоторые другие решения не выполнялись). - Azendale
Год спустя я перешел к squid-deb-proxy а также squid-deb-proxy-client: zeroconf действительно означает нулевую конфигурацию на клиентах, что чрезвычайно полезно для кочевых пользователей - и в случае, если сервер не отвечает, клиенту по умолчанию предоставляется прямая загрузка. - Piskvor
apt-cacher-ng сосет, это ужасно багги, зависает при загрузке пакетов. например, я видел, что он загрузил 150 МБ только для 30 МБ пакета - pylover
apt-cacher-ng отлично работает. У вас что-то очень плохое в вашей системе. На Precise squid-deb-proxy хочет установить Squid. Настаивает на этом. - Ken Sharp
Теперь это лучшее решение для получения кеша, работающего с pbuilder, Это сработало из коробки. Также похоже, что есть поддержка для zeroconf (в 2016 году), но я не мог (пока) получить это, чтобы работать на моем конце. - Alexis Wilke


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

Читайте здесь документацию ubuntu: https://help.ubuntu.com/community/AptProxy


6
2017-09-02 23:51





Я предпочитаю настраивать локальное зеркало, используя 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


6
2017-09-08 15:07



Вы должны проверить ubumirror, это удобный пакет в архиве, в котором есть все, что уже настроено для вас. Это то, что используют официальные зеркала. - Jorge Castro


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

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


2
2017-11-29 02:35





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

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

Если вы ищете кеш больше, чем просто debs, я бы не стал беспокоиться с Squid. Apache Traffic Server - следующая большая вещь. http://trafficserver.readthedocs.org


1
2017-12-19 12:19



squid-deb-proxy настаивает на установке кальмара. И apt-cacher давно мертв, apt-cacher-ng, где он находится. - Ken Sharp