- Вопрос или проблема
- Ответ или решение
- Как создать и опубликовать двоичные файлы для нескольких дистрибутивов 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~wheezy – данный способ указывает, что версия пакета является «предварительной» по отношению к 1.1. Это позволяет корректно производить обновления.
- 1.1+wheezy – позволяет понять, что версия 1.1 имеет разные сборки для Wheezy.
- 1.1-1 – увеличение номера версии сборки, но может не заменить необходимость в ударении на особые зависимости.
- 1.1+deb7 – хорошая альтернатива, если вы хотите связать версию пакета с конкретной версией Debian.
Важно помнить, что при увеличении версии нужно следить за порядком, чтобы APT правильно определял, какие версии являются новыми при обновлении.
Изменения в файловой структуре проекта
-
Файл
debian/control
:- Для каждого дистрибутива вам нужно будет отразить новую версию с учетом специфики дистрибутива. Например, убедитесь, что версия, указанная в файле, соответствует измененному номеру версии.
-
Файл
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
Заключение
Создание и публикация двоичных файлов для различных дистрибутивов требует внимания к деталям, особенно в плане версионности. Применение уникальных суффиксов для каждой версии может значительно упростить процесс и снизить вероятность ошибок. Следуя вышеуказанным рекомендациям, вы сможете успешно управлять вашими пакетами и облегчить их распространение для пользователей различных дистрибутивов.
Это решение позволяет эффективно справляться с изменениями в зависимости от специфики различных версий и минимизирует риск конфликтов при обновлениях.