http://www.debian.org/logos/openlogo-nd-50.png http://www.debian.org/Pics/debian.png

Translation(s): - Русский


Создание локального репозитория


Этот раздел поможет создать и задействовать самые различные локальные источники пакетов для Debian.


Активная разработка страницы завершена


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


С помощью утилиты apt-mirror


Подготовка и установка apt-mirror


Это основной способ зеркалирования, помимо официального ftpsync, т.к. он гораздо надёжней debmirror.
Устанавливаем пакет:

aptitude install apt-mirror

Создадаём каталог /mnt/repo/debian, в нём будет создаваться локальный репозиторий пакетов. Желательно чтобы это был примонтированный логический раздел жёсткого диска, чтобы в случае переустановки дистрибутива с нуля, при форматировании корневого раздела (/), не лишиться репозитория совсем. И служебных каталогов:

mkdir -p /mnt/repo/debian/{mirror,var,skel}


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


Заранее предположим что нам нужны:

Примечание: Раскомментирование строк лишь заменяет настройки по умолчанию. Считается, что финское зеркало самое быстрое, поэтому будем использовать его.

Правим конфигурационный файл /etc/apt/mirror.list:

nano etc/apt/mirror.list

############# config ##################
# Базовый каталог, в нём будет создано локальное зеркало репозитория Debian
set base_path    /mnt/repo/debian

# Пути к файлам зеркала, временным файлам и журналy выполнения apt-mirror
# set mirror_path  $base_path/mirror
# set skel_path    $base_path/skel
# set var_path     $base_path/var
# set cleanscript $var_path/clean.sh

# Архитектура, для которой создаётся зеркало. По умолчанию - это архитектура
# системы, на которой работает apt-mirror (amd64,i386 или др.). Менять не ненужно,
# т.к. ниже мы явно укажем и зеркало и архитектуру.
# set defaultarch  <running host architecture>

# Пусть к скрипту постобработки, по-умолчанию отсутствует, пока нам не нужен.
# set postmirror_script $var_path/postmirror.sh

# Не запускать скрипт постобработки
set run_postmirror 0

# Служебные параметры, не 
set nthreads     20
set _tilde 0
#
############# end config ##############

# Зеркало с пакетами для i386 squeeze (stable)+ исходные тексты
deb-i386 http://ftp.fi.debian.org/debian squeeze main contrib non-free
deb-src http://ftp.fi.debian.org/debian squeeze main contrib non-free
# Зеркало с обновлениями безопасности i386 squeeze (stable)+ исходные тексты
deb-i386 http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free
# Зеркало с прочими обновлениями i386 squeeze (stable)+ исходные тексты
# Такое локальное зеркало заставить работать не удалось, отключаю
#deb-i386 http://ftp.fi.debian.org/debian/ squeeze-updates main contrib non-free
#deb-src http://ftp.fi.debian.org/debian/ squeeze-updates main contrib non-free
# Зеркало необходимое для сетевой установки (udebs)
deb-i386 http://ftp.fi.debian.org/debian squeeze main/debian-installer
# Удаляем файлы не индексированные в Release
clean http://ftp.fi.debian.org/debian
clean http://security.debian.org
# Запрещаем очистку выбранной папки
skip-clean http://ftp.fi.debian.org/debian/dists/squeeze/main/installer-i386/

Если необходимо хранить несколько зеркал для разных выпусков и архитектур, то добавляем новые строки аналогично для squeeze i386

Далее нужно убедиться что все указанные в mirror.list каталоги существуют.


Запуск и автоматизация apt-mirror


Для ручного запуска создания\обновления зеркала выполняем команду:

# apt-mirror

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

Downloading 55 index files using 20 threads...
Begin time: Tue Dec 03 21:43:48 2010
[20]... [19]... [18]... [17]... [16]... [15]...
End time: Tue Dec 03 21:47:22 2010

Proceed indexes: [PPPPPPPPPP]

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

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

Для автоматической синхронизации и очистки зеркал нужно добавить строку в настройки cron и выставить подходящее время. Обновление официальных зеркал происходит каждые 6 часов: 3:00,9:00,15:00,21:00. Например так:

crontab -e

05 01 * * *     apt-mirror >> /var/log/apt-mirror.log
05 03 * * *     /mnt/repo/debian/var/clean.sh >> /var/log/apt-mirror.log


Настройка доступа к зеркалу


После завершения работы локальные копии всех указанных репозиториев окажутся в каталогах /mnt/repo/debianmirror/имя_репозитория . Таким образом копия репозитория, которая была определена в mirror.list как

deb-i386 http://ftp.fi.debian.org/debian squeeze main contrib non-free

окажется в каталоге /mnt/repo/debian/mirror/ftp.fi.debian.org/debian. Доступ именно к этому каталогу нужно открывать любым удобным для Вас Web или FTP сервером. Для корректной работы обязательно необходимо добавить символические ссылки "stable","testing", "unstable" на squeeze, wheezy, sid соответственно (если они у вас есть). Пример для squeeze

