Мне нужно создать репозиторий 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. Они на один уровень ниже дистрибутива.)