Кэширование (проксирование) репозиториев экономит время и трафик при установке одних и тех же пакетов на множество компьютеров. Это полезно в первую очередь для организаций.

Кэширование работает по тому же принципу, что и обычный прокси сервер: сначала никакого контента на нём нет, при первом запросе клиента кэшер скачивает файл из интернета, отдаёт его клиенту, а копию сохраняет у себя, при следующих запросах кэшер не обращается в интернет и просто отдаёт сохранённый файл. От обычного squid-а кэшер пакетов отличается своей узкой специализацией: он знает про версии deb-пакетов, про отличия индексного файла от deb-пакета, ну и всё такое.

Плюсы кэширования по сравнению с зеркалированием:

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

Минусы:

  • нет интернета - нет пакетов :(
  • пользователю, который первым запросил пакет, придётся подождать пока он скачается

Кэшеры бывают разные:

  • apt-cacher - требует дополнительной установки и настройки веб-сервера
  • apt-cacher-ng - быстро устанавливается и настраивается, рассмотрим его прямо сейчас

Установка apt-cacher-ng

apt install apt-cacher-ng

Вот, собственно, и всё. Конечно, можно донастроить его под себя, скажем, поменять порт (по дефолту 3142) или указать вышестоящий прокси (если сервер с кэшером выходит в интернет через прокси). Конфиг снабжён подробными комментариями, разобраться можно. Но в общем случае сервер настраивать не приходится.

Единственная необходимая настройка - указать клиентам адрес нашего нового кэшера. На клиенте открываем конфиг:

nano /etc/apt/apt.conf.d/7proxy

и пишем туда

Acquire::http::Proxy "http://packages.example.com:3142";

(конечно, packages.example.com меняем на имя своего сервера)

Возможна проблема: при попытке обновить индексы (apt update) на клиенте может возникнуть ошибка «Bad redirection (path)», при этом в репозитории файл есть, кэшер его скачивает и сохраняет у себя, но клиенту не отдаёт. Например, у меня такое было с репозиториями Ceph. Если браузером пройти по проблемному адресу (в моём случае это был http://ceph.com/…), то можно обнаружить редирект на другой адрес (у меня http://download.ceph.com/…). Проблема решается заменой в sources.list исходного адреса на адрес после редиректа (я у себя заменил ceph.com на download.ceph.com). Проблема странная и возникает не всегда.

Можно использовать не только для Ubuntu, но и для Debian. А по некоторым признакам, и для CentOS, Gentoo и других (не проверял).

Ссылки