Назад | Перейти на главную страницу

Создать репозиторий Debian с несколькими версиями пакетов

Мне нужно создать репозиторий debian для хранения наших программных пакетов, но главное здесь - позволить хранить в нем несколько версий программного обеспечения для отката, если это необходимо. REPPO не может этого сделать, и похоже, что debarchiver также не может

Я могу просто использовать dpkg-scanpackage -m для создания packages.gz, но более интересным является создание полнофункционального репо с поддержкой закрепления и подписей gpg

Любой совет? Спасибо

Я делаю это так, как это делает проект postgresql http://apt.postgresql.org/pub/repos/. Я добавляю еще один уровень каталогов для dist (например, ubuntu или debian).

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

Допустим, у вас есть собственный вызов приложения foobar. Моя предлагаемая структура каталогов была бы /var/www/repos/apt/debian/ с участием repos является корневой веб-папкой. Вы также можете сделать apt корневая веб-папка, если у вас есть только apt и нет yum или ? репо.

/conf/distributions файл под этим каталогом будет примерно таким:

Origin: foobar project
Label: foobar project
Codename: foobar
Architectures: i386 amd64
Components: main v1 v2 3 7.1
Description: Apt repository for project foobar
SignWith: XXXXXXX

В добавок к main компонент, о котором говорится во всей документации, мы добавляем наши собственные имена компонентов v1, v2, 3, 7.1. Вы можете использовать любую строку и добавлять столько, сколько хотите. Вы не ограничены стандартными, о которых говорится во всей документации.

Если вы не используете -C отметьте его по умолчанию main. Копировать в v1 компонентный каталог и предполагая, что эти debs находятся в /usr/src/

cd /var/www/repos/apt/debian
reprepro -C v1 includedeb foobar /usr/src/*.deb

Или если вы хотите создать 7.1 компонентный каталог и если у нас есть эти debs в /usr/src/7.1/(например):

reprepro -C 7.1 includedeb foobar /usr/src/7.1/*.deb

Это создаст 7.1 каталог компонентов в /var/www/apt/debian/pool/7.1

Затем вы добавляете свое репо в /etc/apt/sources.list.d/mycustomrepo.list

deb http://packages.mydomain.com/repos/apt/debian foobar main v2 3 7.1

Теперь у вас есть доступ к версиям в main, v2, 3, и 7.1. Вы также можете изменить, к каким версиям у вас есть доступ, в одной строке в mycustomrepo.list

Если это не ваш собственный проект, а репозиторий со стандартными и / или пользовательскими пакетами ОС Debian, то вместо foobar вы бы просто использовали имя ОС Debian, например stretch именно так об этом говорится в большей части документации при объяснении репозиториев.

Вероятно, это лучший способ, но если вы не хотите использовать компоненты, вы можете указать версии в имени приложения. Так foobar_v1, foobar_v2, foobar_3, foobar_7.1. Но теперь вашему файлу репо потребуется отдельная строка для каждой версии, к которой вы хотите получить доступ. Это также меняет ваш рабочий процесс при внесении изменений, добавления / удаления.

Также есть способ, которым mariadb делает это с отдельными корневыми папками для версий. http://mariadb.mirror.globo.tech/repo/

Но это предполагает, что вы используете только apt, а репозиторий предназначен только для одного конкретного приложения / проекта. Так что я не думаю, что он такой гибкий.

Вы можете хранить несколько версий пакета с помощью REPPRO. Их просто нужно связать с разными выпусками (например, wheezy vs. wheezy-backports). Для этого вы можете определить новую версию в репозитории.

Я также рекомендую реппро для этого.

Проблема с наличием нескольких версий, доступных одновременно, может быть решена с помощью одного компонента на версию, как это сделано на apt.postgresql.org вместо того, чтобы создавать новый дистрибутив для каждого выпуска. (У ребят из PostgreSQL на самом деле была такая же проблема, и это их решение / обходной путь.)

(Компоненты: «main», «contrib» и «non-free» в Debian, и «main», «universe», «limited» и «multiverse» в Ubuntu. Они на один уровень ниже дистрибутива.)