Предыстория: "apt-proxy", который использовался ранее в качестве корпоративного сервера обновлений для компьютеров под управлением ОС Debian, достал своей некачественной работой; в любой момент может зависнуть на загрузке "заголовков" и возобновить работу только спустя час-другой. В домашних условиях подобные задержки могли бы восприниматься даже положительно, вроде как дух приучают не привязываться к делам суетным и терпеливым призывают быть; но в рабочее время, когда план действий утверждён на часы вперёд, это неприемлемо.
Задача: найти замену не оправдавшему надежды "apt-proxy". Собственно, искать не пришлось. Давно ясно было, что единственный кандидат на роль прокси-сервера для обновления ПО в не особо большом парке (не более сотни Debian-машин) - "apt-cacher-ng". Предыдущая версия этой утилиты, "apt-cacher" (написанная на Perl), мною в своё время даже не рассматривалась, в силу причин, о которых не здесь и не сейчас, а вот её новая "генерация" - подтверждения моего наблюдения, даже за мою пока коротенькую жизнь, в том, что люди умнеют и создают всё более и более совершенные вещи и ПО.
Устанавливаем "apt-cacher-ng":
# aptitude install apt-cacher-ng
Приводим конфигурационный файл "apt-cacher-ng" к следующему виду:
# cat /etc/apt-cacher-ng/acng.conf
# Указываем место хранилищу загруженного добра
#
CacheDir: /var/cache/apt-cacher-ng
# Указываем сетевой адрес, который будет прослушивать сервер обновлений (если не указать ничего, что прослушиваться будут все доступные интерфейсы)
#
# BindAddress: localhost
# Указываем TCP порт, который будет прослушиваться нашим сервером
#
Port:3142
# Указываем адрес локального "UNIX socket", через который можно обращаться к серверу
#
SocketPath:/var/run/apt-cacher-ng/socket
# Указываем адрес pid-файла
#
PidFile: /var/run/apt-cacher-ng/pid
# Задаём условное имя страницы, на запрос которой сервер будет отдавать статистику работы (например, если клиент запросит: http://apt.local:3142/report.html - то будет отработан шаблон "/etc/apt-cacher-ng/report.html"
#
ReportPage: report.html
# Задаём срок (в сутках) хранения пакетов, которые уже не фигурируют в индексных файлах обновлений (грубо говоря, заменены более новыми). Если основная цель сервера - выступать именно в роли прокси, по минимуму используя дисковое пространство, то параметр можно выставить в районе одной недели. В мои цели входит как можно более длительное хранение загруженных данных, на тот случай, если они вдруг понадобятся (что на практике бывало, и не раз) - потому я велю серверу хранить файлы в течении года
#
ExTreshold: 365
# Здесь можно задать адрес обычного HTTP-прокси, через который наш сервер обновлений будет работать
#
# proxy: http://username:proxypassword@proxy.example.net:3128
# Указываем место расположения журнала событий
#
LogDir: /var/log/apt-cacher-ng
# Определяемся с уровнем детализации журнала событий сервера
#
VerboseLog: 1
#
CacheDir: /var/cache/apt-cacher-ng
# Указываем сетевой адрес, который будет прослушивать сервер обновлений (если не указать ничего, что прослушиваться будут все доступные интерфейсы)
#
# BindAddress: localhost
# Указываем TCP порт, который будет прослушиваться нашим сервером
#
Port:3142
# Указываем адрес локального "UNIX socket", через который можно обращаться к серверу
#
SocketPath:/var/run/apt-cacher-ng/socket
# Указываем адрес pid-файла
#
PidFile: /var/run/apt-cacher-ng/pid
# Задаём условное имя страницы, на запрос которой сервер будет отдавать статистику работы (например, если клиент запросит: http://apt.local:3142/report.html - то будет отработан шаблон "/etc/apt-cacher-ng/report.html"
#
ReportPage: report.html
# Задаём срок (в сутках) хранения пакетов, которые уже не фигурируют в индексных файлах обновлений (грубо говоря, заменены более новыми). Если основная цель сервера - выступать именно в роли прокси, по минимуму используя дисковое пространство, то параметр можно выставить в районе одной недели. В мои цели входит как можно более длительное хранение загруженных данных, на тот случай, если они вдруг понадобятся (что на практике бывало, и не раз) - потому я велю серверу хранить файлы в течении года
#
ExTreshold: 365
# Здесь можно задать адрес обычного HTTP-прокси, через который наш сервер обновлений будет работать
#
# proxy: http://username:proxypassword@proxy.example.net:3128
# Указываем место расположения журнала событий
#
LogDir: /var/log/apt-cacher-ng
# Определяемся с уровнем детализации журнала событий сервера
#
VerboseLog: 1
В целом, с конфигурированием сервера - всё. Перезапускаем его и пользуемся:
# /etc/init.d/apt-cacher-ng restart
Ориентирование клиентов на сервер обновлений элементарно. Просто указываем подсистеме APT адрес прокси-сервера. Например, следующим образом.
Создаём конфигурационный файл (имя произвольное; принцип формирования подобен тому, как это делается в "/etc/rc*.d/"), который будет в общем порядке прочитан подсистемой APT при исполнении ею своих обязанностей:
# touch /etc/apt/apt.conf.d/01proxy
В файл вставляем строку указания на используемый прокси-сервер:
Acquire::http { Proxy "http://apt.local:3142"; };
Теперь на стороне клиента:
# aptitude update
# aptitude full-upgrade
# aptitude full-upgrade