reprepro - создание локального репозитория ("первые шаги", или "главное - начать")

Knoppix

Модераторы: Warderer, Модераторы разделов

KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

reprepro - создание локального репозитория

Сообщение KernelPanic »

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
где:
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 увидел ваши изменения.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
IMB
Сообщения: 2565
ОС: Debian

Re: reprepro - создание локального репозитория

Сообщение IMB »

Осмелюсь предложить модераторам прикрепить данный топик.
Спасибо сказали:
Аватара пользователя
guglez
Сообщения: 394
ОС: GNU/Linux

Re: reprepro - создание локального репозитория

Сообщение guglez »

Чем отличается от debmirror и apt-mirror?
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: reprepro - создание локального репозитория

Сообщение KernelPanic »

guglez писал(а):
02.12.2008 14:24
Чем отличается от debmirror и apt-mirror?
Смотря для каких задач вы хотите его использовать.
Я использую reprepro для создания локального репозитория из:
1. скачанных в просторах интернета разрозненных deb-пакетов (не находящихся в интернет-репозиториях, а, именно, "валяющихся" на сайтах разработчиков), которые мне нужны.
2. собранных deb-пакетов из исходников с других веток (unstable/experimental), которые мне нужны.
3. самосборных deb-пакетов, созданных из оригинальных исходников программ, для которых нет deb-пакетов.
4. самосборных deb-пакетов, собранных из готовых бинарников для программ с закрытым кодом.

Насколько я понимаю из вывода команд aptitude show debmirror и aptitude show apt-mirror, данные пакеты предназначены для зеркалирования интернет-репозиториев (частично или целиком) дебиана (и других deb-based дистрибутивов), чтож, reprepro тоже это поддерживает, о чём можно вкратце посмотреть, введя аналогичную команду и для него, а более полно из мана или на сайте разработчика по ссылке из первого поста. Этим вопросом я не задавался, так как такие задачи мне пока были не нужны.
Спасибо сказали:
Bazz
Сообщения: 89
ОС: Gentoo & Debian

Re: reprepro - создание локального репозитория

Сообщение Bazz »

Такой вопрос, есть локальная сеть, в этой локальной сети я создаю репозиторий, как было описанно в первом топике! Как сделать так чтобы человек с другого компа мог подключить его и использовать?
Toshiba A300 15G Core 2 Duo T5500 1830 MHz, 2048 Мб, SATA 200 Gb, Radeon HD3470 (256Mb)
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: reprepro - создание локального репозитория

Сообщение KernelPanic »

Я тут вижу, по крайней мере, два варианта:
1. Вы открываете общий доступ на папку с репозиторием (на чтение). "Человек с другого компа" монтирует Вашу папку с репозиторием куда-нить в своей системе и использует как "свой" локальный репозиторий, но только на скачивание пакетов.
2. Вы на машине с репозиторием поднимаете web-сервер (к примеру, апач), создаете на виртуальном хосте localhost так называемый алиас (Alias) на папку с репозиторием, что-нить типа такого:

Код: Выделить всё

<VirtualHost *:80>
    ...
    ServerName    localhost
    ...
    Alias    /debian    /home/repository
    ...
</VirtualHost>

"Человек с другого компа" прописывает у себя в sources.list Ваш репозиторий:

Код: Выделить всё

deb http://ваш_локальный_ip_адрес/debian/ lenny main contrib non-free

и использует как обычный сетевой.
Спасибо сказали:
Аватара пользователя
amorphius
Сообщения: 353
ОС: Ubuntu

Re: reprepro - создание локального репозитория

Сообщение amorphius »

скачал 5 дисков Debian 5.0. Как мне все пакеты добавить в локальный репозиторий? Не вручную ж каждый прописывать:)
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: reprepro - создание локального репозитория

Сообщение KernelPanic »