ln -s /mnt/repo/debian/mirror/ftp.fi.debian.org/debian/dists/squeeze /mnt/repo/debian/mirror/ftp.fi.debian.org/debian/dists/squeeze/stable

Далее очень желательно подписать вновь созданный репозиторий


C помощью утилиты debmirror


Установка пакета:

# aptitude install debmirror

Создание каталога /mnt/repo/debian, в нём будет создаваться локальный репозиторий пакетов. Желательно чтобы это был примонтированный логический раздел жёсткого диска, чтобы в случае переустановки дистрибутива с нуля, при форматировании корневого раздела (/), не лишиться репозитория совсем.

# mkdir /mnt/repo/debian

Опции

-a

тип архитектуры (i386, amd64 и т.п.)

-d

ветка дистрибутива (stable, testing, unstable)

--nosource

не закачивать пакеты с исходным кодом

--i18n

закачивать файлы переводов описаний пакетов

-h

адрес сетевого репозитория

--method

тип протокола передачи файлов (ftp, http, rsync)

--progress

показывать подробности загрузки

/mnt/repo/

каталог, в котором будет создан ваш локальный репозиторий

-v

показывать, что сейчас происходит

--nosource

не скачивать исходные коды

-s main,contrib,non-free

секции, которые нужно скачать

--ignore-release-gpg

игнорировать проверку gpg-ключа

--ignore-missing-release

не прерывается, если нету файла Release

По умолчанию debmirror создаёт зеркало из секций main, contrib, non-free, main/debian-installer.

Можно исключать секции ненужных вам пакетов:

--exclude-deb-section="games" - не будет зеркалировать все игры.

Имя секции обязательно в кавычках, иначе опция проигнорируется, это будет видно по общему объёму необходимых для скачивания пакетов выводимых программой в самом начале своей работы.

Принадлежность к определенной секции вашего пакета можно узнать по команде:

$ apt-cache show имя_пакета

Пример получения бинарного зеркала (без пакетов с исходным кодом) Debian Stable для amd64:

# debmirror --host=ftp.fi.debian.org/debian --dist=stable --arch=amd64 --method=ftp --ignore-release-gpg --nosource /mnt/repo/debian

Финское зеркало самое быстрое.

C помощью утилиты reprepro

Установка пакета:

# apt-get install reprepro

Создание каталога /mnt/repo/debian, в нём будет создаваться локальный репозиторий пакетов. Желательно чтобы это был примонтированный логический раздел жёсткого диска, чтобы в случае переустановки дистрибутива с нуля, при форматировании корневого раздела (/), не лишиться репозитория совсем.

# mkdir /mnt/repo/debian

Cоздание каталога /mnt/repo/debian/conf и пустого конфигурационного файла distributions:

# mkdir /mnt/repo/debian/conf
# touch /mnt/repo/debian/conf/distributions

В файл /mnt/repo/debian/conf/distributions указываем следующие параметры (пример для testing, архитектура i386):

Codename:  squeeze
Suite:  stable
Version: 6.x
Origin: Debian
Label: Debian 6.x
Description: Debian Stable Repository
Architectures: amd64 source
Components: main contrib non-free
SignWith: default
DebIndices: Packages Release . .gz .bz2
DscIndices: Sources Release . .gz .bz2
Contents: . .gz .bz2

Описание параметров

Codename: squeeze

кодовое имя дистрибутива: sarge, etch, lenny, squeeze и т.д.

Suite: stable

вертка дистрибутива: stable, testing ,unstable ,experimental

Version: 6.x

номер версии: squeeze - 6.x

Origin: Debian

возможно у вас не Debian, а его производная, например, Ubuntu, Kubuntu, если оригинал, то Debian

Label: Debian 6.x

смесь двух секций Origin и Version

Description: Debian testing repository

расшифровка, какой репозиторий

Architectures: amd64

архитектура дистрибутива: i386, amd64 и т.д.

Components: main contrib non-free

компоненты дистрибутива: main - СПО, contrib - СПО с зависимостями от несвободного, non-free - несвободное ПО

?SignWith: default

можно не указывать, если не планируете подписывать репозиторий ключём gnupg

?DebIndices: Packages Release . .gz .bz2

индексные файлы Packages для двоичных пакетов и файлы Release с контрольными суммами; 3 типа: несжатые, сжатые gzip, сжатые bzip

?DscIndices: Sources Release . .gz .bz2

тоже самое только для пакетов с исходным кодом

Contents: . .gz .bz2

файлы со списком содержимого каждого пакета, пригодиться при поиске файлов в установленных и ещё неустановленных пакетах

Дополнительные важные опции:

?AlsoAcceptFor: unstable experimental

другие ветки

UDebComponents: main contrib non-free

Udeb-пакеты

Инициализация репозитория

Создаём каталоги, файлы, ссылки:

# cd /mnt/repo/debian
# reprepro export
# reprepro createsymlinks

