Зачастую при развёртывании сети машин на Ubuntu возникает проблема с организацией доступа в интернет с целью установки новых программ из стандартных репозиториев. Например, когда доступен лишь очень узкий канал в интернет или траффик не является безлимитным. К счастью, принцип организации пакетной системы Ubuntu позволяет очень гибко управлять тем, что и откуда качать с использованием штатных средств управления пакетами. В частности, вы можете создать локальную копию нужных вам интернет-репозиториев Ubuntu и подключить её как основной источник приложений в вашу локальную сеть. Таким образом все компьютеры в вашей сети не будут требовать соединения с интернетом для установки новых программ и обновлений. И при этом, что самое важное, сохранится весь функционал пакетных менеджеров.

В этой статье я расскажу как создать локальную копию репозитория с помощью утилиты apt-mirror. Это простая и удобная утилита для создания локальных копий репозиториев Ubuntu, использующая такой же синтаксис, как и в файле /etc/apt/sources.list, в котором указываются все репозитории для Ubuntu.

Всё, что вам потребуется — это компьютер с установленной Ubuntu и безлимитным доступом к интернету.

Локальная копия официального репозитория Ubuntu 10.10 только для одной архитектуры i386 занимает 36.2 GiB, учтите это.

Итак, на компьютере, подключённом к интернету и с установленной Ubuntu, ставим пакет apt-mirror через любое средство установки пакетов, например, командой

sudo apt-get install apt-mirror

Далее необходимо определиться, в какой каталог складывать копию репозитория. Будем считать для примера, что копия репозитория будет складываться в папку /media/data/ubuntu-repo/, которая находится на отдельном винчестере, примонтированном в каталог /media/data. Конечно нужно убедиться, что в указанной папке достаточно места для размещения полной копии нужных вам репозиториев.

Настройка apt-mirror


Всё, что осталось сделать, это отредактировать конфигурационный файл apt-mirror, добавив туда нужные опции и нужные репозитории, и запустить сам процесс зеркалирования. Этот файл называется /etc/apt/mirror.list. Ниже представлено комментированное его содержимое для случая создания копии официальных репозиториев Ubuntu 10.10 для архитектуры i386 в папке /media/data/ubuntu-repo/:

############# Опции настройки apt-mirror ##################
# Директория, в которую складываем зеркало
set base_path    /media/data/ubuntu-repo
# Далее идут служебные каталоги, их значения обычно менять не надо.
# Первый каталог - это собственно непосредственно файлы зеркала.
#set mirror_path  $base_path/mirror
# Временные файлы apt-mirror
#set skel_path    $base_path/skel
# Логи выполнения apt-mirror
#set var_path     $base_path/var
# Архитектура, для которой создаём зеркало. По умолчанию - архитектура системы, на которой работает apt-mirror.
set defaultarch  i386
# Служебные параметры. Лучше не менять.
set nthreads     20
set _tilde 0

############# Репозитории ##############

# Стандартные репозитории Canonical для Ubuntu 10.10
deb http://archive.ubuntu.com/ubuntu maverick main restricted
deb http://archive.ubuntu.com/ubuntu maverick-updates main restricted
deb http://archive.ubuntu.com/ubuntu maverick universe
deb http://archive.ubuntu.com/ubuntu maverick-updates universe
deb http://archive.ubuntu.com/ubuntu maverick multiverse
deb http://archive.ubuntu.com/ubuntu maverick-updates multiverse
deb http://archive.ubuntu.com/ubuntu maverick-security main restricted
deb http://archive.ubuntu.com/ubuntu maverick-security universe
deb http://archive.ubuntu.com/ubuntu maverick-security multiverse

# Эта строчка сообщает apt-mirror, что более ненужные файлы из основного репозитория ubuntu
# (например, устаревшие версии пакетов, отсутствующие в индексах) можно удалить из локальной копии,
# тем самым освободив место.
clean http://archive.ubuntu.com/ubuntu

Теперь осталось запустить apt-mirror и дождаться окончания его выполнения. Перед запуском необходимо убедиться, что основной каталог /media/data/ubuntu-repo/, а так же все вспомогательные каталоги mirror, var и skel внутри него, существуют и доступны для записи пользователю apt-mirror. Создать все эти каталоги можно командами

mkdir -p /media/data/ubuntu-repo/
mkdir -p /media/data/ubuntu-repo/{mirror,var,skel}

Присвоить нужные права проще всего выставив владельцем этих каталогов пользователя apt-mirror:

sudo chown -R apt-mirror /media/data/ubuntu-repo/