amorphius писал(а):
30.03.2009 21:40
скачал 5 дисков Debian 5.0. Как мне все пакеты добавить в локальный репозиторий? Не вручную ж каждый прописывать
Да, это меня тоже напрягало, поэтому давненько написал скриптик для схожих целей.
Спасибо сказали:
Nergul
Сообщения: 95
ОС: debian

Re: reprepro - создание локального репозитория

Сообщение Nergul »

Подскажите где собака порылась... я в растерянности :cray:
Всё делал по вышеизложенному мануалу.
После aptitude update получил такую плюху :

Код:

# aptitude update E: Problem parsing dependency Depends E: Произошла ошибка во время обработки build (NewVersion1) E: Problem with MergeList /var/lib/apt/lists/_home_repo_debian-local_dists_lenny_main_binary-i386_Packages E: Не удалось обработать или открыть список пакетов или файл состояний. E: Problem parsing dependency Depends E: Произошла ошибка во время обработки build (NewVersion1) E: Problem with MergeList /var/lib/apt/lists/_home_repo_debian-local_dists_lenny_main_binary-i386_Packages E: Не удалось обработать или открыть список пакетов или файл состояний. Игн file: lenny Release.gpg Игн file: lenny/main Translation-ru Игн file: lenny Release.gpg Игн file: lenny/contrib Translation-ru Игн file: lenny/main Translation-ru Игн file: lenny Release.gpg Игн file: lenny/non-free Translation-ru Получить:1 file: lenny Release.gpg [189B] Игн file: lenny/main Translation-ru Игн file: lenny/contrib Translation-ru Игн file: lenny/non-free Translation-ru Получить:2 file: lenny Release [265B] Игн file: lenny Release Получить:3 file: lenny Release [267B] Получить:4 file: lenny Release [3681B] Игн file: lenny/contrib Packages Игн file: lenny/main Packages Игн file: lenny/main Packages Игн file: lenny/contrib Packages Игн file: lenny/non-free Packages Чтение списков пакетов... Ошибка! E: Problem parsing dependency Depends E: Произошла ошибка во время обработки build (NewVersion1) E: Problem with MergeList /var/lib/apt/lists/_home_repo_debian-local_dists_lenny_main_binary-i386_Packages E: Списки пакетов или status-файл не могут быть открыты или прочитаны. E: Не удалось перестроить кеш пакетов E: Problem parsing dependency Depends E: Произошла ошибка во время обработки build (NewVersion1) E: Problem with MergeList /var/lib/apt/lists/_home_repo_debian-local_dists_lenny_main_binary-i386_Packages E: Не удалось обработать или открыть список пакетов или файл состояний. E: Problem parsing dependency Depends E: Произошла ошибка во время обработки build (NewVersion1) E: Problem with MergeList /var/lib/apt/lists/_home_repo_debian-local_dists_lenny_main_binary-i386_Packages E: Не удалось обработать или открыть список пакетов или файл состояний.


з.ы. Файлы добавлял в репо скриптом
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: reprepro - создание локального репозитория

Сообщение KernelPanic »

Сложно сказать. Давайте разбираться, что Вы делали.
1) До использования скрипта ошибки подобного рода случались при использовании локального репозитория (reprepro)?
2) Путь репозитория, как я понял /home/repo?
3) Покажите в точности команду, которой добавляли пакеты в репозиторий.
4) Покажите /etc/apt/sources.list

Возможно, решение здесь.
Спасибо сказали:
Nergul
Сообщения: 95
ОС: debian

Re: reprepro - создание локального репозитория

Сообщение Nergul »

1) До использования скрипта ошибки подобного рода случались при использовании локального репозитория (reprepro)?

reprepo использую впервые
2) Путь репозитория, как я понял /home/repo?

да
3) Покажите в точности команду, которой добавляли пакеты в репозиторий.

reprepro-add -C main -D /home/repo/debian-local-tmp/ -N lenny -p
всю свою deb'о помойку перенёс в отдельный временный каталог для удобства, без подкаталогов
4) Покажите /etc/apt/sources.list

