пятница, 18 сентября 2009 г.

Как настроить кэш репозитория с помощью apt-cacher

Перевод статьи: How To Set up a repository cache with apt-cacher

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

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

В этом случае имеется один компьютер, который называется repository-cache (кэш репозитория), этот компьютер будет работать в качестве кэша репозитория, в то время как остальные компьютеры в вашей сети будут пользоваться им, как обычным репозиторием.

1. Приступим

Как обычно, вам нужно установить необходимые пакеты на первом компьютере. Поэтому введите в терминале:
$ sudo apt-get install apt-cacher
Когда команда будет выполнена, пора перейти к файлу настройки /etc/apt-cacher/apt-cacher.conf

2. Настройка Apt-Cacher

2.1. apt-cacher.conf

И так, откроем главный файл конфигурации apt-cacher'а: /etc/apt-cacher/apt-cacher.conf и начнём редактировать его в соответствии с вашими настройками.

По умолчанию apt-cacher ожидает подключений на порту 3142. Вы можете поменять это значение на то, которое вам нужно.

allowed_hosts: по умолчанию все перечисленные здесь узлы имеют право использовать кэш репозитория. Вы можете изменить это значение, если вы хотите предоставить доступ только определённым узлам. В моём случае, я хочу разрешить доступ моей локальной сети 192.168.1.0/24 и локальному узлу (localhost - 127.0.0.1 и 127.0.1.1 на системах с ubuntu), поэтому я меняю значение следующим образом:
allowed_hosts=192.168.1.0/24, 127.0.1.1
Поскольку 127.0.0.1 разрешён всегда, не обязательно добавлять адрес 127.0.0.1.

generate_reports: Эта директива заставляет apt-cacher создавать ежедневный отчёт по эффективности вашего кэша. По умолчанию это 1, если вы хотите отключить его, установите его в 0.

path_map: Это любопытная директива. Здесь вы можете определить различные псевдонимы для различных узлов репозиториев. На моём компьютере с ubuntu edgy, моя директива path_map выглядит следующим образом:
path_map = debuntu repository.debuntu.org; ubuntu archive.ubuntu.com/ubuntu; ubuntu-updates archive.ubuntu.com/ubuntu; ubuntu-security security.ubuntu.com/ubuntu
Позвольте мне немного пояснить. Здесь я создал отображения в следующие имена:
  • debuntu в узел repository.debuntu.org
  • ubuntuand ubuntu-updates в узел archive.ubuntu.com/ubuntu
  • и ubuntu-security в узел security.ubuntu.com
Теперь, чтобы получить доступ к определённому репозиторию, нам требуется просто добавить псевдоним к нашему серверу с кешем репозиториев, например: компьютер_с_кэшем_репозитория:порт/псевдоним

Например, мы можем получить доступ к репозиторию debuntu через http://repository-cache:3142/debuntu и к репозиторию ubuntu secutiry через http://repository-cache:3142/ubuntu-security.

2.2. Включение apt-cacher'а

Чтобы запустить apt-cacher, его нужно включить из файла /etc/default/apt-cacher. Откроем файл /etc/default/apt-cacher и установим AUTOSTART в 1:
AUTOSTART=1
Теперь перезапустим apt-cacher:
$ sudo /etc/init.d/apt-cacher restart
Теперь apt-cacher запущен, время исправить файлы всех наших клиентов /etc/apt/sources.list на каждом узле в сети, где мы хотим использовать компьютер с кэшем репозитория.

3. Настройка файла sources.list клиентов и серверов

Настало время настроить на клиентских узлах файлы источников apt: /etc/apt/sources.list. Важно использовать кэш репозитория ткаже и на самом сервере, таким образом любые обновления, выполненные сервером, будут заполнять кэш.

Исходный /etc/apt/sources.list:
#репозиторий debuntu
deb http://repository.debuntu.org edgy multiverse
deb-src http://repository.debuntu.org edgy multiverse

#главный репозиторий ubuntu
deb http://archive.ubuntu.com/ubuntu/ edgy main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ edgy main restricted universe multiverse

#репозиторий обновлений ubuntu
deb http://archive.ubuntu.com/ubuntu/ edgy-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ edgy-updates main restricted universe multiverse

