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

Локальные копии репозиториев нужны для установки программ на машины с 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

# Репозитории, необходимые для использования локального зеркала для сетевой установки
deb http://archive.ubuntu.com/ubuntu maverick main/debian-installer restricted/debian-installer

# Эта строчка сообщает 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]... [14]... [13]... [12]... [11]... [10]... [9]... [8]... [7]... [6]... [5]... [4]... [3]... [2]... [1]... [0]... 
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 сервера, или же непосредственно через физическое подключение файлового носителя.

Подключение созданной копии репозитория к другим компьютерам, разбивка её на части для записи на диски и другая полезная информация приведена в основной статье:

Ссылки