Создание зеркала репозитория Ubuntu с помощью apt-mirror

0
5

Зачастую при развёртывании сети машин на 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.

Источник: habr