#репозиторий обновлений безопасности ubuntu
deb http://security.ubuntu.com/ubuntu edgy-security main restricted universe multiverse
deb-src http://security.ubuntu.com/ubuntu edgy-security main restricted universe multiverse
Чтобы использовать наш кэш репозитория, эти записи необходимо заменить на:
#репозиторий debuntu
deb http://repository-cache:3142/debuntu edgy multiverse
deb-src http://repository-cache:3142/debuntu edgy multiverse

#главный репозиторий ubuntu
deb http://repository-cache:3142/ubuntu edgy main restricted universe multiverse
deb-src http://repository-cache:3142/ubuntu edgy main restricted universe multiverse

#репозиторий обновлений ubuntu
deb http://repository-cache:3142/ubuntu-updates edgy-updates main restricted universe multiverse
deb-src http://repository-cache:3142/ubuntu-updates edgy-updates main restricted universe multiverse

#репозиторий обновлений безопасности ubuntu
deb http://repository-cache:3142/ubuntu-security edgy-security main restricted universe multiverse
deb-src http://repository-cache:3142/ubuntu-security edgy-security main restricted universe multiverse
Классно, теперь чтобы каждый каждый узел получал пакеты .deb из нашего репозитория, нужно запустить:
$ sudo apt-get update
на каждом узле.

4. Импорт существующих пакетов из /var/cache/apt/archives/ в репозиторий apt-cacher

Может случиться, что ваш сервер уже имеет большое количество пакетов, находящихся в локальном кэше репозитория: /var/cache/apt/archives/. apt-cacher содержит инструмент, позволяющий имортировать эти файлы в репозиторий apt-cacher'а.

Это большое количество полезных сценариев можно найти в каталоге /usr/share/apt-cacher/. Интересующий нас называется apt-cacher-import.pl. Для импорта файлов .deb из каталога /var/cache/apt/archives в репозиторий apt-cacher запустите:
$ sudo /usr/share/apt-cacher/apt-cacher-import.pl /var/cache/apt/archives
Его нужно запускать от имени пользователя root или файлы .deb могут не скопироваться в кэш репозитория.

Теперь каталог /var/cache/apt-cacher/packages/ должен пополниться целой кучей пакетов.

5. Получение отчётов об использовании вашего кэша репозитория

Если вы оставили значение директивы generate_reports равным 1, apt-cacher будет составлять отчёты по использованию кэша каждый день.

Вы можете получить к ним доступ по адресу: http://repository-cache:3142/report

Если вам нужно перегенерировать отчёт, запустите:
$ sudo /usr/share/apt-cacher/apt-cacher-report.pl
6. Заключение

apt-cacher - это простой и эффективный пакет, который одновременно экономит ваше время и пропускную способность канала при использовании нескольких компьютеров, работающих на одинаковом дистрибутиве, как это бывает в домашней сети или в компании.

4 комментария:

Анонимный комментирует...

Вы как-то обошли проблему с http_proxy?
https://bugs.launchpad.net/ubuntu/+source/apt/+bug/365570

morbo комментирует...

Честно говоря, не встречался. Не было необходимости обновлять кэш через прокси.

Alexis2k комментирует...

а разве это проблема?
пишите
http_proxy http://user:password@ip_proxy:port_proxy
https_proxy https://user:password@ip_proxy:port_proxy
ftp_proxy ftp://user:password@ip_proxy:port_proxy
в /etc/environment и будет Вам Щастье (во всяком случае у мну работает)

morbo комментирует...

>а разве это проблема?
>пишите
>http_proxy >http://user:password@ip_proxy:port_proxy
>https_proxy >https://user:password@ip_proxy:port_proxy
>ftp_proxy >ftp://user:password@ip_proxy:port_proxy
>в /etc/environment и будет Вам >Щастье (во всяком случае у мну >работает)

Это разные кэши. По эффективности apt-cacher сделает любой прокси, поскольку он специализирован и знает, когда скачивать пакет, а когда брать его из кэша. Как вам например задача закэшировать средствами squid пакет размером в несколько (5-6) сотен мегабайт?