deb file:///part4/Distrib/debian/ lenny main
deb file:///part4/Distrib/debian-lenny/ lenny contrib main
deb file:///part4/Distrib/debian-non-free/ lenny non-free
deb file:///part4/Distrib/debian-local/ lenny main contrib non-free

поясняю : первые три репозитория перенесены с dvd и cd на винт, сетевых нет (тырнет зараза дорогой :angry: ) и
последний это который создан посредством reprepo
скрипт скопировал/раскидал файлы куда надо , проверил :tongue:
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: reprepro - создание локального репозитория

Сообщение KernelPanic »

Nergul писал(а):
12.05.2009 11:56
скрипт скопировал/раскидал файлы куда надо , проверил
В этом я особо не сомневался ;).
Давайте конкретней. Что-то мне Ваш sources.list больно не нравится.
1) Что такое part4?
2) Как Ваш последний пункт в sources.list сочетается с моим предыдущим вторым вопросом? Можете полный путь привести до папки, в которой находится подпапка conf (то есть до корня локального репозитория). (У меня в примере был путь /home/repository).
3) По ссылке смотрели? Может дело в настройках apt или проблема с диском?
Спасибо сказали:
Nergul
Сообщения: 95
ОС: debian

Re: reprepro - создание локального репозитория

Сообщение Nergul »

Прошу прощение за невольное введение в заблуждение, пришел с работы уставший вот и скопировал с устатку неверный sources.list :blush: Точнее устаревший (был на липких заметках)
Вот нонешний sources.list

deb file:///part4/Distrib/debian/ lenny main
deb file:///part4/Distrib/debian-lenny/ lenny contrib main
deb file:///part4/Distrib/debian-non-free/ lenny non-free
deb file:///home/repo/debian-local/ lenny main contrib non-free < здесь места больше :rolleyes:

Полный путь до корня репозитория /home/repo/debian-local/
Собственно ошибка вываливалась и при первой попытке создания репозитория.
Снёс нафих, при повторном создании на другом разделе и более того на другом винте повторение истории.
По ссылке смотрел, не то . Настройки apt по дефолту, с диском проблем нет (с перепугу проверил)
REP_PATH= в скрипте менял на нужный оба раза
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: reprepro - создание локального репозитория

Сообщение KernelPanic »

1) Если убрать из sources.list пункт про локальный репозиторий и сделать aptitude update, то ошибки не возникает?
2) Попробуйте создать локальный репозитрий еще раз и, ничего туда не закидывая, прописать в sources.list, после чего aptitude update.
3) Если ошибок в пункте 2 не будет, то киньте туда один пакетик, используя только reprepro (то есть без скрипта, по 7-му пункту данного хау-ту). После чего опять же aptitude update.

О результатах каждого пункта отпишитесь сюда.
Спасибо сказали:
Nergul
Сообщения: 95
ОС: debian

Re: reprepro - создание локального репозитория

Сообщение Nergul »

1) Если убрать из sources.list пункт про локальный репозиторий и сделать aptitude update, то ошибки не возникает?

Убрал пункт про локальный репозиторий .
Вывод aptitude update без ошибок (собственно так было и ранее)
2) Попробуйте создать локальный репозитрий еще раз и, ничего туда не закидывая, прописать в sources.list, после чего aptitude update.

Удалил "нерабочий" репозиторий и на его месте создал заново чистый.
Вывод aptitude update без ошибок
3) Если ошибок в пункте 2 не будет, то киньте туда один пакетик, используя только reprepro (то есть без скрипта, по 7-му пункту данного хау-ту). После чего опять же aptitude update.

Закинул в репозиторий десяток пакетов используя только reprepro.
После добавления каждого пакета делал aptitude update.
Вывод aptitude update без ошибок.

Положил в отдельный каталог несколько пакетов и скриптом добавил в репозиторий .
Вывод aptitude update без ошибок.