Базовый каталог не задан, т.к. мы уже в нём находимся.

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

# reprepro -b /mnt/repo/debian  --ask-passphrase includedeb squeeze /var/cache/apt/archives/*.deb

Параметр -b задаёт базовый каталог репозитория, в нашем случае это /mnt/repo, если вы находитесь уже в нём, то его можно не задавать, т.к. reprepro ищет файл conf/distributions в текущем каталоге.

Добавление Дебиановских исходников в репозиторий. Они состоят обычно из 2-3 файлов, главным (управляющим) из которых является dsc-файл. Чтобы все файлы исходников добавились в репозиторий, нужно использовать includedsc, остальное аналогично.

Добавление дебиановских исходников вместе с собранным из них пакетом (пакетами). После сборки пакета (пакетов) из дебиановских исходников, кроме самих пакетов и исходников появляется файл *.changes там же, где и пакеты. В этом файле перечислены как сами собранные пакеты, так и исходники. Поэтому для добавления всех этих файлов можно воспользоваться такой командой (в общем виде):

# reprepro -C РАЗДЕЛ include ВЕТКА /путь/до/файла/имя_файла.changes

Параметр --ask-passphrase подпишет ваш репозиторий с помощью вашего ключа GnuPG. Его можно не указывать, если не планируете подписывать репозиторий ключём gnupg. На не подписанные репозитории, aptitude будет выдавать предупреждение, что он ненадежный. Для использования подписанного репозитория, надо сделать выгрузку вашего ключа, а на машине использующей репозиторий:

# apt-key add /tmp/имя_вашего_ключа.asc

Добавление пакетов расположенных на CD/DVD Debian

Они уже лежат в иерархии каталога pool на дисках, но reprepro не поддерживает рекурсивный поиск по подкаталогам, но это достаточно легко обойти шаблоном (pool/*/*/*/*.deb). Пример:

# reprepro -b /mnt/repo/debian  --ask-passphrase includedeb squeeze /media/cdrom/pool/*/*/*/*.deb

Она найдёт и добавит всё пакеты.

Удаление deb-пакета из репозитория

# reprepro remove ветка имя_пакета

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

# reprepro removesrc ветка имя_приложения

Использование

Для использования репозитория нужно добавить его в файл /etc/apt/sources.list в виде следующей строки (в общем виде):

deb file:///путь_к_папке_репозитория/ ветка разделы
например:
deb file:///home/repository/ squeeze main contrib non-free

Подпись локального репозитория своим ключом

Генерирование ключа

Чтобы не было проблем с тем, что ключи созданы не там, рекомендуется все делать от учётной записи «root». Для генерирования ключа нужно выполнить команду:

# gpg --gen-key

Ответ на вопрос о типе ключа (обычно - 1):

Please select what kind of key you want:
(1) DSA and Elgamal (default)
(2) DSA (sign only)
(5) RSA (sign only)
Your selection?

Ответ на вопрос о длине ключа (тоже по умолчанию - 2048):

DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)

Ответ на вопрос о сроке истечения ключа (0 - никогда не истекает):

Please specify how long the key should be valid.
0 = key does not expire
= key expires in n days
w = key expires in n weeks
m = key expires in n months
y = key expires in n years
Key is valid for? (0)

После этого может потребоваться подтвердить выбор:

Key does not expire at all
Is this correct? (y/N) y

Далее ввести информацию о себе и подтвердить (буква O (не ноль)). Потом задать пароль и подтвердить его. После этого начинается генерация ключа, в течение которой просят попечатать чего-нить, подвигать мышкой или еще чего поделать. Это нужно для генерации уникального ключа.

По завершении генерации будет выведена информация о сгенерированном ключе, такая как: - ID ключа - короткий набор символов: pub 1024D/5A81CBE3 2008-04-27 - отпечаток - длинный набор символов: Key fingerprint = уникальный отпечаток - и ещё немного информации. Самой важной информацией является ID ключа и отпечаток.

Экспорт ключа

Выполнить:

# gpg --armor --export > mylocalkey.asc

Где mylocalkey.asc это имя файла, в который внесен данный экспорт (новый файл, он создатся в процессе).

Добавление ключа в apt

Команда выполняется из того же каталога, что и предыдущая (из того, где находится mylocalkey.asc):

# apt-key add mylocalkey.asc

После этого можно проверить наличие ключа в списке apt:

# apt-key list

Выведет все ключи, в том числе и созданный.

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

# apt-key del ID_ключа

В этом случае ID_ключа будет 5A81CBE3 (см.выше).

Подписывание локального репозитория созданным ключом

Сначала нужно убедиться в том, что в локальном репозитории имеется файл Release (находится в каталоге /mnt/repo/debian/dists/ветка_дистрибутива). В этом файле хранится информация о репозитории.

Перейти в каталог, где находится файл Release и выполнить команду:

# gpg --armor -o Release.gpg -sb Release

Файл Release.gpg создан, он является подписью к созданному локальному репозиторию.