После этого можно запустить apt-mirror командой

sudo -u apt-mirror apt-mirror

После загрузки индексов apt-mirror сообщит вам, какой объём пакетов будет загружен:

# sudo -u apt-mirror apt-mirror
Downloading 55 index files using 20 threads...
Begin time: Tue Dec 21 14:53:48 2010
[20]... [19]... [18]... [17]... [16]... [15]...
End time: Tue Dec 21 14:54:06 2010

Proceed indexes: [PPPPPPPPPP]

36.2 GiB will be downloaded into archive.
Downloading 33541 archive files using 20 threads...

Вам останется только дождаться завершения скачивания.

Автоматическое обновление локальной копии репозитория


Можно настроить автоматическое обновление локальной ко��ии репозиториев с помощью заданий cron. Для этого просто раскомментируйте нужную строчку с заданием в файле /etc/cron.d/apt-mirror:

#
# Regular cron jobs for the apt-mirror package
#
0 4    * * *   apt-mirror      /usr/bin/apt-mirror > /var/spool/apt-mirror/var/cron.log

Можете изменить время выполнения задания (по умолчанию — в 04:00 каждый день).

Дополнительные возможности apt-mirror


При использовании схемы, описанной выше, apt-mirror скопирует из указанных репозиториев только пакеты. Однако кроме этого в репозиториях Ubuntu содержится ещё достаточно много полезных данных, например, сетевые установщики. Всё это при использовании инструкции "clean" для этих репозиториев будет удалено, поскольку не содержится в актуальных индексах. Чтобы принудительно не очищать некоторые директории можно указать в файле mirror.list инструкцию "skip-clean" с нужным адресом. Например:

# Пропуск указанных каталогов при очистке
skip-clean http://archive.ubuntu.com/ubuntu/dists/lucid/main/installer-i386/
skip-clean http://archive.ubuntu.com/ubuntu/dists/lucid/main/installer-amd64/

Можно указывать архитектуру непосредственно в APT строке репозитория, например вот так:

# Загрузка только amd64 пакетов из указанного репозитория
deb-amd64 http://archive.ubuntu.com/ubuntu maverick main restricted

Кроме того, можно подключаться к HTTP и FTP хостам, требующим авторизацию. Для этого необходимо в адресе указать имя, пароль и по необходимости — порт:

# Нестандартный порт с авторизацией
deb http://user:pass@example.foo.org:8080/ubuntu maverick main restricted

Дальнейшая работа с локальной копией репозитория


После завершения работы локальные копии всех репозиториев, указанных в mirror.list, окажутся в папках mirror/имя_репозитория в указанной основной рабочей папке apt-mirror. Таким образом копия репозитория, который был задан в mirror.list как

deb http://archive.ubuntu.com/ubuntu maverick main restricted

окажется в нашем случае в папке /media/data/ubuntu-repo/mirror/archive.ubuntu.com/ubuntu. И именно эту папку нужно будет подключать как репозиторий к другим системам с помощью HTTP или FTP сервера, или же непосредственно через физическое подключение файлового носителя.

Для подключения с помощью HTTP сервера можно установить Apache:

sudo aptitude install apache2

Затем сделать симлинк /var/www/ubuntu, указывающий на вашу папку с репозиторием:

sudo ln -s /media/data/ubuntu-repo/mirror/archive.ubuntu.com/ubuntu /var/www/ubuntu

После этого можно будет подключить этот компьютер как источник приложений ко всем остальным в сети, указав на них вот такой репозиторий:

deb http://адрес_вашего_компьютера/ubuntu maverick main restricted

В вашем случае, возможно, кроме main и restricted, будут и другие компоненты.

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

deb file:/media/data/ubuntu-repo/mirror/archive.ubuntu.com/ubuntu maverick main restricted

Путь, конечно, в вашем случае может отличаться.

Напоследок хочется заметить, что во многих случаях совершенно не обязательно делать копию всего репозитория, а достаточно использовать что-то вроде apt-cache или apt-move.

Актуальная версия статьи


Самая последняя и наиболее актуальная версия этой статьи находится на официальном русскоязычном Wiki-ресурсе документации по Ubuntu. Там вы можете свободно улучшать и дополнять выложенные справочные и обучающие материалы, а также добавлять свои собственные. Если вам есть, что рассказать другим пользователям Ubuntu, то огромная просьба — напишите или отредактируйте соответствующую статью на help.ubuntu.ru. Даже небольшими улучшениями и дополнениями вы поможете тысячам людей, а кто-то из них, в свою очередь, опишет что-нибудь полезное и интересное для вас.