
В этой статье я расскажу как создать локальную копию репозитория с помощью утилиты 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. Даже небольшими улучшениями и дополнениями вы поможете тысячам людей, а кто-то из них, в свою очередь, опишет что-нибудь полезное и интересное для вас.