Многим в 2019-м году кажется странной необходимость кэширования обращений к серверам обновлений операционных систем, ведь мощные сервера и быстрый интернет кажутся уже чем-то обыденным, но на самом деле всё не так однозначно. Даже мощные сервера с быстрыми SSD-накопителями имеют ограничение по скорости отдачи, а быстрый и безлимитный интернет есть только в больших городах, да и в них он доступен далеко не всем жителям. До сих пор очень много домохозяйств использует медленный и/или небезлимитный интернет.
Интернет для юридических лиц стоит в десятки раз дороже чем для физических и при большом парке машин сервер обновлений в локальной сети позволит экономить заметные деньги и ускорить установку обновлений. Единственный момент, который иногда смущает администраторов, это мобильные сотрудники, которые не всегда работают в офисе. Привязывать их к серверу обновлений в офисной сети значит лишить их возможности получения обновлений в командировках. К счастью для систем на основе Debian/Ubuntu есть достаточно красивое и удобное решение, которое и будет рассмотрено дальше.
Собственно в основе решения достаточно известный сервер Apt-Cacher NG, являющийся прокси-сервером, "заточенным" под работу debian-репозиториями. Установим его:
apt install apt-cacher-ng
По умолчанию apt-cacher-ng "слушает" на всех доступных интерфейсах на порту 3142. Если необходимо "привязать" сервис только к определённым интерфейсам надо в файле "/etc/apt-cacher-ng/acng.conf" указать параметр BindAddress:
BindAddress: 127.0.0.1 192.168.2.1
Следующий важный момент: apt-cacher-ng может работать в двух режимах:
- Режим веб-сервера, который указывается на клиентах как адрес репозитория;
- Режим прокси-сервера, который указывается на клиентах в настройках прокси;
Первый режим нам не подходит, так как динамически менять адреса репозиториев мы не можем, а во втором режиме есть ограничение на работу с репозиториями, доступными по HTTPS. По умолчанию доступ к таким репозиториям запрещён вообще. Можно указать списки доступа или разрешить весь HTTPS-трафик. Последнее не рекомендуется, поскольку может быть использовано для злоупотреблений со стороны пользователей.
Чтобы указать списки доменов, к которым разрешён доступ по HTTPS создадим файл "/etc/apt-cacher-ng/zzz_override.conf" следующего содержания:
PassThroughPattern: ^download\.sublimetext\.com:443$ PassThroughPattern: ^desktop\.userapi\.com:443$ PassThroughPattern: ^deb\.nodesource\.com:443$ PassThroughPattern: ^repo\.skype\.com:443$ PassThroughPattern: ^deb\.opera\.com:443$ PassThroughPattern: ^fman\.io:443$ PassThroughPattern: ^updates\.signal\.org:443$ PassThroughPattern: ^dl\.winehq\.org:443$ PassThroughPattern: ^download\.01\.org:443$ PassThroughPattern: ^ppa\.launchpad\.net:443$ PassThroughPattern: ^packages\.microsoft\.com:443$ PassThroughPattern: ^download\.opensuse\.org:443$
Разумеется список стоит скорректировать в соответствии с потребностями пользователей. Закончив настройку нужно перезапустить сервис:
systemctl restart apt-cacher-ng.service
На этом настройка apt-cacher-ng закончена. Теперь осталось "подружить" клиентские машины с нашим сервисом. Здесь нам поможет Zeroconf - набор технологий для автоматического конфигурирования сетей и обнаружения сервисов. На сервере необходимо установить демон Avahi, дополнительная конфигурация для которого уже есть в пакете apt-cacher-ng, потому специально ничего настраивать не надо:
apt install avahi-daemon
На этом конфигурация сервера сервера окончательно завершена. Осталось на все клиентские машины установить пакет squid-deb-proxy-client:
apt install squid-deb-proxy-client
squid-deb-proxy-client содержит в себе утилиту автоматического определения прокси для пакетного менеджера APT. Используя zeroconf ищет в локальной сети apt-cacher-ng и в случае успеха направляет http- и https-запросы от APT через него, в противном случае запросы пойдут напрямую. Таким образом в сети с apt-cacher-ng пользватели будут получать обновления через него, а в других сетях напрямую.
Статистику apt-cacher-ng можно смотреть на странице "http://<ВАШ_СЕРВЕР>:3142/acng-report.html". На той же странице можно и управлять сервисом, например запускать очистку для удаления уже неактуальных пакетов.
На этом всё. Приятной работы!