reprepro - утилита для создания локального репозитория для Debian (deb-based дистрибутивов).
Довольно удобная утилита для создания локального репозитория, но есть один минус - отсутствие русскоязычного мини-HowTo для начинающих, что затрудняет его использование.
Ну чтож, давайте восполним сей пробел
1. Создаем базовую директорию для репозитория. Лучше создавать директорию с доступом от рута, так как в этом случае никто, кроме рута, не сможет туда нагадить (у меня это /home/repository):
# mkdir /home/repository
и переходим туда:
# cd /home/repository
2. Создаем внутри папку conf/ для конфигурационных файлов:
# mkdir conf
3. Создаем в ней файл distributions:
# touch conf/distributions
4. Редактируем его, добавляя нужные секции (подробнее об этом можно почитать в выводе команды man reprepro в разделе CONFIG FILES):
# mcedit conf/distributions
К примеру до такого вида (у меня Debian lenny, но есть пакеты из веток unstable и experimental):
Код
Origin: Debian
Suite: testing
AlsoAcceptFor: unstable experimental
Codename: lenny
Version: 5.0
Architectures: i386 source
Components: main contrib non-free
UDebComponents: main contrib non-free
Description: my local repository
где:Suite: testing
AlsoAcceptFor: unstable experimental
Codename: lenny
Version: 5.0
Architectures: i386 source
Components: main contrib non-free
UDebComponents: main contrib non-free
Description: my local repository
Origin - Имя дистрибутива = Debian
Suite - ветка = testing
AlsoAcceptFor - позволяет "засовывать" в репозиторий тестинга пакеты для других веток = unstable experimental, если опция не указана, то будет ругаться вот так при попытке добавить пакеты из анстэбл/экспериментал веток.
Codename - кодовое имя ветки = lenny
Version - версия ветки = 5.0
Architectures - архитектуры, у меня x86 процессор, соответственно есть i386, также иногда закидываю в репозиторий исходники, поэтому есть source
Components - разделы ветки, куда можно поместить deb-пакеты, а также исходники = main contrib non-free (можно еще насоздавать, сколько угодно)
UDebComponents - разделы ветки, куда можно поместить udeb-пакеты (бывают и такие ) = main contrib non-free (лучше, когда совпадают со строкой выше)
Description - краткое словесное описание репозитория = например, my local repository
!!!Все команды по управлению таким репозиторием начинаются с reprepro, причем выполнять данные команды нужно из папки репозитория (войдя в нее с помощью cd), либо указывать базовую директорию, где находится репозиторий, посредством опции -b BASEDIR (в рассматриваемом варианте BASEDIR=/home/repository).
5. Начальная инициализация репозитория:
# reprepro export
# reprepro createsymlinks
После этого можно посмотреть, что создалось в папке /home/repository
6. Все, теперь можно репозиторий заполнять пакетами и, вообще, управлять его содержимым, для чего служат множество команд и множество опций, подробнее о которых можно узнать в man reprepro.
Наиболее употребляемые разберем.
7. Добавление deb-пакета в репозиторий.
В общем виде выглядит так:
# reprepro -C РАЗДЕЛ includedeb ВЕТКА /путь/до/файла/имя_файла.deb (при выполнении из базовой папки репозитория)
# reprepro -b BASEDIR -C РАЗДЕЛ includedeb ВЕТКА /путь/до/файла/имя_файла.deb (при выполнении из любой другой папки)
К примеру, для добавления пакета foo_1.0.deb, находящегося в папке /home/user/debian, в раздел main ветки lenny команда будет иметь следующий вид:
# reprepro -C main includedeb lenny /home/user/debian/foo_1.0.deb
8. Добавление udeb-пакета в репозиторий.
Аналогично приведенному в пункте 7, только вместо includedeb нужно прописать includeudeb.
9. Добавление Дебиановских исходников в репозиторий.
Они состоят обычно из 2-3 файлов, главным (управляющим) из которых является dsc-файл. Чтобы все файлы исходников добавились в репозиторий, нужно использовать includedsc, остальное аналогично пункту 7.
10. Добавление дебиановских исходников вместе с собранным из них пакетом (пакетами).
После сборки пакета (пакетов) из дебиановских исходников, кроме самих пакетов и исходников появляется файл *.changes там же, где и пакеты. В этом файле перечислены как сами собранные пакеты, так и исходники.
Поэтому для добавления всех этих файлов можно воспользоваться такой командой (в общем виде):
# reprepro -C РАЗДЕЛ include ВЕТКА /путь/до/файла/имя_файла.changes
Как видно, отличие от пункта 7 опять же незначительное
11. Удаление deb-пакета из репозитория.
Для удаления одного deb-пакета из указанной ветки репозитория нужно дать такую команду (в общем виде):
# reprepro remove ветка имя_пакета
К примеру, для рассмотренного пакета foo_1.0.deb, находящегося в ветке lenny даем такую команду:
# reprepro remove lenny foo
Если есть несколько пакетов с одинаковым именем, находящиеся в разных разделах (к примеру, один в main, а другой в new-main), то можно указать конкретный раздел, например, main:
# reprepro -C main remove lenny foo
12. Удаление пакетов вместе с исходниками либо всех пакетов, относящихся к одному собранному приложению (это означает, что данные пакеты в репозитории лежат в одной папке, причем имя папки и будет указывать на имя приложения).
# reprepro removesrc ветка имя_приложения
13. Для использования репозитория нужно добавить его в файл /etc/apt/sources.list в виде следующей строки (в общем виде):
deb file:///путь_к_папке_репозитория/ ветка разделы
Что для нашего примера будет выглядеть так:
deb file:///home/repository/ lenny main contrib non-free
14. Также следует помнить, что для избежания варнингов при работе с таким репозиторием, он должен быть подписан gpg-ключом. О том, как это сделать, написано в прикрепленном файле:
15. Вот и всё, не забывайте подписывать репозиторий каждый раз после добавления/удаления пакетов в/из него, а также выполнять # aptitude update, чтоб apt увидел ваши изменения.
1. Генерируем ключ.
Итак, чтоб проблем не было с тем, что ключи созданы не там, рекомендуется все делать от рута!
Для генерирования ключа нужно воспользоваться командой:
# 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 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 ключа и отпечаток.
2. Экспортируем ключ.
Команда такая:
# gpg --armor --export > mylocalkey.asc
Где mylocalkey.asc - имя файла, в который мы забьем данный экспорт (нового файла, он создатся в процессе).
3. Добавляем ключик в apt.
Команда выполняется из той же папки, что и предыдущая (короче из той, где mylocalkey.asc лежит):
# apt-key add mylocalkey.asc
После этого можно проверить наличие нашего ключика в списке apt:
# apt-key list
Выведет все ключи и наш :)
Если захотите удалить ключик из apt, то это выполняется командой:
# apt-key del ID_ключа
В моем случае ID_ключа будет 5A81CBE3 (см.выше).
4. Подписываем локальный репозиторий ключом
Первоначально надо убедиться в том, что в локальном репозитории имеется файл Release
(находится в папке /WAY_TO_BASEDIR/dists/Ветка_дистрибутива, где WAY_TO_BASEDIR - это путь до базовой
директории локального репозитория.
В этом файле хранится инфа о репозитория.
Переходим в директорию, где у нас файл Release и прописываем команду:
# gpg --armor -o Release.gpg -sb Release
Все, теперь у нас есть файл Release.gpg, который является подписью к нашему локальному репозиторию.
Kernel Panic ;)