Добавил все пакеты (640 шт.) скриптом и ошибка вернулась.
Буду по 5-10 пакетов добавлять, попытаюсь поймать причину ошибки.
Спасибо сказали:
t2a
Сообщения: 694
ОС: Sidux-2008-2 (Debian sid)

Re: reprepro - создание локального репозитория

Сообщение t2a »

"Буду по 5-10 пакетов добавлять, попытаюсь поймать причину ошибки."

Возможно не по делу, но чем черт не шутит (reprepro не пользовал, так что не обессудьте).
Если в именах пакетов есть, что-то типа 1%3, 2%3 и т.п. (например cdrdao_1%3a1.2.2-17_i386.deb), то APTonCD 0.1.98 глючит. Может reprepro на это проверить?
Спасибо сказали:
Nergul
Сообщения: 95
ОС: debian

Re: reprepro - создание локального репозитория

Сообщение Nergul »

Проблема решена. Репозиторий работает :dance3:
Всё дело было в двух пакетах teacooker_0.3.0-1_i386.deb и notecase_1.9.8_i386.deb, выкинул их и заработало.
Ошибки поймал так:
Раскидал мелкими порциями по 5-7 пакетов по отдельным каталогам
После добавления скриптом пакетов в репозиторий делал aptitude update
При появлении ошибки удалял пакеты добавленные последними
Затем закидывал по одному командой reprepro -C main includedeb lenny путь_до_пакета
После каждого aptitude update
Адова работа :hang1:
Всем спасибо за участие :drinks:
Спасибо сказали:
Аватара пользователя
Killertester
Сообщения: 86
ОС: Gentoo

Re: reprepro - создание локального репозитория

Сообщение Killertester »

А можно этой утилитой зеркалировать офф репозитории дебиана? Если да то как?
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: reprepro - создание локального репозитория

Сообщение KernelPanic »

Тыц, насчет того, как, не подскажу, так как не занимаюсь этим, можете почитать мануал и поделиться здесь прочитанным, обязательно внесу в хау-ту со всеми копилефтами :)
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)

Re: reprepro - создание локального репозитория

Сообщение Voral »

KernelPanic писал(а):
30.03.2009 22:33
Да, это меня тоже напрягало, поэтому давненько написал скриптик для схожих целей.


хочу сделать репозиторий из пакетов находящихся в /var/cache/apt/archives

Как понимаю там могут оказаться пакеты из разных разделов (не только main).
возможно ли где то вытащить из какого раздела пакет?
Или можно все в один сложить? Не будет ли в этом случае потом каши?
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: reprepro - создание локального репозитория

Сообщение watashiwa_daredeska »

Voral писал(а):
08.09.2009 09:13
Или можно все в один сложить? Не будет ли в этом случае потом каши?
Можно. Не будет. Деление на секции — условное, а не техническое.
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: reprepro - создание локального репозитория

Сообщение KernelPanic »

Voral, каша будет, но условная :). Сам, когда хочу скинуть пакеты оттуда, то сначала прогоняю их с помощью apt-move (раскидывает автоматом по папкам main/contrib/non-free), после чего для каждого раздела использую скриптик, ссылка на который в Вашем посте.
Спасибо сказали:
Аватара пользователя
mandreika
Сообщения: 217
ОС: Debian 3,4,5,6

Re: reprepro - создание локального репозитория

Сообщение mandreika »

Возникла проблема: Нужно в локальный репозиторий созданный apt-move поместить свой самодельно собранный пакет,
помещаю его в /var/cache/apt запускаю apt-move update - смотрю зеркало, новый пакет лежит где ему положенно,
но клиенты его не видят (apt-get update делал)
Вопрос:
Можно ли с помощью repropro положить пакет в такое зеркало?

UPD
Пакет удалось поместить (причина: не создавалась symlink в debian/.apt-move/dists/stable/main/binary-i386/.index) ручное создание линка - помогло - пока ищу причину.
Спасибо сказали: