web-dev-qa-db-fra.com

Comment et pourquoi créer des paquets -dbg, -dev, -doc?

J'écris un paquet Ubuntu pour un paquet qui fournit essentiellement un certain nombre de bibliothèques et d’en-têtes qui seront ensuite utilisés pour construire d’autres logiciels. L'emballage se décompose également en petits sous-emballages interdépendants; dans ce sens, le paquet est assez similaire à boost.

J'ai remarqué que des paquets comme boost fournissent

[...]
libboost-dbg
libboost-dev
libboost-doc
[...]
libboost-all-dev
[...]

mais rien qui porte le nom boost ou libboost.

  • Quelle est l'idée derrière ceci?
  • Quels sont les objectifs des packages -dbg, -dev et -doc?
  • Existe-t-il des instructions sur la manière d'écrire les fichiers de construction de ces packages?
15
Nico Schlömer

Idée & but

La principale raison de la séparation de ces différents packages est l’espace disque et la vitesse de téléchargement. En particulier, il s’agit d’une grande préoccupation pour l’espace miroir car cela implique de distribuer plusieurs copies des données. En créant les packages foo-common, foo-data ou foo-docArchitecture: all, nous ne conservons qu'une seule copie des données dans l'archive au lieu de la copier avec chaque architecture (par exemple, i386, AMD64, etc.). La plupart des utilisateurs n'ont pas besoin des symboles de débogage et finissent par rendre le téléchargement du paquet plus long.

Pour les paquets dans les archives officielles Ubuntu, il n’ya aucune raison de créer les paquets -dbg manuellement. Les machines de compilation suppriment automatiquement les symboles de débogage et les placent dans les packages -dbgsym hébergés sur ddebs.ubuntu.com. (Voir: paquets de symboles de débogage ) -dbg Les paquets existants sont généralement simplement transférés à partir de Debian.

Instructions

En ce qui concerne la mise en œuvre, jetez un oeil à cette question:

En bref, de nouvelles strophes doivent être créées dans debian/control pour chaque paquet. Ensuite, les fichiers debian/foo-*.install doivent également être créés. Cela permettra à dh_install de mettre le bon contenu dans les bons packages.

Le foo.install du paquet binaire principal pourrait ressembler à ceci:

usr/bin/
usr/lib/

foo-common.install, foo-data.install, foo-doc.install, ou autre chose:

/usr/share/doc/
/usr/share/icons/
/usr/share/foo/
/usr/share/locale/

Et pour foo-dev:

/usr/include/
/usr/lib/pkgconfig
/usr/lib/*.so

La création du paquetage foo-dbg nécessite l'édition de debian/rules car normalement, dh_strip supprime les symboles de débogage. Nous devons donc remplacer ce comportement:

.PHONY: override_dh_strip
override_dh_strip:
        dh_strip --dbg-package=foo-dbg
13
andrewsomething

Boost est un exemple complexe. Commençons par un exemple plus simple.

Plus précisément, le paquet source openssl fournit 5 paquets binaires:

  • libssl1.0.0 contient la bibliothèque dynamique OpenSSL, version 1.0.0. C'est ce que doivent exécuter les programmes liés à cette bibliothèque. Le nom du paquet contient un numéro de version car d'autres versions de la bibliothèque peuvent être installées simultanément si d'autres programmes sont liés à une autre version non compatible binaire avec 1.0.0.
  • openssl contient des outils de ligne de commande qui utilisent la bibliothèque OpenSSL. Même si vous avez plusieurs versions de la bibliothèque, vous n'avez pas besoin de plusieurs versions de ces outils: il n'y a qu'un /usr/bin/openssl et les outils, données et documentation associés.
  • libssl-dev contient les fichiers dont vous avez besoin si vous souhaitez compiler un programme lié à OpenSSL. Il existe des fichiers d'en-tête C (*.h), des bibliothèques pour la liaison (*.a, *.so) et quelques fichiers assortis.
  • libssl-doc contient de la documentation pour la bibliothèque OpenSSL. Vous n’avez besoin de ce paquet que si vous voulez écrire des programmes qui utilisent la bibliothèque.
  • libssl1.0.0-dbg contient des symboles de débogage. Cela n'est utile que pour les personnes qui déboguent la bibliothèque OpenSSL ou les programmes qui l'utilisent. La réponse de andrewsomething a plus d'informations sur ces paquets -dbg.

De plus, precise contient une version plus ancienne de la bibliothèque, libssl0.9.8 , car certains programmes sont toujours liés à la version précédente.

Les autres packages que vous pouvez voir sont des liaisons pour des langues autres que C. OpenSSL n'en est livré avec aucune (il existe des liaisons avec OpenSSL pour d'autres langues, mais elles ne proviennent pas de la même source). Un exemple est sqlite , qui est livré avec liaisons TCL .

La principale raison de la division de packages de ce type est que différents packages ont des publics cibles différents. Un système où personne ne compile jamais rien n'a besoin que du paquetage central lib, et peut-être des outils en ligne de commande; ils seront installés automatiquement à partir de dépendances si nécessaire. Si quelqu'un veut compiler un programme qui utilise la bibliothèque, il a besoin du paquet -dev. Si quelqu'un veut écrire un programme qui utilise la bibliothèque, il a besoin du paquet -doc.

Alors, qu'en est-il de Boost? Il suit la même structure, mais étant donné que Boost est une énorme bibliothèque, elle est divisée en plusieurs paquets plus petits: libboost-*1.46.1 et libboost-*1.46-dev. En effet, il n’existe qu’une version de Boost, 1.46 , mais oneiric en possédait à la fois 1.42 et 1.46 . Il existe également un métapaquet boost-defaults qui extrait le paquet versionné en tant que dépendance.

En regardant libhangul , en plus du package de bibliothèque dynamique libhangul1 et du package de développement libhangul-dev, il existe un package libhangul-data . Ce paquet contient des données supplémentaires requises par la bibliothèque. Même si vous avez plusieurs versions de la bibliothèque, elles peuvent partager le package -data. En outre, le package est indépendant de l'architecture. Les logiciels contenant une grande quantité de données indépendantes de l'architecture sont scindés en packages indépendants et indépendants de l'architecture, afin d'économiser de l'espace sur les sites de distribution. Un autre suffixe avec une signification similaire est -common.

Les règles de packaging d'Ubuntu et de Debian sont très similaires, donc la documentation sur la création de paquets Debian s'applique également à Ubuntu. En fait, vous pouvez avoir le même paquet source pour Debian et Ubuntu; la seule chose qui différencie les paquets Debian et Ubuntu est de les compiler avec différentes versions de bibliothèques, et ce n'est pas plus que la différence entre les différentes versions d'Ubuntu. Ayez à portée de main le documentation pour les développeurs Debian , en particulier le manuel de la stratégie Debian et le référence du développeur ; voir le New Maintainer's Guide pour une introduction. Ignorez les parties relatives à l'utilisation du projet Debian, etc., lisez simplement les parties relatives à la création d'un paquet. dh_make est un bon moyen de se familiariser avec un paquet deb (vous voudrez sélectionner "Bibliothèque").

12
Gilles