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