Как создать и опубликовать бинарные файлы для нескольких дистрибутивов Debian/Ubuntu?

Вопрос или проблема

Для проприетарного программного обеспечения я хотел бы создать и опубликовать несколько версий программного обеспечения для нескольких дистрибутивов. Например, 1.0, 1.1 и обе версии для squeeze, wheezy и precise.

Сборки автоматически запускаются на разных машинах и производят специфичные для дистрибутива .deb файлы. Специфичные для дистрибутива в том смысле, что они связаны с версиями библиотек, специфичными для дистрибутива. Например, OpenSSL 0.9.8 для squeeze, 1.0.1 для wheezy. Однако эти пакеты собраны с использованием одного и того же номера версии и имени пакета. Это, вероятно, является причиной проблемы, описанной далее.

В настоящее время я использую reprepro с командой includedeb, чтобы добавить бинарники в репозиторий. Это работает нормально, пока я не добавлю ту же версию пакета, собранную для второго дистрибутива.

Публикация для Squeeze проходит нормально

# reprepro -b ./repo --outdir ./wwwpub/repo includedeb squeeze /path/to/sqeezepackages/packagename-1.0.deb

Но затем публикация той же версии программного обеспечения, собранного на wheezy, заканчивается неудачей:

# reprepro -b ./repo --outdir ./wwwpub/repo includedeb wheezy /path/to/wheezypackages/packagename-1.0.deb 
/path/to/wheezypackages/packagename-1.0.deb: компонент угадан как 'main'
ERROR: '/path/to/wheezypackages/packagename-1.0.deb' не может быть включен как 'pool/main/p/packagename/packagename_1.0_all.deb'.
Уже существующие файлы могут быть включены снова, только если они одинаковы, но:
md5 ожидалось: e7df7cd2ca07f4f1ab415d457a6e1c13, получено: 0fa924209085a5713f79e6a30649455f
sha1 ожидалось: 947b41827bbac414baddf0648b9abecaad8de4fe, получено: 1be168ff837f043bde17c0314341c84271047b31
sha256 ожидалось: a883dafc480d466ee04e0d6da986bd78eb1fdd2178d04693723da3a8f95d42f4, получено: a93dbf1e95ddc4cfa84e9cd3cfa6c9e0e14affd79812abde4bca688224430a65
размер ожидался: 1234, получен: 1235
Произошли ошибки!

Я предполагаю, что моя сборка нуждается в уникальном номере версии для каждого дистрибутива.

  • Какой самый простой способ это сделать?
  • Как мне добавить это к текущему номеру версии? Следует ли использовать что-то вроде 1.1~wheezy, 1.1+wheezy, 1.1-1 (увеличивая), 1.1+deb6 и т.д.? Поскольку jessie на подходе, и я хотел бы, чтобы система распознавала это во время обновлений дистрибутива, я думаю, что использование только имени дистрибутива не сработает, так как j приходит перед w, и APT распознает это как более старое.
  • После определения того, как сформировать номер версии; как мне добавить это в мои инструменты? Я думаю, что мне нужны эвристики в файлах debian/control, чтобы иметь номер версии, специфичный для дистрибутива, на котором он собран. И для журнала изменений мне придется вызвать dch, чтобы соответствовать этому номеру версии.

Лично я бы просто сделал один архив для каждого дистрибутива.

Это решит вашу проблему и будет иметь то преимущество, что каждый архив будет меньше. (быстрее загружаться и парситься клиентами)

Ответ или решение

Как создать и опубликовать двоичные файлы для нескольких дистрибутивов Debian/Ubuntu

Создание и публикация двоичных файлов для разных версий дистрибутивов, таких как Squeeze, Wheezy и Precise, представляет собой сложную задачу, особенно если требуется поддержка различных версий зависимостей, таких как OpenSSL. В данной статье мы рассмотрим, как правильно организовать процесс сборки и публикации пакетов .deb, чтобы избежать конфликтов и ошибок при добавлении их в репозиторий.


Проблема с версионностью пакетов

Основная проблема, с которой вы столкнулись, связана с тем, что в разных дистрибутивах одни и те же версии вашего пакета не могут существовать одновременно из-за различий в зависимостях. Когда вы пытаетесь добавить пакет с одним и тем же номером версии для разных дистрибутивов, reprepro не может разрешить конфликты, так как считает их идентичными.


Решение с уникальными версиями для каждого дистрибутива

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

Рекомендованные варианты нумерации версий:

  1. 1.1~wheezy – данный способ указывает, что версия пакета является «предварительной» по отношению к 1.1. Это позволяет корректно производить обновления.
  2. 1.1+wheezy – позволяет понять, что версия 1.1 имеет разные сборки для Wheezy.
  3. 1.1-1 – увеличение номера версии сборки, но может не заменить необходимость в ударении на особые зависимости.
  4. 1.1+deb7 – хорошая альтернатива, если вы хотите связать версию пакета с конкретной версией Debian.

Важно помнить, что при увеличении версии нужно следить за порядком, чтобы APT правильно определял, какие версии являются новыми при обновлении.


Изменения в файловой структуре проекта

  1. Файл debian/control:

    • Для каждого дистрибутива вам нужно будет отразить новую версию с учетом специфики дистрибутива. Например, убедитесь, что версия, указанная в файле, соответствует измененному номеру версии.
  2. Файл debian/changelog:

    • Используйте инструмент dch для изменения версии. Вы можете запускать команду в терминале, чтобы добавлять новые записи в файл changelog:
      dch -v 1.1~wheezy "Изменения для Wheezy"

Создание отдельных архивов для каждого дистрибутива

Здесь также рекомендовано создать отдельный репозиторий для каждого дистрибутива. Это эффективно облегчает структуру сохранения и сокращает размер архивов, что в свою очередь упрощает процесс их загрузки и обработки клиентами.

Пример команд для добавления в репозиторий:

reprepro -b ./repo --outdir ./wwwpub/repo includedeb squeeze /path/to/sqeezepackages/packagename-1.1~squeeze.deb
reprepro -b ./repo --outdir ./wwwpub/repo includedeb wheezy /path/to/wheezypackages/packagename-1.1~wheezy.deb

Заключение

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

Это решение позволяет эффективно справляться с изменениями в зависимости от специфики различных версий и минимизирует риск конфликтов при обновлениях.

Оцените материал
Добавить комментарий

Капча загружается...