Я пишу пакет Ubuntu для пакета, который по существу обеспечивает много библиотек и заголовков, которые затем можно использоваться для создания другого программного обеспечения. Пакет также разбивается в меньших подпакетах, которые являются взаимозависимыми; в этом смысле пакет весьма схож с повышением.
Я заметил, что пакеты как повышение обеспечивают
[...]
libboost-dbg
libboost-dev
libboost-doc
[...]
libboost-all-dev
[...]
но ничто, что идет именем boost
или libboost
.
-dbg
, -dev
, и -doc
пакеты?Главная причина для того, чтобы выделить эти различные пакеты имеет отношение к дисковому пространству и скорости загрузки. В частности, это - большое беспокойство о зеркальном пространстве, так как это означает распределять несколько копий данных. Путем создания foo-common
, foo-data
, или foo-doc
пакеты Architecture: all
, мы только сохраняем одну копию данных в архиве вместо того, чтобы скопировать его с каждой архитектурой (например, i386, amd64, ect...). Отладочная информация не нужна большинством пользователей и только заканчивает тем, что заставила загрузку пакета занять больше времени.
Для пакетов в официальных архивах Ubuntu нет на самом деле никакой причины создать -dbg
пакеты вручную. Машины сборки автоматически разделяют отладочную информацию и помещают их в -dbgsym
пакеты размещаются на ddebs.ubuntu.com. (См.: Пакеты Отладочного символа) -dbg
пакеты, которые действительно существуют, обычно просто переносятся от Debian.
Что касается реализации, смотрите на этот вопрос:
Кратко, новые строки файла конфигурации должны быть созданы в debian/control
для каждого пакета. Затем debian/foo-*.install
файлы должны быть созданы также. Это позволит dh_install
помещать правильное содержание в правильные пакеты.
foo.install
поскольку основной двоичный пакет мог бы быть похожим:
usr/bin/
usr/lib/
foo-common.install
, foo-data.install
, foo-doc.install
, или безотносительно:
/usr/share/doc/
/usr/share/icons/
/usr/share/foo/
/usr/share/locale/
И для foo-dev
:
/usr/include/
/usr/lib/pkgconfig
/usr/lib/*.so
Создание foo-dbg
пакет требует редактирования debian/rules
как обычно dh_strip
разделит отладочную информацию. Таким образом, мы должны переопределить то поведение:
.PHONY: override_dh_strip
override_dh_strip:
dh_strip --dbg-package=foo-dbg
Повышение является сложным примером, давайте посмотрим на более простой сначала.
В точном openssl исходный пакет обеспечивает 5 двоичных пакетов:
libssl1.0.0
содержит OpenSSL динамическая библиотека, версия 1.0.0. Это - то, что должны выполнить программы, связанные против этой библиотеки. Имя пакета содержит номер версии, потому что у Вас могли бы быть другие версии библиотеки, установленной одновременно, если Вам связали другие программы против другой версии, которая не совместима с двоичным файлом с 1.0.0.openssl
содержит инструменты командной строки, которые пользуются библиотекой OpenSSL. Даже если у Вас есть несколько версий библиотеки, Вам не нужны несколько версий этих инструментов: существует всего один /usr/bin/openssl
и связанные инструменты, данные и документация.libssl-dev
содержит файлы, в которых Вы нуждаетесь, если Вы хотите скомпилировать программу, которая связывается против OpenSSL. Существуют заголовочные файлы C (*.h
), библиотеки для соединения (*.a
, *.so
), и несколько различных файлов.libssl-doc
содержит документацию для библиотеки OpenSSL. Вам только нужен этот пакет, если Вы собираетесь записать программы, которые пользуются библиотекой.libssl1.0.0-dbg
содержит отладочную информацию. Это только полезно для людей, которые отлаживают библиотеку OpenSSL или программы, которые используют его. ответ andrewsomething имеет больше информации о них -dbg
пакеты.Кроме того, точный содержит более старую версию библиотеки, libssl0.9.8
, потому что существуют программы, которые все еще связаны против более старой версии.
Другие пакеты, которые Вы могли бы видеть, являются привязкой для языков кроме C. OpenSSL не поставлется ни с кем (существует привязка к OpenSSL для других языков, но они не происходят из того же источника). Примером является sqlite3, который поставлется с привязкой TCL.
Главная причина для разделения пакетов как это состоит в том, что различные пакеты имеют различные целевые аудитории. Системе, где никто никогда ничего не компилирует только, нужно ядро lib
пакет и возможно инструменты командной строки; они будут установлены автоматически от зависимостей при необходимости. Если кто-то хочет скомпилировать программу, которая пользуется библиотекой, им нужно -dev
пакет. Если кто-то хочет записать программу, которая пользуется библиотекой, им нужно -doc
пакет.
Таким образом что относительно Повышения? Это следует за той же структурой, но потому что Повышение является огромной библиотекой, это разбито во многие меньшие пакеты: libboost-*1.46.1
и libboost-*1.46-dev
. В точном существует только одна версия Повышения, 1.46, но сновещательный имел и 1.42 и 1.46. Существует также метапакет значения по умолчанию повышения, который вытягивает в имеющем версию пакете как зависимость.
Рассмотрение libhangul, в дополнение к динамическому пакету библиотеки libhangul1
и пакет разработки libhangul-dev
, существует пакет libhangul-data
. Этот пакет содержит дополнительные данные, которые требуются библиотекой. Даже если у Вас есть несколько версий библиотеки, они могут совместно использовать -data
пакет. Кроме того, пакет является архитектурно-независимым. Программное обеспечение, которое содержит большой объем архитектурно-независимых данных, разделяется на архитектурно-зависимые и архитектурно-независимые пакеты, для оставления свободного места на сайтах распределения. Другой суффикс с подобным значением -common
.
Ubuntu и Debian, упаковывающий правила, очень похожи, таким образом материал о создании пакетов Debian также относится к Ubuntu. На самом деле у Вас может быть тот же исходный пакет для Debian и Ubuntu; единственная вещь, которая делает Debian и пакеты Ubuntu отличающимися, компилирует их против другой библиотеки versionsm, и это - не больше, чем различие между различными релизами Ubuntu. Имейте документацию разработчика Debian под рукой, особенно Руководство политики Debian и Ссылку Разработчика; см. Руководство Нового Специалиста по обслуживанию для введения. Проигнорируйте части о работе с проектом Debian и так далее, просто считайте части о создании пакета. dh_make
хороший путь состоит в том, чтобы начать с deb пакетом (Вы захотите выбрать “Библиотеку”).