Каков наилучший способ создания пакета, предназначенного только для одной версии Ubuntu?

На данный момент я создаю и упаковываю наше программное обеспечение для Ubuntu 14.04, а также 'trusty' через dpkg-buildpackage. Я получаю пакет .deb, который можно установить на Ubuntu 14.04, а также на другие выпуски Ubuntu, например. 12.04, «точно». Это опасно, поскольку программное обеспечение может быть установлено без сообщения об ошибке, но программа не может нормально работать / работать.

Зависимости моего пакета приведены в файле control. Однако этот файл не позволяет мне ввести дистрибутив / кодовое имя Ubuntu. Распространение может быть введено как часть *.changes, но это не отражается нигде в файле .deb. Проверка сложной зависимости в сценарии после установки также сложна. Таким образом, я хочу простой способ предотвратить установку пакета Ubuntu в неправильную версию Ubuntu.

Каков наилучший способ создания пакета, предназначенного только для одной версии Ubuntu? В лучшем случае (1) установка должна работать только на целевую версию Ubuntu и (2) пакет .deb содержит имя распространения *, например. как package_1.0.0-3_trusty_amd64.deb.

(*) В противном случае apt-репозиторий, управляемый с помощью reprepro, не может иметь два пакета с одинаковым номером версии, каждый из которых нацелен на другую версию Ubuntur.

Спасибо заранее. [!d4 ]

Обновление:

Файл debian/control моего пакета:

Source: mypackage
Priority: extra
Build-Depends: debhelper (>= 9), python (>=2.7), pyside-tools
X-Python-Version: >= 2.7
Standards-Version: 3.9.2

Package: mypackage
Architecture: amd64
Depends: ros-indigo-desktop-full|ros-hydro-desktop-full, ros-indigo-rqt|ros-hydro-rqt, ros-indigo-gps-umd|ros-hydro-gps-umd, ros-indigo-map-server|ros-hydro-map-server, imagemagick, octave (>= 3.6), libdc1394-22, sox, tree, python (>=2.7), python-psutil, python-usb, python-serial, python-gi, gir1.2-gexiv2-0.10|gir1.2-gexiv2-0.4, exfat-fuse|fuse-exfat, exfat-utils, gphotofs, python-pyproj, libusb-1.0-0 (>=2:1.0.17), libpyside1.2|libpyside1.1 (>=1.1.2), ${shlibs:Depends}, ${misc:Depends}
Description: ...

Как видно, этот файл управления был адаптирован таким образом, что мы можем запустить сборку на нескольких Ubuntu выпускает, где зависимости имеют разные номера версий: libpyside1.2|libpyside1.1 (>=1.1.2). Есть ли лучший способ справиться с этим?

1
задан 14 July 2014 в 13:31

1 ответ

В пакете Debian нет возможности сказать «Разрешить установку только с 14.04». Это должно произойти на уровне хранилища apt (который я получу вскоре позже). Полу-исключение заключается в том, что, поскольку Trusty новее, чем Precise, Trusty будет иметь переименованные некоторые пакеты библиотек (которые до тех пор, пока пользователь не использует PPA, который предоставляет эти пакеты, сделает их неустановимыми) и будет иметь более новые версии библиотеки, для которых dh-shlibdeps может добавить требование к версии. Поэтому в обоих случаях пакет будет удален в Precise. Обратите внимание, что пакет, созданный для Precise, может быть установлен в Trusty.

Что касается репозитория apt, пакеты имеют отдельный номер версии debian для каждой версии. Формат, который вы описываете, может работать, хотя использование ~ является более распространенным, отчасти потому, что ~ меньше всех других символов, и поэтому, если пользователь обновляется до более новой версии (например, от Precise to Trusty), а пакет присутствовать в официальных репозиториях (с номером версии 1.0.0-3, тогда пользователь будет обновляться с 1.0.0-3~precise1 до 1.0.0-3, даже если у вас есть 1.0.0-3~trusty1. Это не будет применяться, если вы используете любой другой символ. Я лично использую что-то вроде 1.0.0-0ubuntu1~ppa1~precise1, а часть ~ppa1 - это меньше, чем любой официальный пакет Ubuntu, который может появиться в будущем, а часть ~precise1 должна указывать выпуск. Другие поддерживающие PPA могут использовать или 1.0.0-3~14.04.1, указав номер версии вместо кодового имени, которая, как гарантируется, будет увеличиваться (если номера версий Ubuntu не сбрасываются).

Обратите внимание, что двоичные пакеты имеют одинаковый источник пакет, поэтому вам нужно убедиться, что ваш файл .changes не включает исходный пакет.

2
ответ дан 24 May 2018 в 05:45
  • 1
    Спасибо за Ваш ответ. Опираясь на некоторые номера версий определенного выпуска Ubuntu, я немного взломан. - Вы знаете, как я могу управлять именем файла пакета. Поскольку dpkg-buildpackage автоматически выбирает имя на основе файла управления, но мне не удалось добавить имя дистрибутива. – Stefan 14 July 2014 в 13:46
  • 2
    Имена файлов пакета зависят от файла debian/control и файла debian/changelog. Соглашение об именах файлов - binaryPackageName_binaryVersion.deb. Часть binaryVersion - это полный номер версии в верхней части debian/changelog. Поэтому, если у вас есть имя дистрибутива (как часть самой версии), оно должно появиться в окончательном имени пакета. – saiarcot895 14 July 2014 в 16:50

Другие вопросы по тегам:

Похожие вопросы: