Кэширование (проксирование) репозиториев экономит время и трафик при установке одних и тех же пакетов на множество компьютеров. Это полезно в первую очередь для организаций.
Кэширование работает по тому же принципу, что и обычный прокси сервер: сначала никакого контента на нём нет, при первом запросе клиента кэшер скачивает файл из интернета, отдаёт его клиенту, а копию сохраняет у себя, при следующих запросах кэшер не обращается в интернет и просто отдаёт сохранённый файл. От обычного 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 и других (не проверял).
Ссылки
- создание зеркала репозитория - если всё-таки нужно зеркало